K3S Rancher - 基于 Debian 的 docker 镜像无法正确解析 dns

Zoi*_*dik 5 dns networking resolve kubernetes k3s

我面临着奇怪的问题。

我做了什么:

我部署了Rancher K3S集群,并且使用基于 debian 的映像进行 dns 解析时出现问题。域名未正确解析 - 它使用我们的域名之一添加后缀。

我发现了什么:

基于 Debian 的镜像在末尾添加了带有域的后缀。例如,我 ping google.com 及其 ping google.com.example.com。(example.com 是我们的域名之一 - 没有指定它,因为在我看来它并不重要)

同样,curl google.com 也会向 example.com 的 IP 地址发出请求。即使尝试了纯 Debian 映像,它仍然存在同样的问题。

基于 Alpine 的图像工作正常(ping 到 google.com ping google.com,nslookup 显示正确的 IP 地址)。

安装了 k3s 的主机服务器也可以正常工作(redhat os)。Ping 至 google.com ping google.com。

一些可能对您有帮助的附加数据:

CoreDNS configmap kubectl -n kube-system 获取 configmap coredns -o go-template={{.data.Corefile}}

.:53 {
    errors
    health
    ready
    kubernetes cluster.local in-addr.arpa ip6.arpa {
      pods insecure
      upstream
      fallthrough in-addr.arpa ip6.arpa
    }
    hosts /etc/coredns/NodeHosts {
      reload 1s
      fallthrough
    }
    prometheus :9153
    forward . 8.8.8.8
    cache 30
    loop
    reload
    loadbalance
}
Run Code Online (Sandbox Code Playgroud)

有人遇到相同或类似的问题吗?你有什么要点可以推动我解决吗?

谢谢,大卫

zar*_*ski 3

k3s我在 8 上的 (v.v1.19.3+k3s3)中遇到了类似的问题centos(不过不太确定它与图像的操作系统有什么关系)。k3s与其他发行版相比,即插即用有点少microk8s

使用本地 DNS 参数

在每个节点上,您可以说您想要使用主机的解析参数。如果k3s作为systemd 服务进行管理(可能是这种情况),您只需编辑即可/etc/systemd/system/k3s.service.env添加系统的resolv.conf

K3S_RESOLV_CONF=/etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

然后重新启动服务

K3S_RESOLV_CONF=/etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
  • plus:最简单的解决方案,易于编写脚本
  • 缺点:您需要在每个节点上执行此操作(据我所知)。不同系统上的不同之resolv.conf处在于,根据 kube 使用的节点,相同的部署可能会以不同的方式运行

相关文件

使用全球 DNS

没有尝试过,但这是文档