Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Low Level #15] 네트워크 디버깅을 위한 기본적인 쿠버네티스 명령어 활용

ygtoken 2025. 3. 16. 18:55
728x90

 

쿠버네티스 환경에서 네트워크 연결 문제는 애플리케이션 장애의 주요 원인 중 하나입니다.

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) 및 방화벽 설정을 점검해야 함

 

728x90