我在家里有一个 4 节点集群设置,我正在使用它,当我开始尝试进行 pod 到 pod 通信时遇到了问题。我使用 Kubespray 安装节点(1 个“服务器/控制器”和 3 个“节点”)。
问题是我无法按名称解析服务,只能按 IP 解析。例如,我使用 Helm 在默认命名空间中使用服务名称“jenkins”启动 Jeknins,但如果我尝试 ping “jenkins”或“jenkins.default”,它不会解决。在 dnsutils pod 中执行dig jenkins
或操作会产生:dig jenkins.default
/ # dig jenkins.default
; <<>> DiG 9.11.6-P1 <<>> jenkins.default
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 8927
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 229fbf94bb25564ae66dc8f45e7f646e5abb5f9dd4ede1d7 (good)
;; QUESTION SECTION:
;jenkins.default. IN A
;; Query time: 0 msec
;; SERVER: 169.254.25.10#53(169.254.25.10)
;; WHEN: Sat Mar 28 14:51:26 UTC 2020
;; MSG SIZE rcvd: 72
检查/etc/resolv.conf
dnsutils pod 中的文件,我注意到它设置了一个奇怪的 IP 地址nameserver
:169.254.25.10。查看所有 pod 后,似乎它们都具有相同的配置,但 coredns 服务设置为 10.233.0.3。事实上,所有的 IP 都是 10. 的东西。在 dnsutils pod 上手动更改/etc/resolv.conf
以将 10.233.0.3 用于名称服务器似乎可以为该 pod 更正它,但是如何为所有 pod 修复它?无论如何,那个 169.254.25.10 IP 是从哪里来的?我的实际网络 DNS 服务器是 10.0.0.5,据我所知,我的内部网络中没有 169.254 IP。
正如我们可以从 Kubernetes dosc定制 DNS 服务中看到的:
至于Pod 的 DNS Policy如下:
169.254.0.0/16 是链接本地地址。我主要发现这个地址是在链接断开时分配的。更多信息 - https://en.wikipedia.org/wiki/Link-local_address。