쿠버네티스 환경에서 네트워크 연결 문제는 애플리케이션 장애의 주요 원인 중 하나입니다.
Pod 간 통신 문제, DNS 오류, 외부 서비스 연결 실패 등을 해결하기 위해 쿠버네티스에서 제공하는 기본적인 네트워크 디버깅 명령어를 활용해야 합니다.
이 글에서는 kubectl 및 네트워크 진단 도구를 사용하여 네트워크 문제를 분석하는 방법을 다룹니다.
📌 글에서 다루는 상황들
1. kubectl exec 및 nslookup을 활용한 DNS 문제 해결
2. kubectl port-forward를 활용한 외부 서비스 연결 문제 진단
3. kubectl debug 및 네트워크 도구를 활용한 Pod 간 통신 확인
각 문제를 실무에서 바로 활용할 수 있도록 명령어 예제와 예상 결과 값을 제공합니다.
1️⃣ kubectl exec 및 nslookup을 활용한 DNS 문제 해결
❓ 문제 상황
운영팀에서 애플리케이션이 내부 서비스와 통신할 수 없는 DNS 문제를 겪고 있습니다.
Pod에서 nslookup을 실행하여 DNS 레코드가 올바르게 설정되었는지 확인해야 합니다.
• 문제 발생 Pod: web-app-pod
• DNS가 올바르게 설정되었는지 확인해야 함
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. kubectl exec 명령어를 사용하여 문제 발생 Pod 내부에서 DNS 상태를 확인합니다.
2. nslookup을 사용하여 내부 서비스 도메인 확인을 수행합니다.
✅ 문제 해결을 위한 명령어 실행
🔹 Pod 내부에서 DNS 조회 테스트
kubectl exec -it web-app-pod -- nslookup backend-service
💡 예상 출력 값 (정상 동작 시)
Server: 10.96.0.10
Address: 10.96.0.10#53
Non-authoritative answer:
Name: backend-service.default.svc.cluster.local
Address: 10.100.200.50
💡 예상 출력 값 (DNS 문제 발생 시)
Server: 10.96.0.10
Address: 10.96.0.10#53
** server can't find backend-service: NXDOMAIN
✅ DNS 문제를 확인하고, 필요 시 CoreDNS 설정을 점검해야 함
2️⃣ kubectl port-forward를 활용한 외부 서비스 연결 문제 진단
❓ 문제 상황
운영팀에서 외부 서비스(API 서버)와의 연결이 원활하지 않아 애플리케이션이 정상적으로 동작하지 않습니다.
이를 해결하기 위해 kubectl port-forward를 사용하여 로컬에서 직접 테스트를 수행해야 합니다.
• 연결해야 하는 서비스: external-api-service
• 포트 포워딩을 사용하여 로컬에서 접근 테스트 필요
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. kubectl port-forward를 사용하여 로컬에서 외부 API 서비스로 요청을 보낼 수 있도록 설정합니다.
2. curl 명령어를 사용하여 외부 API 응답을 확인합니다.
✅ 문제 해결을 위한 명령어 실행
🔹 외부 서비스로 포트 포워딩 설정
kubectl port-forward svc/external-api-service 8080:80
💡 예상 출력 값
Forwarding from 127.0.0.1:8080 -> 80
🔹 포트 포워딩을 통해 API 응답 확인
curl http://localhost:8080/healthz
💡 예상 출력 값 (정상 응답)
{"status": "ok"}
💡 예상 출력 값 (연결 실패 시)
curl: (7) Failed to connect to localhost port 8080: Connection refused
✅ 포트 포워딩을 활용하여 외부 API 서비스 연결 문제를 확인하고, 네트워크 설정을 점검할 수 있음
3️⃣ kubectl debug 및 네트워크 도구를 활용한 Pod 간 통신 확인
❓ 문제 상황
운영팀에서 두 개의 Pod 간 통신이 차단되어 있어 서비스가 정상적으로 동작하지 않습니다.
kubectl debug를 활용하여 네트워크 문제를 확인하고 원인을 분석해야 합니다.
• 문제 발생 Pod: app-pod
• 통신 대상 Pod: db-pod
✅ 어떻게 해결할 수 있을까요?
🛠️ 해결 방법
1. kubectl debug를 사용하여 문제 발생 Pod과 동일한 네트워크 환경에서 연결 테스트를 수행합니다.
2. ping 및 curl을 활용하여 네트워크 연결 상태를 확인합니다.
✅ 문제 해결을 위한 명령어 실행
🔹 네트워크 디버깅을 위한 임시 컨테이너 실행
kubectl debug app-pod -it --image=busybox -- sh
💡 예상 출력 값
/ #
🔹 네트워크 연결 확인 (Ping)
ping db-pod
💡 예상 출력 값 (정상 연결 시)
PING db-pod (10.100.1.20): 56 data bytes
64 bytes from 10.100.1.20: icmp_seq=1 ttl=64 time=0.5 ms
💡 예상 출력 값 (네트워크 차단 시)
ping: db-pod: Name or service not known
🔹 특정 포트로 TCP 연결 확인 (nc 활용)
nc -zv db-pod 3306
💡 예상 출력 값 (정상 연결 시)
db-pod (10.100.1.20:3306) open
💡 예상 출력 값 (연결 실패 시)
db-pod (10.100.1.20:3306) failed: Connection refused
✅ Pod 간 네트워크 연결 문제를 확인하고, 네트워크 정책(NetworkPolicy) 및 방화벽 설정을 점검해야 함