无法在kubernetes中解析dns [关闭]

ig9co6j1  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(119)

已关闭此问题为not about programming or software development。它目前不接受回答。

这个问题似乎不是关于a specific programming problem, a software algorithm, or software tools primarily used by programmers的。如果你认为这个问题与another Stack Exchange site的主题有关,你可以留下评论,解释在哪里可以回答这个问题。
4天前关闭。
Improve this question
我使用下一个命令来检查我的k8s中的dns问题:

kubectl apply -f https://k8s.io/examples/admin/dns/dnsutils.yaml
kubectl exec -i -t dnsutils -- nslookup kubernetes.default

nslookup结果为:

;; connection timed out; no servers could be reached

command terminated with exit code 1

dnsutils.yaml:

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

**注意:**这是一台默认禁用所有端口的机器,所以我问我们的IT管理员是否已经根据下一个doc check-required-ports打开了端口,我不确定这是否重要。

然后用下一个我可以得到核心的pod ip。

kubectl get pods -n kube-system -o wide | grep core
coredns-7877db9d45-swb6c                                 1/1     Running   0          2m58s   10.244.1.8       node2   <none>           <none>
coredns-7877db9d45-zwc8v                                 1/1     Running   0          2m57s   10.244.0.6       node1   <none>           <none>

在这里,10.244.0.6是我的主节点,而10.244.1.8是我的工作节点。
然后,如果我直接指定coredns pod ip:

主节点ok:

kubectl exec -i -t dnsutils -- nslookup kubernetes.default 10.244.0.6
Server:         10.244.0.6
Address:        10.244.0.6#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

工作节点不正常:

# kubectl exec -i -t dnsutils -- nslookup kubernetes.default 10.244.1.8
;; connection timed out; no servers could be reached

command terminated with exit code 1

所以,问题缩小到为什么工作节点上的COREDNS不工作?有什么需要注意的吗?

环境:

  • 操作系统:Ubuntu 18.04
  • K8S:v1.21.0
  • 群集 Boot 命令:
kubeadm init --pod-network-cidr=10.244.0.0/16
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
slsn1g29

slsn1g291#

最后,我找到了根本原因,这是硬件防火墙的问题,看到这个:

防火墙

当使用udp后端时,flannon使用UDP端口8285发送封装的数据包。
当使用vxlan后端时,内核使用UDP端口8472发送封装的数据包。
确保您的防火墙规则允许参与覆盖网络的所有主机使用此流量。
确保您的防火墙规则允许来自pod network cidr的流量访问您的kubernetes主节点。

  • nslookup clientdns server的同一个节点上时,它不会触发防火墙阻止,所以一切正常。
  • nslookup client不在dns server的同一个节点上时,就会触发防火墙封锁,导致我们无法访问dns服务器。

所以,打开端口后,现在一切都好了。

mf98qq94

mf98qq942#

在我的情况下,我使用的是亚马逊的Kubernetes(EKS),这个错误是由于一个糟糕的安全组。使用AWS托管节点组的默认启动模板修复了该问题。

相关问题