다음을 통해 공유


AKS 클러스터의 Linux 노드에서 TCP 덤프 캡처

AKS(Microsoft Azure Kubernetes Service) 클러스터를 사용하는 경우 네트워킹 문제가 발생할 수 있습니다. 이러한 문제를 조사하기 위해 이 문서에서는 AKS 클러스터의 Linux 노드에서 TCP 덤프를 캡처한 다음 캡처를 로컬 컴퓨터에 다운로드하는 방법을 설명합니다.

필수 구성 요소

참고

Helm 차트를 통해 TCP 캡처를 자동화할 수 있습니다. 이 차트는 백그라운드에서 DaemonSet으로 실행할 수 있습니다. 자세한 내용은 TCP 덤프를 캡처하기 위한 이 사용자 지정 GitHub 도구를 참조하거나 다음 섹션의 단계를 사용합니다.

1단계: 문제를 해결할 노드 찾기

TCP 덤프를 끌어올 노드를 어떻게 결정합니까? 먼저 Kubernetes 명령줄 클라이언트 kubectl을 사용하여 AKS 클러스터의 노드 목록을 가져옵니다. 지침에 따라 클러스터에 연결하고 Azure Portal 또는 Azure CLI를 사용하여 명령을 실행 kubectl get nodes --output wide 합니다. 다음 출력과 유사한 노드 목록이 나타납니다.

$ kubectl get nodes --output wide
NAME                                STATUS   ROLES   AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION     CONTAINER-RUNTIME
aks-agentpool-34796016-vmss000000   Ready    agent   45h   v1.20.9   10.240.1.81    <none>        Ubuntu 18.04.6 LTS               5.4.0-1062-azure   containerd://1.4.9+azure
aks-agentpool-34796016-vmss000002   Ready    agent   45h   v1.20.9   10.240.2.47    <none>        Ubuntu 18.04.6 LTS               5.4.0-1062-azure   containerd://1.4.9+azure

2단계: Linux 노드에 연결

다음 단계는 네트워크 추적을 캡처하려는 AKS 클러스터 노드에 대한 연결을 설정하는 것입니다. 자세한 내용은 Linux 노드에 대한 대화형 셸 연결 만들기를 참조하세요.

3단계: tcpdump가 설치되어 있는지 확인

AKS Linux 노드에 대한 연결을 설정한 후 를 실행 tcpdump --version하여 tcpdump 도구가 이전에 노드에 설치되었는지 확인합니다. tcpdump가 설치되지 않은 경우 다음 오류 텍스트가 나타납니다.

# tcpdump --version
bash: tcpdump: command not found

그런 다음 고급 패키지 도구의 패키지 처리 유틸리티인 apt-get을 실행하여 Pod에 tcpdump를 설치합니다.

apt-get update && apt-get install tcpdump

tcpdump가 설치되어 있으면 다음 텍스트와 비슷한 내용이 나타납니다.

# tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1
OpenSSL 1.1.1  11 Sep 2018

4단계: 패킷 캡처 만들기

덤프를 캡처하려면 다음과 같이 tcpdump 명령을 실행합니다.

# tcpdump --snapshot-length=0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 6

추적이 실행되는 동안 문제를 여러 번 복제합니다. 이 작업을 수행하면 TCP 덤프 내에서 문제가 캡처됩니다. 문제를 복제하는 동안 타임스탬프를 확인합니다. 완료되면 패킷 캡처를 중지하려면 Ctrl+C를 누릅니다.

# tcpdump -s 0 -vvv -w /capture.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C526 packets captured
526 packets received by filter
0 packets dropped by kernel

5단계: 캡처를 로컬로 전송

패킷 캡처를 완료한 후 로컬로 덤프를 복사할 수 있도록 도우미 Pod를 식별합니다. 두 번째 콘솔을 연 다음 아래와 같이 를 실행 kubectl get pods하여 Pod 목록을 가져옵니다.

$ kubectl get pods
NAME                                                    READY   STATUS    RESTARTS   AGE
azure-vote-back-6c4dd64bdf-m4nk7                        1/1     Running   0          3m29s
azure-vote-front-85b4df594d-jhpzw                       1/1     Running   0          3m29s
node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2   1/1     Running   0          60s

도우미 Pod의 접두 node-debugger-aks사는 세 번째 행에 표시된 것처럼 입니다. Pod 이름을 바꾼 다음, 다음 kubectl 명령을 실행합니다. 이러한 명령은 Linux 노드에 대한 패킷 캡처를 검색합니다.

kubectl cp node-debugger-aks-nodepool1-38878740-vmss000000-jfsq2:/capture.cap capture.cap

타사 정보 고지 사항

이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.