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 도구가 노드 tcpdump --version
에 이전에 설치되었는지 확인합니다. 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
참고 항목
필터링 매개 변수를 사용하지 않고 tcpdump를 실행하면 특히 장기 실행의 경우 PCAP(패킷 캡처) 파일의 크기가 크게 증가할 수 있습니다. 따라서 원본, 대상 및 포트와 같은 필터를 추가하는 것이 좋습니다. 예시:
tcpdump dst 192.168.1.100
tcpdump dst host.mydomain.com
tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet
추적이 실행되는 동안 문제를 여러 번 복제합니다. 이 작업을 수행하면 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
참고 항목
디버그 Pod를 chroot /host
입력할 때 명령이 사용된 경우 소스 파일에 대해 이전에 /capture.cap
추가 /host
합니다.
타사 정보 고지 사항
이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.
도움을 요청하십시오.
질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.