본문 바로가기

개발하자

kubernetes에서 DNS를 확인할 수 없습니다

반응형

kubernetes에서 DNS를 확인할 수 없습니다

다음 명령을 사용하여 k8에서 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. yam:

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 관리자에게 다음 문서를 기반으로 이미 포트를 열어달라고 요청합니다. 이것이 중요한지 잘 모르겠습니다.

그리고 다음으로 나는 옥수수의 포디프를 얻을 수 있었다.

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>

여기, 주인님은 제 작업 노드입니다.

그렇다면 corens podip을 직접 지정하면 다음과 같습니다:

마스터 노드 확인:

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

그렇다면, 문제는 왜 작업 노드의 COORDS가 작동하지 않는가? 제가 주의해야 할 것이 있나요?

환경:

  • OS: ubuntu 18.04
  • K8S: v1.21.0
  • 클러스터 부팅 명령:
kubeadm init --pod-network-cidr=10.244.0.0/16
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml



마지막으로 근본 원인을 찾았습니다. 하드웨어 방화벽 문제입니다. 다음을 참조하십시오:

udp 백엔드를 사용할 경우 플란넬은 캡슐화된 패킷을 전송하기 위해 UDP 포트 8285를 사용합니다. vxlan 백엔드를 사용할 경우 커널은 캡슐화된 패킷을 전송하기 위해 UDP 포트 8472를 사용합니다. 방화벽 규칙이 오버레이 네트워크에 참여하는 모든 호스트에 대해 이 트래픽을 허용하는지 확인합니다. 방화벽 규칙을 통해 포드 네트워크 cidr로부터의 트래픽이 kubernetes 마스터 노드를 방문할 수 있도록 해야 합니다.

  • 의 같은 노드에 있으면 방화벽 블록이 트리거되지 않으므로 모든 것이 괜찮습니다.
  • 의 동일한 노드에 없으면 방화벽 블록을 트리거하므로 dns 서버에 액세스할 수 없습니다.

그러니까, 항구를 열고 나면, 이제 모든 게 괜찮아요.




제 경우에는 아마존의 쿠버네티스(EKS)를 사용하고 있었는데 이 오류는 나쁜 보안 그룹 때문이었습니다. AWS 관리 노드 그룹의 기본 시작 템플릿을 사용하여 문제를 해결했습니다.


반응형