Kubernetes pod /etc/resolv.conf 有错误的名称服务器

Cod*_*imp 10 kubernetes

我家里有一个 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
Run Code Online (Sandbox Code Playgroud)

检查/etc/resolv.confdnsutils pod 中的文件,我注意到它设置了一个奇怪的 IP 地址nameserver:169.254.25.10。查看所有 Pod 后,似乎它们都有相同的配置,但 coredns 服务设置为 10.233.0.3。事实上,所有的IP都是10个左右。手动更改/etc/resolv.confdnsutils pod 以使用名称服务器的 10.233.0.3 似乎可以纠正该 pod 的问题,但如何修复所有 pod 的问题?那么 169.254.25.10 IP 是从哪里来的呢?据我所知,我的实际网络DNS服务器是10.0.0.5,并且我的内部网络中没有169.254 IP。

小智 4

正如我们可以从 Kubernetes dosc自定义 DNS 服务中读到的:

\n\n
\n

如果 Pod\xe2\x80\x99sdnsPolicy设置为 \xe2\x80\x9c default\xe2\x80\x9d,它将继承 Pod 运行所在节点的名称解析配置。Pod\xe2\x80\x99s DNS 解析的行为应与节点相同。

\n\n

如果您不想\xe2\x80\x99s 这样做,或者如果您想要为 Pod 使用不同的 DNS 配置,则可以使用 kubelet\xe2\x80\x99s --resolv-conf 标志。将此标志设置为 \xe2\x80\x9c\xe2\x80\x9d 以防止 Pod 继承 DNS。将其设置为有效的文件路径以指定除 DNS 继承之外的文件 /etc/resolv.conf

\n
\n\n

对于Pod\xe2\x80\x99s 的 DNS 策略如下:

\n\n
\n

可以针对每个 Pod 设置 DNS 策略。目前 Kubernetes 支持以下特定于 pod 的 DNS 策略。dnsPolicy 这些策略在Pod Spec 字段中指定 。

\n\n
    \n
  • \xe2\x80\x9c Default\xe2\x80\x9c:Pod 从运行 Pod 的节点继承名称解析配置。有关更多详细信息,请参阅 相关讨论
  • \n
  • \xe2\x80\x9c ClusterFirst\xe2\x80\x9c:任何与配置的集群域后缀不匹配的 DNS 查询,例如 \xe2\x80\x9c www.kubernetes.io\xe2\x80\x9d,都会转发到继承自节点。集群管理员可能配置了额外的存根域和上游 DNS 服务器。 有关在这些情况下如何处理 DNS 查询的详细信息,请参阅 相关讨论。
  • \n
  • \xe2\x80\x9c ClusterFirstWithHostNet\xe2\x80\x9c:对于使用 hostNetwork 运行的 Pod,您应该显式设置其 DNS 策略 \xe2\x80\x9c ClusterFirstWithHostNet\xe2\x80\x9d。
  • \n
  • \xe2\x80\x9c None\xe2\x80\x9c:它允许 Pod 忽略 Kubernetes 环境中的 DNS 设置。所有 DNS 设置都应该使用 dnsConfig Pod 规范中的字段提供。请参阅 下面的Pod\xe2\x80\x99s DNS 配置 小节。
  • \n
\n
\n