Kubernetes 환경에서 Application이 정상적으로 실행되고 있어도 Network 문제가 발생하면 서비스는 정상적으로 동작하지 않을 수 있습니다.
Container는 실행 중인데 접속이 되지 않는 상황은 Kubernetes 운영에서 매우 흔한 장애 유형입니다.
예:
Frontend Pod 정상 실행
↓
Backend Service 연결 실패
↓
Database 접근 불가
↓
Application 오류 발생
이러한 문제를 해결하려면 Kubernetes Network 구조를 이해하고 Layer별로 원인을 분석해야 합니다.
| 영역 | 확인 대상 |
|---|---|
| Pod Network | Pod 간 통신 |
| Service Network | Service 연결 |
| DNS | Service 이름 변환 |
| CNI | Container Network 구성 |
| Ingress | 외부 접근 |
Kubernetes Network Troubleshooting 방법을 이해하면 서비스 연결 장애를 빠르게 분석하고 안정적인 Cluster 운영이 가능합니다.
Kubernetes Network 구조 복습
Kubernetes Network는 기본적으로 다음 원칙을 가지고 있습니다.
첫 번째:
모든 Pod는 고유한 IP를 가집니다.
두 번째:
모든 Pod는 다른 Pod와 통신 가능합니다.
세 번째:
Node에서도 Pod와 통신 가능합니다.
구조:
Pod
↓
CNI Plugin
↓
Node Network
↓
다른 Pod
이 Network Layer가 정상적으로 동작해야 Application 통신이 가능합니다.
Kubernetes Network 장애 주요 원인
대표적인 원인:
| 원인 | 설명 |
|---|---|
| Service 설정 오류 | 잘못된 Selector |
| DNS 오류 | Service 이름 해석 실패 |
| CNI 문제 | Pod Network 오류 |
| Port 설정 오류 | Container Port 불일치 |
| NetworkPolicy | Traffic 차단 |
| Ingress 오류 | 외부 접근 실패 |
각 Layer별 확인이 필요합니다.
Kubernetes Pod 간 통신 문제 분석
가장 기본적인 Network 문제입니다.
확인:
Pod IP 확인:
kubectl get pods -o wide
테스트:
kubectl exec -it pod-name -- curl pod-ip
확인:
- Pod IP 연결
- Port 접근
- Firewall
Pod Network 자체 문제인지 확인합니다.
Kubernetes Service 연결 문제
Application은 보통 Pod IP가 아닌 Service를 통해 연결합니다.
구조:
Client
↓
Service
↓
Pod
Service 설정 오류:
↓
Backend 연결 실패
확인:
kubectl get service
상세:
kubectl describe service service-name
확인 항목:
- Selector
- Port
- TargetPort
Kubernetes Selector 오류
Service는 Label Selector로 Pod를 찾습니다.
예:
Service:
selector:
app: backend
Pod:
labels:
app: api
Label 불일치:
↓
Endpoint 없음
↓
Service 연결 실패
확인:
kubectl get endpoints
Endpoint가 없다면 Selector 문제일 가능성이 높습니다.
Kubernetes DNS 문제 분석
Kubernetes Service 접근은 DNS 기반으로 동작합니다.
예:
backend.default.svc.cluster.local
DNS 문제:
Service 이름 해석 실패
↓
Connection Error
확인:
CoreDNS Pod 확인:
kubectl get pods -n kube-system
DNS 테스트:
nslookup service-name
CoreDNS 상태를 확인해야 합니다.
Kubernetes CoreDNS 장애
CoreDNS는 Cluster 내부 DNS를 담당합니다.
문제:
CoreDNS Pod 장애
↓
Service 이름 변환 실패
↓
Application 연결 실패
확인:
kubectl logs -n kube-system coredns
필요하면 재시작 상태도 확인합니다.
Kubernetes CNI 문제 분석
CNI는 Container Network Interface입니다.
역할:
Pod 생성
↓
Network Interface 생성
↓
IP 할당
↓
통신 가능
CNI 오류 발생:
↓
Pod Network 생성 실패
↓
통신 장애
확인:
kubectl get pods -n kube-system
Network Plugin 상태를 확인합니다.
Kubernetes NetworkPolicy 문제
NetworkPolicy는 Traffic을 제한합니다.
예:
Frontend
↓
Backend 허용
Database
↓
차단
잘못된 Policy:
↓
필요한 Traffic 차단
확인:
kubectl get networkpolicy
Policy 적용 여부를 확인해야 합니다.
Kubernetes Port 설정 오류
가장 흔한 Application 연결 오류입니다.
구조:
Container Port
↓
Service TargetPort
↓
Service Port
예:
Application:
8080
Service:
80 → 8080
Port 연결이 맞아야 합니다.
Kubernetes Ingress Network 문제
외부 접속 문제는 Ingress를 확인해야 합니다.
구조:
User
↓
Load Balancer
↓
Ingress Controller
↓
Service
↓
Pod
확인:
- Host 설정
- TLS 설정
- Backend Service
- Controller 상태
Kubernetes Network 장애 분석 순서
실제 운영 순서:
1단계
Pod 상태 확인
kubectl get pods
↓
2단계
Service 확인
kubectl get svc
↓
3단계
Endpoint 확인
kubectl get endpoints
↓
4단계
DNS 확인
nslookup
↓
5단계
NetworkPolicy 확인
kubectl get networkpolicy
Layer별로 좁혀가며 분석합니다.
Kubernetes Network Debug Container 활용
운영 환경에서는 Debug Container를 사용합니다.
확인:
- DNS
- Port
- HTTP 연결
- Network Route
예:
kubectl run debug \
--image=nicolaka/netshoot
Network 문제 분석에 활용됩니다.
Kubernetes Network 장애 예방 방법
Production 환경에서는:
| 항목 | 방법 |
|---|---|
| NetworkPolicy | Traffic 제한 |
| DNS Monitoring | CoreDNS 감시 |
| CNI 관리 | Plugin 상태 확인 |
| Service Test | 자동 검증 |
| Observability | Network Metric 확인 |
사전 감지가 중요합니다.
Kubernetes Network Troubleshooting과 Observability
Network 문제 분석에는 여러 데이터가 필요합니다.
Metric:
↓
Traffic 증가 확인
Log:
↓
Connection Error 확인
Trace:
↓
Service 지연 확인
통합 분석이 필요합니다.
Kubernetes Network Troubleshooting 장점
| 장점 | 설명 |
|---|---|
| 빠른 장애 분석 | 원인 확인 |
| Layer별 접근 | 효율적 해결 |
| 서비스 안정성 | Downtime 감소 |
| 운영 자동화 | 문제 예방 |
Network 분석 능력은 Kubernetes 운영자의 핵심 역량입니다.
자주 묻는 질문
Pod는 Running인데 접속이 안 되는 이유는 무엇인가요?
Application Port, Service 설정, NetworkPolicy, DNS 문제 등을 확인해야 합니다.
Service Endpoint가 없으면 무엇을 확인해야 하나요?
Service Selector와 Pod Label이 일치하는지 확인해야 합니다.
NetworkPolicy를 삭제하면 해결되나요?
일시적으로 해결될 수 있지만 필요한 Traffic만 허용하도록 정책을 수정하는 것이 좋습니다.
마무리
Kubernetes Network Troubleshooting은 Pod, Service, DNS, CNI, NetworkPolicy 등 여러 Layer를 순서대로 분석하는 과정입니다.
| 확인 영역 | 명령어 |
|---|---|
| Pod | kubectl get pods -o wide |
| Service | kubectl get svc |
| Endpoint | kubectl get endpoints |
| DNS | nslookup |
| NetworkPolicy | kubectl get networkpolicy |
Network 장애 분석 방법을 이해하면 Kubernetes 환경에서 Application 연결 문제를 빠르게 해결하고 안정적인 서비스를 운영할 수 있습니다.
다음 글에서는 Kubernetes Scheduling 고급 영역인 Kubernetes Scheduler 완벽 가이드! Pod 배치 결정 알고리즘과 Node 선택 구조 이해하기를 진행하겠습니다.