[CKA] Kubernetes 네트워크 장애 대응

CNI, CoreDNS, Service endpoint와 kube-proxy를 따라 Kubernetes 네트워크 문제를 확인합니다.

네트워크 장애는 CNI, DNS, Service 경로를 나눠 확인합니다. CoreDNS가 Pending이면 DNS 자체보다 Pod 네트워크가 준비되었는지 먼저 봅니다.

CNI

kubectl get pods -A -o wide
kubectl get daemonsets -A
kubectl describe node <node>

CNI Pod가 모든 노드에서 실행되는지, 노드의 Pod CIDR과 CNI 설정이 맞는지 확인합니다. NetworkPolicy가 필요한 환경이라면 사용 중인 CNI가 정책을 지원하는지도 확인합니다.

CoreDNS

kubectl get pods -n kube-system -l k8s-app=kube-dns
kubectl logs -n kube-system deployment/coredns
kubectl get svc,endpoints kube-dns -n kube-system

CoreDNS Pod와 kube-dns Service가 실행 중인데 endpoint가 없다면 Service selector를 확인합니다. Pod 내부에서 이름 해석을 직접 시험하면 Service DNS와 Pod DNS 문제를 구분할 수 있습니다.

kubectl run dns-test --image=busybox:1.28 --rm -it --restart=Never -- \
  nslookup kubernetes.default

Service와 kube-proxy

kube-proxy는 Service와 endpoint를 감시하고 가상 IP로 들어온 트래픽을 실제 Pod에 전달합니다.

kubectl get daemonset kube-proxy -n kube-system
kubectl get pods -n kube-system -l k8s-app=kube-proxy
kubectl logs -n kube-system <kube-proxy-pod>
kubectl get configmap kube-proxy -n kube-system -o yaml

Service 문제는 endpoint, selector, port와 targetPort를 차례로 비교합니다. 자세한 절차는 Service 디버깅과 DNS 디버깅에서 확인할 수 있습니다.