由于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重新加载设置。
这就是以上的内容。