1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
   | // pkg/kubelet/network/dns/dns.go
  func (c *Configurer) GetPodDNS(pod *v1.Pod) (*runtimeapi.DNSConfig, error) {
      // 1.先读取host上的dns配置,读取kubelet配置文件中ResolverConfig,在我们集群是/etc/kubernetes/resolv.conf     dnsConfig, err := c.getHostDNSConfig()          2. 查看pod中设置的dnsPolicy,默认你配置的是什么就是什么,但是对于clusterfirst+hostnetwrok的pod, dnstype会设置为host模式。     dnsType, err := getPodDNSType(pod)          switch dnsType {     	case podDNSNone:     		// DNSNone should use empty DNS settings as the base.     		dnsConfig = &runtimeapi.DNSConfig{}     	// 将集群的dns配置作为nameserver,c.clusterDNS     	// 只需要传入server, search和options两个参数是固定的,见最下面     	case podDNSCluster:     		if len(c.clusterDNS) != 0 {     			dnsConfig.Servers = []string{}     			for _, ip := range c.clusterDNS {     				dnsConfig.Servers = append(dnsConfig.Servers, ip.String())     			}     			dnsConfig.Searches = c.generateSearchesForDNSClusterFirst(dnsConfig.Searches, pod)     			dnsConfig.Options = defaultDNSOptions     			break     		}     		// clusterDNS is not known. Pod with ClusterDNSFirst Policy cannot be created.     		nodeErrorMsg := fmt.Sprintf("kubelet does not have ClusterDNS IP configured and cannot create Pod using %q policy. Falling back to %q policy.", v1.DNSClusterFirst, v1.DNSDefault)     		c.recorder.Eventf(c.nodeRef, v1.EventTypeWarning, "MissingClusterDNS", nodeErrorMsg)     		c.recorder.Eventf(pod, v1.EventTypeWarning, "MissingClusterDNS", "pod: %q. %s", format.Pod(pod), nodeErrorMsg)     		// Fallback to DNSDefault.     		fallthrough     	// 使用	kubelet --resolv-conf flag设置的配置,如果没有指定就生成默认的配置。     	case podDNSHost:     		if c.ResolverConfig == "" {     			for _, nodeIP := range c.nodeIPs {     				if utilnet.IsIPv6(nodeIP) {     					dnsConfig.Servers = append(dnsConfig.Servers, "::1")     				} else {     					dnsConfig.Servers = append(dnsConfig.Servers, "127.0.0.1")     				}     			}     			if len(dnsConfig.Servers) == 0 {     				dnsConfig.Servers = append(dnsConfig.Servers, "127.0.0.1")     			}     			dnsConfig.Searches = []string{"."}     		}     	}         // 使用自定义的dns配置     	if pod.Spec.DNSConfig != nil {     		dnsConfig = appendDNSConfig(dnsConfig, pod.Spec.DNSConfig)     	}     	// nameserver只有前3个起作用     	// search 只有前6个起作用     	return c.formDNSConfigFitsLimits(dnsConfig, pod), nil }
   |