K8s DNS 解析不适​​用于所有 Pod

时间:2021-01-27 01:19:06

标签: docker kubernetes kubeadm coredns project-calico

我目前在我的 Ubuntu 机器上使用 k8s 设置了 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 的请求。< /p>

两个图像的 /etc/resolv.conf 看起来相同。还有什么其他因素可能会影响这一点吗?

0 个答案:

没有答案