如何解决Kubernetes 集群内部没有解析外部 DNS 请求
在我的 Pod 中,我无法访问外部主机。就我而言,这将是 https://login.microsoftonline.com
。
我一直在关注 https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/ 上的调试 DNS 问题部分,但由于对 Kubernetes 缺乏了解,我无法应用给出的说明。
进行本地查找工作正常:
microk8s kubectl exec -i -t dnsutils -- nslookup kubernetes.default
Server: 10.152.183.10
Address: 10.152.183.10#53
Name: kubernetes.default.svc.cluster.local
Address: 10.152.183.1
但是,尝试访问任何外部域都失败了:
microk8s kubectl exec -i -t dnsutils -- nslookup stackoverflow.com
Server: 10.152.183.10
Address: 10.152.183.10#53
** server can't find stackoverflow.com.internal-domain.com: SERVFAIL
command terminated with exit code 1
已知问题部分有以下段落:
某些 Linux 发行版(例如 Ubuntu)通过以下方式使用本地 DNS 解析器 默认(系统解决)。系统解决的移动和替换 /etc/resolv.conf 带有可能导致致命转发的存根文件 解析上游服务器中的名称时循环。这可以修复 通过使用 kubelet 的 --resolv-conf 标志手动指向正确的 resolv.conf(使用 systemd-resolved,这是 /run/systemd/resolve/resolv.conf)。 kubeadm 自动检测 systemd-resolved,并相应地调整 kubelet 标志。
鉴于 microk8s 实例在 Ubuntu 上运行,这可能值得研究,但我不知道在哪里以及如何应用 --resolv-conf
标志。
感谢您提供有关如何追踪此问题的任何提示,因为包括 nslookup、traceroute 等在内的 DNS 在主机系统上完美运行。
更新 /etc/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad
search internal-domain.com
这就是 dnsutils pod 中的 /etc/resolv.conf:
search default.svc.cluster.local svc.cluster.local cluster.local internal-domain.com
nameserver 10.152.183.10
options ndots:5
配置映射:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
log . {
class error
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . 8.8.8.8 8.8.4.4
cache 30
loop
reload
loadbalance
}
解决方法
最后我想不通,这种行为的原因是什么,所以我完全重置了节点:
microk8s reset
sudo snap remove microk8s
sudo snap install microk8s --classic --channel=1.19
按照其余说明配置秘密等。
,向前改变。 8.8.8.8 8.8.4.4 转发。 /etc/resolv.conf
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。