Networking
Kubernetes Networking (네트워킹)
1️⃣ 쿠버네티스 네트워킹 개요
🔹 쿠버네티스 네트워킹의 특징
쿠버네티스 네트워크 모델은 기존 VM 네트워크와 다르게 설계되었어.
- 모든 Pod은 고유한 IP를 가진다.
- Pod 간 NAT 없이 직접 통신 가능하다.
- 각 노드는 클러스터 네트워크를 공유한다.
🔽 쿠버네티스 네트워크 개요
(출처: Kubernetes 공식 문서)
2️⃣ Pod 네트워킹
🔹 Pod 간 통신
- 쿠버네티스의 기본 네트워크 모델은 Pod 간 직접 통신을 허용
- 동일한 노드뿐만 아니라 다른 노드의 Pod과도 NAT 없이 통신 가능
🔽 Pod 네트워크 개요 (CNI 플러그인 활용)
(출처: Kubernetes 공식 문서)
🔹 네트워크 플러그인 (CNI: Container Network Interface)
Pod 간 네트워킹을 구현하는 방법에는 다양한 CNI 플러그인이 있어.
- Flannel: 가장 간단한 네트워크 오버레이
- Calico: 네트워크 정책 및 BGP 지원
- Cilium: eBPF 기반 고성능 네트워크
- Weave: 자동 멀티캐스트 지원
🔽 CNI 구성 예시
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: allow-app
spec:
podSelector:
matchLabels:
app: my-app
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: web
✅ 특정 Pod(app=my-app)으로 web Pod만 접근 가능하도록 제한
3️⃣ Service (서비스)
🔹 Service란?
쿠버네티스에서 Pod은 동적으로 생성되고 사라지기 때문에, 항상 같은 IP를 가지지 않아.
서비스(Service)는 Pod의 변경에도 불구하고 일정한 엔드포인트(IP)를 제공하여, 안정적인 네트워크 통신이 가능하도록 해줘.
🔽 Service 데이터 흐름
클라이언트 요청
↓
Service (고정된 엔드포인트)
↓
Pod으로 트래픽 전달
🔹 Service 유형
- ClusterIP (기본값) → 내부 통신용 가상 IP
- NodePort → 노드의 포트를 통해 외부에서 접근 가능
- LoadBalancer → 클라우드 환경에서 외부 LB 사용
- ExternalName → 외부 도메인으로 매핑
🔽 Service 아키텍처
🔹 Service 예제
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
✅ kubectl apply -f service.yaml
4️⃣ Ingress (인그레스)
🔹 Ingress란?
- 외부에서 쿠버네티스 내부로 HTTP(S) 요청을 라우팅
- 도메인 기반 트래픽 제어
- SSL/TLS 종단 처리 가능
🔽 Ingress 아키텍처
🔹 Ingress 예제
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
✅ kubectl apply -f ingress.yaml
✅ myapp.example.com
으로 접속 시 내부 my-service
로 연결됨
5️⃣ Network Policy (네트워크 정책)
🔹 Network Policy란?
기본적으로 쿠버네티스 네트워크는 모든 Pod 간 통신을 허용하지만,
보안 강화를 위해 특정 Pod만 접근하도록 설정할 수도 있어.
이를 Network Policy를 통해 관리할 수 있어.
🔽 네트워크 정책 예제 (특정 Pod만 허용)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {} # 모든 Pod 대상
policyTypes:
- Ingress
✅ 모든 인바운드 트래픽 차단
✅ kubectl apply -f network-policy.yaml
✅ 결론
쿠버네티스 네트워킹은 Pod 간 통신, 서비스 디스커버리, 외부 트래픽 관리, 보안 정책 적용까지 매우 중요한 요소.