Kubernetes 내 Pod의 network packet 수집 및 모니터링 방법 문의

안녕하세요, Kubernetes 내 Pod 를 troubleshooting 하기 위한 방향을 찾기 위해 글 올립니다.

현황

Azure Kubernetes Service (AKS)에서 동작하는 Pod 하나가 User-assigned Managed Identity 를 사용하여 Azure SQL Database 에 접근하고 있습니다.

그런데 Managed Identity를 사용하면 ‘GET /metadata/identity/oauth2/token’ 요청 시 400 응답이 매번 오는 상황입니다.

이를 해결하기 위해 Azure Support 쪽 지원을 받고 있지만, 문제의 원인을 파악하는데 어려움을 겪고 있습니다.

본론

Azure Support 측에서 문제 원인을 진단하는데 Pod의 Network traffic 기록을 보면 도움이 될 것 같다고 하여, 방법을 찾아보고 있습니다.

제가 할 줄 아는 건 Wireshark 를 활용하는 방법들인데, Kubernetes 내 Pod 가 운영되는 환경이 제한적이다 보니 Wireshark를 사용할 수가 없습니다.

그래서 혹시 Kubernetes 내 Pod의 Network packet 자체를 수집 및 모니터링 방법은 없을지 질문 남깁니다.

일단 현재 AKS 에 Prometheus 와 Container Insights, Application Insights 가 운영되고 있지만, Metrics 와 Log 를 수집할 뿐 Network packet 자체를 수집하는 건 아니라서 어떻게 해야 할지 찾아보고 있습니다.

현재

일단 찾아본 방법으로는 아래처럼 tcpdump를 만들면 Network packet 자체는 수집 가능하지만, 제 추측으로는 HTTPS(TLS) 통신에 대한 private key가 없어서 내용을 볼 수 없는 건 아닐까 추측하고 있습니다.

Capturing Network Traffic from a Kubernetes Pod with Ephemeral Debug Containers: how to tcpdump a running pod|downey.io

Ephemeral Containers | Kubernetes

역시 .NET Runtime by Microsoft | Docker Hub 에는 tcpdump 명령어가 내장되어 있지 않네요.

4 Likes

결과

Ephemeral Containers | Kubernetes 를 사용하면 .NET Runtime 기능에 상관없이 Pod 디버깅이 가능하다는 사실을 파악했습니다.

여러가지 네트워크 툴이 설치된 nicolaka/netshoot: a Docker + Kubernetes network trouble-shooting swiss-army container (github.com) 를 베이스 이미지로 하여 Ephemeral Containers | Kubernetes 로 띄워 네트워크 디버깅이 가능합니다~

6 Likes

자문자답 레퍼런스 남겨주셔서 감사합니다!!

2 Likes