Can';在kubernetes中解析dns

Can';在kubernetes中解析dns,kubernetes,coredns,Kubernetes,Coredns,我使用next命令检查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

我使用next命令检查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
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
注意:这是一台默认禁用所有端口的机器,因此我要求我们的it管理员根据下一个文档打开端口,我不确定这是否重要

使用下一步,我可以得到coredns的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>
工作节点不正常:

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
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不工作?有什么我需要注意的吗

环境:

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
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
  • OS:ubuntu18.04
  • K8S:v1.21.0
  • 群集启动命令:

最后,我找到了根本原因,这是硬件防火墙问题,请参阅:

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

  • nslookup客户端
    位于
    dns服务器
    的同一节点上时,它不会触发防火墙阻止,因此一切正常
  • nslookup客户端
    不在
    dns服务器
    的同一节点上时,它将触发防火墙阻止,因此我们无法访问dns服务器

因此,打开端口后,一切都正常。

很难掌握您在那里做什么。你介意试着重新表述一下这个问题,使它更具可读性吗?还有,您运行的是什么操作系统?你是如何引导你的集群的?@thomas Updated.Mind sharing
kubectl get no-o wide
?在创建集群之前,你是否已经完成了所有的先决条件?您是否禁用了交换功能(
sudo swapoff-a
)?您的集群从何处剥离?内部部署,或与任何其他云提供商?