AKS 클러스터의 Linux 노드에서 TCP 덤프 캡처
AKS(Microsoft Azure Kubernetes Service) 클러스터를 사용하는 경우 네트워킹 문제가 발생할 수 있습니다. 이러한 문제를 조사하기 위해 이 문서에서는 AKS 클러스터의 Linux 노드에서 TCP 덤프를 캡처한 다음 캡처를 로컬 컴퓨터에 다운로드하는 방법을 설명합니다.
필수 구성 요소
- Kubernetes kubectl 도구입니다 . Azure CLI를 사용하여 kubectl을 설치하려면 az aks install-cli 명령을 실행합니다.
- AKS 클러스터. AKS 클러스터가 없는 경우 Azure CLI를 사용하거나 Azure Portal 통해 만듭니다.
- Linux 노드에 설치된 tcpdump 명령줄 도구입니다.
참고
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 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기