NetworkPolicy

NetworkPolicy는 Pod 간 네트워크 트래픽을 제어하는 방화벽 규칙과 같은 리소스입니다.

특징

클라우드 네트워크 개념과 비교

실습 예시

기본 NetworkPolicy 정의 예시

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: access-nginx
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: nginx
  ingress:
  - from:
    - podSelector:
        matchLabels:
          access: "true"
    ports:
    - protocol: TCP
      port: 80

네임스페이스 간 통신 정책 예시

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-from-frontend
  namespace: backend
spec:
  podSelector:
    matchLabels:
      app: api
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          purpose: frontend
      podSelector:
        matchLabels:
          app: web
    ports:
    - protocol: TCP
      port: 8080

이그레스(나가는) 트래픽 제한 예시

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: limit-outbound
  namespace: restricted
spec:
  podSelector:
    matchLabels:
      app: internal-app
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: database
    ports:
    - protocol: TCP
      port: 5432
  - to:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: kube-system
    ports:
    - protocol: UDP
      port: 53  # DNS 요청 허용

NetworkPolicy 관리

정책 확인

kubectl get networkpolicies
kubectl describe networkpolicy access-nginx

정책 테스트

# 임시 Pod 생성하여 연결 테스트
kubectl run test-pod --rm -it --image=alpine --labels="access=true" -- sh

구현 요구사항

NetworkPolicy는 CNI(Container Network Interface) 플러그인에 의해 구현됩니다. 모든 쿠버네티스 클러스터가 기본적으로 NetworkPolicy를 지원하는 것은 아닙니다. 다음과 같은 CNI 플러그인이 NetworkPolicy를 지원합니다:

일반적인 사용 패턴