docker - K8s DNS 解析不适用于所有 pod
问题描述
我目前k8s
在我的 Ubuntu 机器上使用kubeadm
. 对于 CNI,我使用的是calico
. 我正在调试以下 DNS 问题(我已经看过很多关于此的帖子):
[ERROR] plugin/errors: 2 kubernetes.default. A: read udp 192.168.83.69:59301->172.16.5.2:53: i/o timeout
首先,我有以下测试pod
配置:
apiVersion: v1
kind: Pod
metadata:
name: dnsutils
namespace: default
spec:
containers:
- name: dnsutils
image: gcr.io/kubernetes-e2e-test-images/dnsutils:1.3
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
在这个 pod 上dnsutils
,DNS 解析似乎按预期工作:
$ kubectl exec -i -t dnsutils -- nslookup kubernetes.default
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: kubernetes.default.svc.cluster.local
Address: 10.96.0.1
这是界面tshark
上的转储calico
(当然,看起来很正常):
10.745406511 192.168.83.77 → 10.96.0.10 DNS 104 Standard query 0x29d6 A kubernetes.default.default.svc.cluster.local
18 10.745625610 10.96.0.10 → 192.168.83.77 DNS 197 Standard query response 0x29d6 No such name A kubernetes.default.default.svc.cluster.local SOA ns.dns.cluster.local
19 10.745902344 192.168.83.77 → 10.96.0.10 DNS 96 Standard query 0x1dda A kubernetes.default.svc.cluster.local
20 10.746111103 10.96.0.10 → 192.168.83.77 DNS 148 Standard query response 0x1dda A kubernetes.default.svc.cluster.local A 10.96.0.1
21 10.746373190 192.168.83.77 → 10.96.0.10 DNS 96 Standard query 0x5a2c AAAA kubernetes.default.svc.cluster.local
22 10.746537515 10.96.0.10 → 192.168.83.77 DNS 189 Standard query response 0x5a2c AAAA kubernetes.default.svc.cluster.local SOA ns.dns.cluster.local
现在,我开始用随机busybox
图像尝试同样的事情:
kubectl run -i --tty --rm debug --image=busybox --restart=Never -- sh
但是,对于此busybox
图像,同样nslookup
不起作用:
# nslookup kubernetes.default
Server: 10.96.0.10
Address: 10.96.0.10:53
** server can't find kubernetes.default: NXDOMAIN
*** Can't find kubernetes.default: No answer
这是相应的tshark
输出:
1 0.000000000 192.168.83.80 → 10.96.0.10 DNS 78 Standard query 0x0700 A kubernetes.default
2 0.000057953 192.168.83.80 → 10.96.0.10 DNS 78 Standard query 0x0700 AAAA kubernetes.default
3 0.047930496 10.96.0.10 → 192.168.83.80 DNS 153 Standard query response 0x0700 No such name AAAA kubernetes.default SOA a.root-servers.net
4 2.502185605 192.168.83.80 → 10.96.0.10 DNS 78 Standard query 0x0700 AAAA kubernetes.default
5 2.502622008 10.96.0.10 → 192.168.83.80 DNS 153 Standard query response 0x0700 No such name AAAA kubernetes.default SOA a.root-servers.net
我看到的主要区别是,对于工作示例,它对整个域发出正确的请求kubernetes.default.default.svc.cluster.local
,而在第二个示例中,请求仅针对kubernetes.default
.
两个图像的/etc/resolv.conf
外观相同。还有什么可能会影响到这一点吗?
解决方案
推荐阅读
- python - 使用 Tabula 从 PDF 中将表格作为字符串读取
- angular - 角度 9 的运行错误:严格模式代码可能不包含 with 语句
- javascript - 列表中的信息并显示在地图上
- domain-driven-design - 六边形架构在控制器或服务中聚合
- html - WKWebView 没有响应长按
- php - 如何使用 PHP 检查特定范围内的变量
- python - 遍历列,查找选择,创建新列
- typescript - 仅当用户在指定时间内离线时才发出值
- php - 如何安装最新版本的 php?
- docker - 容器启动失败时运行 execlineb。Docker for windows