Kubernetes Pod에서 패킷을 캡처하고 Telnet을 통해 네트워크 연결을 확인하는 방법
Kubernetes의 일상적인 운영 및 유지 관리에서 포드 간 네트워크 연결이나 포트 연결과 같은 포드 네트워크 문제에 직면하는 경우가 많습니다. 더 복잡한 경우 이를 찾으려면 컨테이너에서 패킷 캡처 및 분석이 필요합니다. Kubertnets 시나리오에서는 Pod에서 사용하는 이미지가 일반적으로 최대한 간소화되어 있으며 대부분이 Alpine 기본 이미지를 기반으로 합니다. 따라서 Pod에는 다음과 같은 복잡한 도구는 물론 ping, telnet, nc 및 cur 명령도 없습니다. tcpdump.tcpdump. 이러한 도구를 컨테이너나 이미지에 직접 설치하는 가장 원시적인 방법 외에도 다른 방법을 살펴보겠습니다.
프로젝트 주소 kubect debug, /aylei/kubectl-debug
kubectl-debug는 Kubernetes에서 Pod 문제를 쉽게 해결하는 데 도움이 되는 간단한 kubectl 플러그인입니다. 백그라운드에서 수행되는 작업은 매우 간단합니다. 실행 중인 Pod에 새 컨테이너를 추가로 생성하고 대상 컨테이너의 pid, network, user 및 ipc 네임스페이스에 새 컨테이너를 추가합니다. 이때 netstat를 직접 사용할 수 있습니다. 새로운 컨테이너는 tcpdump 및 tcpdump와 같은 익숙한 도구를 사용하여 문제를 해결하며, 사전 설치된 추가 문제 해결 도구 없이도 기존 컨테이너를 최소화할 수 있습니다. 작업 과정은 공식 프로젝트 주소 문서에서 확인할 수 있습니다.
이것이 kubectl 디버그 명령 뒤에 있는 내용입니다.
단계는 다음과 같습니다.
다음으로 클라이언트는 두 연결 5와 6을 통해 시작할 수 있습니다. 디버그 작업 . 작업이 완료된 후 디버그 에이전트는 디버그 컨테이너를 정리하고 플러그인은 디버그 에이전트를 정리하며 한 번의 디버그가 완료됩니다.
Pod가 위치한 net ns를 입력하는 방법은 2가지가 있습니다. 전제조건은 Pod가 위치한 호스트에 로그인하여 컨테이너 ID를 알아내야 한다는 것입니다. 포드에 해당하는 이름입니다.
nsenter는 util-linux의 도구입니다. net ns 컨테이너를 입력하는 것 외에도 공식 문서를 확인할 수 있습니다.