我有一个有 3 个节点的 kubernetes:
[root@ops001 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
azshara-k8s01 Ready <none> 143d v1.15.2
azshara-k8s02 Ready <none> 143d v1.15.2
azshara-k8s03 Ready <none> 143d v1.15.2
当我部署了一些 pod 后,我发现只有一个节点azshara-k8s03
可以解析 DNS,另外两个节点无法解析 DNS.这是我的 azshara-k8s03 主机节点/etc/resolv.conf:
options timeout:2 attempts:3 rotate single-request-reopen
; generated by /usr/sbin/dhclient-script
nameserver 100.100.2.136
nameserver 100.100.2.138
这是另外 2 个节点/etc/resolv.conf:
nameserver 114.114.114.114
我应该保持相同吗? 我应该怎么做才能使 DNS 在 3 个节点中正常工作?
您是否尝试过114.114.114.114
是否真的可以从您的节点访问? 如果没有,请将其更改为实际的内容;-]
还要检查您的 kublet 实际使用的resolv.conf
:它通常不是/etc/resolv.conf
:请ps ax |grep kubelet
并检查--resolv-conf
标志的值,并查看该文件中的 DNS 是否正常工作。
更新:
在 2 个有问题的节点上无法解析哪些名称? 这些是公共名称还是仅内部名称? 如果它们只是内部的,那么 114.114.114 将不知道它们。 我无法访问100.100.2.136
和100.100.2.138
:它们是您的内部 DNS 吗?如果是这样,请尝试仅将 2 个不起作用的节点上的/etc/resolv.conf
更改为与正常工作的节点相同。
第一步,你的 CoreDNS 端口正在监听你指定的端口,你可以在其他 pod 中登录 pod,并尝试使用 telnet 命令来确保 DNS 暴露端口是可访问的(目前我正在使用 alpine,centos 使用 yum,ubuntu 或 debian 使用 apt-get(:
apk add busybox-extras
telnet <your coredns server ip> <your coredns listening port>
第二步:登录每台主机上的 pod,并确保每个 pod 中的端口是可访问的,如果 telnet 端口无法访问,则应先修复您的 cluser 网络。