(4장)쿠버네티스 네트워킹의 기초: Pod는 어떻게 통신할까?
🌐 쿠버네티스 네트워킹의 기초: Pod는 어떻게 통신할까?
쿠버네티스를 처음 접한 사람들에게 가장 헷갈리는 부분 중 하나는 바로 네트워킹입니다.
Pod 간 통신은 어떻게 되는지, 외부에서 접근은 어떤 방식으로 처리되는지,
ClusterIP, DNS, CNI 플러그인이란 단어들은 무엇을 의미하는지, 이 글에서 자세히 알아보겠습니다.
🧩 쿠버네티스 네트워킹의 기본 철학
쿠버네티스는 다음과 같은 네트워킹 철학을 따릅니다:
- 모든 Pod는 다른 모든 Pod와 직접 통신할 수 있어야 한다.
- Pod는 고유한 IP를 가진다.
- 통신 시 NAT(Network Address Translation)을 사용하지 않는다.
즉, 마치 하나의 평평한 네트워크에 모든 Pod가 연결된 것처럼 동작해야 합니다.
📌 이는 기존의 가상머신 네트워킹 방식과 큰 차이가 있습니다.
📦 Pod 간 통신의 구조
각 Pod는 쿠버네티스 내부에서 고유한 IP 주소를 부여받습니다.
하지만 이 IP는 클러스터 내부 전용이며, 외부에서는 접근할 수 없습니다.
예시:
pod-a: 10.244.0.12pod-b: 10.244.2.7
pod-a → pod-b 직접 통신 가능 (내부 IP 기반)
🔗 Service와 ClusterIP란?
Pod는 자주 생성·삭제되므로, IP가 바뀌는 문제를 해결하기 위해 Service를 사용합니다.
📘 Service란?
- 여러 Pod에 공통 주소를 부여하는 쿠버네티스 객체
- Pod IP가 바뀌어도 Service를 통해 계속 접근 가능
📘 ClusterIP란?
- 기본 서비스 타입
- 내부 통신 전용 가상 IP를 부여
kubectl expose deployment myapp --port=80 --target-port=8080 --name=myapp-svc
| 항목 | 설명 |
|---|---|
| 기본 타입 | ClusterIP (내부 전용) |
| 외부 접근 | ❌ 불가능 |
| 내부 통신 | ✅ 가능 (DNS 이름으로 연결) |
| 자동 로드밸런싱 | ✅ 여러 Pod에 자동 분산 |
🧠 DNS로 이름 기반 통신하기
쿠버네티스는 CoreDNS를 이용해
서비스명.네임스페이스.svc.cluster.local 형태의 주소로 통신합니다.
curl http://myapp-svc
DNS는 서비스 이름만으로도 Pod 간 연결을 가능하게 해줍니다.
🛠 실습 예시: ClusterIP 통신 확인
kubectl create deployment web --image=nginx
kubectl expose deployment web --port=80 --target-port=80 --name=web-svc
kubectl run curl-pod --image=busybox --restart=Never -it -- sh
wget -qO- http://web-svc
🌉 CNI 플러그인: 네트워크의 핵심
쿠버네티스 자체는 네트워크를 직접 구현하지 않으며,
CNI (Container Network Interface) 플러그인을 통해 Pod 간 통신을 지원합니다.
| CNI 종류 | 특징 |
|---|---|
| Flannel | 간단한 구조, 학습용에 적합 |
| Calico | 고성능, 네트워크 정책 지원 |
| Cilium | BPF 기반, 보안/확장성 우수 |
| Weave | 설치 간편, 소규모에 적합 |
기본 설정 파일은
/etc/cni/net.d에 존재합니다.
📊 클러스터 외부 접근 방법
| 타입 | 설명 |
|---|---|
| NodePort | 노드 IP + 포트 (30000~32767)로 접근 가능 |
| LoadBalancer | 클라우드에서 외부 IP 자동 할당 |
| Ingress | 도메인/경로 기반 라우팅 + TLS 지원 |
Ingress는 하나의 URL로 여러 서비스를 나누어 제공할 수 있는 기능입니다.
🧩 핵심 요약 정리
| 구성 요소 | 설명 |
|---|---|
| Pod IP | Pod에 자동 부여되는 내부 IP |
| Service | 여러 Pod에 하나의 가상 IP 제공 |
| ClusterIP | 내부에서만 접근 가능한 서비스 IP |
| DNS | 서비스 이름 → IP 매핑 |
| CNI | 네트워크 구성 처리 (IP 할당 및 라우팅 등) |
| Ingress | 외부 접근을 위한 고급 라우팅 설정 |
📚 마무리
- 쿠버네티스의 네트워킹은 Pod 간 통신을 위한 자동화된 환경입니다.
- 외부 연결을 위해서는 NodePort, LoadBalancer, Ingress 등을 조합합니다.
- DNS와 CNI를 이해하면 안정적인 서비스 배포가 훨씬 쉬워집니다.
☁️ 네트워킹을 잘 이해하면 클러스터 설계와 디버깅 능력이 쑥쑥 자랍니다!
📎 참고자료:
- https://kubernetes.io/docs/concepts/services-networking/
- https://www.weave.works/
- https://cilium.io/
- 한국폴리텍대학 서울강서캠퍼스 빅데이터소프트웨어공학과 이협건 교수 강의자료