由于Kubernetes的CoreDNS不能使用主机的/etc/hosts文件,因此需要将记录添加到ConfigMap中

经纬

我在使用kubeadm创建K8s环境时注意到最近流行的CoreDNS不会使用主机的/etc/hosts。这导致一个问题,比如像metrics-server这样的Pod要获取节点的指标,它会尝试连接节点名称,如果节点名称在DNS中找不到,就无法解析。

应对

可以通过向CoreDNS的ConfigMap添加hosts条目并描述记录来完成。

$ kubectl edit cm coredns -n kube-system

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health
        # 以下追加
        hosts {
           192.168.11.nn xxx
           192.168.11.nn yyy
           192.168.11.nn xxx
           fallthrough
        }
        # ここまで
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           upstream
           fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        proxy . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
  (略)

只需要一个选项

等待一会儿,直到在hosts文件中添加的记录可以解析。需要等待CoreDNS的Pod重新加载设置。

这就是以上的内容。

广告
将在 10 秒后关闭
bannerAds