Networking

Kubernetes Networking (네트워킹)


1️⃣ 쿠버네티스 네트워킹 개요


🔹 쿠버네티스 네트워킹의 특징

쿠버네티스 네트워크 모델은 기존 VM 네트워크와 다르게 설계되었어.

  1. 모든 Pod은 고유한 IP를 가진다.
  2. Pod 간 NAT 없이 직접 통신 가능하다.
  3. 각 노드는 클러스터 네트워크를 공유한다.

🔽 쿠버네티스 네트워크 개요
쿠버네티스 네트워크 개요
(출처: Kubernetes 공식 문서)


2️⃣ Pod 네트워킹


🔹 Pod 간 통신

  • 쿠버네티스의 기본 네트워크 모델은 Pod 간 직접 통신을 허용
  • 동일한 노드뿐만 아니라 다른 노드의 Pod과도 NAT 없이 통신 가능

🔽 Pod 네트워크 개요 (CNI 플러그인 활용)
Pod 네트워크 개요
(출처: 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 구조

🔹 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 구조

🔹 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 간 통신, 서비스 디스커버리, 외부 트래픽 관리, 보안 정책 적용까지 매우 중요한 요소.

RSS Feed