AKS 클러스터 내의 Pod 또는 서비스에 대한 연결 문제 해결(내부 트래픽)
이 문서에서는 동일한 AKS(Microsoft Azure Kubernetes Services) 클러스터 내에서 내부 트래픽으로 Pod 또는 서비스에 대한 연결 문제를 해결하는 방법을 설명합니다.
필수 조건
Kubernetes kubectl 도구 또는 클러스터에 연결할 유사한 도구입니다. Azure CLI를 사용하여 kubectl을 설치하려면 az aks install-cli 명령을 실행합니다.
패키지를 처리하기 위한 apt-get 명령줄 도구입니다.
클라이언트 URL(cURL) 도구 또는 유사한 명령줄 도구입니다.
TCP 연결에 대한 Netcat(
nc
) 명령줄 도구입니다.
문제 해결 검사 목록
1단계: 테스트 Pod 및 원격 서버 포트 설정
테스트 Pod를 설정하고 필요한 포트가 원격 서버에서 열려 있는지 확인합니다. 원본 Pod(또는 원본 Pod와 동일한 네임스페이스에 있는 테스트 Pod) 내에서 다음 단계를 수행합니다.
kubectl 실행 명령을 실행하여 클러스터에서 테스트 Pod를 시작 합니다.
kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable
Pod에 액세스한 후 다음
apt-get
명령을 실행하여 DNS Utils, cURL 및 Netcat 패키지를 설치합니다.apt-get update -y apt-get install dnsutils -y apt-get install curl -y apt-get install netcat-openbsd -y
패키지가 설치되면 다음 cURL 명령을 실행하여 Pod의 IP 주소에 대한 연결을 테스트합니다.
curl -Iv http://<pod-ip-address>:<port>
Netcat 명령을 실행하여 원격 서버가 필요한 포트를 열었는지 확인합니다.
nc -z -v <endpoint> <port>
2단계: Pod, 컨테이너, Kubernetes 서비스 및 엔드포인트에 대한 운영 정보 보기
명령줄에서 kubectl 및 cURL을 사용하여 다음 단계에 따라 모든 것이 예상대로 작동하는지 확인합니다.
대상 Pod가 실행 중인지 확인합니다.
kubectl get pods -n <namespace-name>
대상 Pod가 제대로 작동하면 Pod 상태가
Running표시되고 Pod가 다음과 같이 READY
표시됩니다.NAME READY STATUS RESTARTS AGE my-other-pod 1/1 Running 0 44m my-pod 1/1 Running 0 44m
Pod 로그에서 액세스 오류를 검색합니다.
kubectl logs <pod-name> -n <namespace-name>
다중 컨테이너 Pod에서 개별 컨테이너에 대한 Pod 로그를 검색합니다.
kubectl logs <pod-name> -n <namespace-name> -c <container-name>
Pod 내에 있는 애플리케이션이 반복적으로 다시 시작되는 경우 이전 컨테이너 인스턴스의 Pod 로그를 확인하여 종료 메시지를 가져옵니다.
kubectl logs <pod-name> --previous
다중 컨테이너 사례의 경우 다음 명령을 사용합니다.
kubectl logs <pod-name> -c <container-name> --previous
트래픽을 차단할 수 있는 네트워크 정책이 있는지 확인합니다.
kubectl get networkpolicies -A
다음 표와 유사한 출력이 표시되어야 합니다.
NAMESPACE NAME POD-SELECTOR AGE kube-system konnectivity-agent app=konnectivity-agent 4d1h
사용자 지정으로 만든 다른 네트워크 정책이 표시되는 경우 해당 정책이 Pod에 대한 액세스를 차단하고 있는지 확인합니다.
서비스 IP 주소에서 애플리케이션에 연결할 수 있는지 확인합니다. 먼저 명령을 실행하여 외부 IP 주소 및 포트와 같은 서비스 리소스에 대한 세부 정보를 표시합니다
kubectl get services
.kubectl get services -n <namespace-name>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-service LoadBalancer 10.0.21.43 20.119.121.232 80:31773/TCP 28s
그런 다음, 서비스 IP 주소 및 포트를 사용하여 cURL을 실행하여 애플리케이션에 연결할 수 있는지 확인합니다.
curl -Iv http://20.119.121.232:80 . . . < HTTP/1.1 200 OK HTTP/1.1 200 OK
서비스에 대한 자세한 정보를 가져옵니다.
kubectl describe services <service-name> -n <namespace-name>
Pod의 IP 주소를 확인합니다.
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE my-pod 1/1 Running 0 12m 10.244.0.15 aks-agentpool-000000-vmss000000
Pod의 IP 주소가 서비스의 엔드포인트로 존재하는지 확인합니다.
kubectl describe services my-cluster-ip-service
Name: my-cluster-ip-service Namespace: default Selector: app=my-pod Type: ClusterIP IP Family Policy: SingleStack IP Families: IPv4 IP: 10.0.174.133 IPs: 10.0.174.133 Port: <unset> 80/TCP TargetPort: 80/TCP Endpoints: 10.244.0.15:80 # <--- Here
엔드포인트를 직접 확인합니다.
kubectl get endpoints
NAME ENDPOINTS AGE my-cluster-ip-service 10.244.0.15:80 14m
서비스에 대한 연결이 작동하지 않는 경우 CoreDNS Pod 및 CoreDNS Pod를 다시 시작
kube-proxy
합니다.kubectl delete pods -n kube-system -l component=kube-proxy kubectl delete pods -n kube-system -l k8s-app=kube-dns
노드가 과용되지 않는지 확인합니다.
kubectl top nodes
참고 항목
Azure Monitor를 사용하여 클러스터의 사용량 현황 데이터를 가져올 수도 있습니다.
도움을 요청하십시오.
질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.