Network Policy (2)

Yu Sang Min·2025년 6월 21일

CKA

목록 보기
61/110
post-thumbnail

🔐 고급 Kubernetes NetworkPolicy 실전 가이드

🎯 목표: DB Pod를 보호하고, 오직 prod 네임스페이스의 API Pod만이 3306 포트로 접근 가능하도록 설정


✅ 1. 요구사항 명확화

대상허용 트래픽설명
Web PodX접근 차단
API Pod✅ Ingress to DB: 3306prod 네임스페이스에 한정
DB Pod🔒 보호 대상모든 트래픽 차단 후, 특정 트래픽만 허용

🛠️ 2. 기본 정책 정의 흐름

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-policy
spec:
  podSelector:
    matchLabels:
      role: db  # DB Pod 식별
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              role: api
          namespaceSelector:
            matchLabels:
              env: prod
      ports:
        - protocol: TCP
          port: 3306

📌 해설:

  • podSelector: DB Pod에만 정책 적용
  • policyTypes: Ingress만 설정해 "들어오는 트래픽"만 제어
  • from: role=api인 Pod이면서 env=prod인 네임스페이스만 허용
  • ports: 3306 포트 (MySQL)

🔄 3. 세 가지 인그레스 소스 선택자

선택자 종류설명
podSelector특정 Pod (Label 기준)
namespaceSelector특정 Namespace (Label 기준)
ipBlock외부 서버 (IP or CIDR 범위)

from (Ingress) 또는 to (Egress)에 사용 가능


⚙️ 4. 선택자 조합 방식

  • AND 조합:

    from:
      - podSelector:
          matchLabels: { role: api }
        namespaceSelector:
          matchLabels: { env: prod }

    env=prod 네임스페이스 내 role=api Pod만 허용

  • OR 조합 (별개의 요소로 나열):

    from:
      - podSelector: ...
      - namespaceSelector: ...
      - ipBlock: ...

    ⇒ 조건 중 하나만 충족해도 허용


🌐 5. 외부 서버 허용 (ipBlock)

from:
  - ipBlock:
      cidr: 192.168.5.10/32

✅ 외부 백업 서버 등 클러스터 외부에서 들어오는 트래픽 허용


📤 6. Egress 정책 (예: DB → 백업 서버로 백업 푸시)

policyTypes:
  - Ingress
  - Egress
egress:
  - to:
      - ipBlock:
          cidr: 192.168.5.10/32
    ports:
      - protocol: TCP
        port: 80

✅ DB Pod가 외부 백업 서버로 port 80에 접속 가능하도록 허용


⚠️ 주의 포인트

항목설명
Ingress만 설정 시수신 트래픽만 제어, 발신(Egress)은 전부 허용됨
Egress 필요 시반드시 policyTypes에 명시해야 적용됨
namespaceSelector 사용 시네임스페이스에 반드시 라벨이 있어야 함
Flannel 사용 시네트워크 정책이 작동하지 않음
규칙이 많아질수록조합 방식에 따라 보안 허점 생길 수 있음 (주의)

✅ 요약

개념설명
NetworkPolicyPod 간 통신 제어 객체
policyTypesIngress, Egress 명시 필요
트래픽 방향 기준항상 "정방향" 기준 (요청 쪽을 기준으로)
from / topodSelector, namespaceSelector, ipBlock 사용 가능
AND / OR 구분단일 항목 내부는 AND, 목록은 OR

💡 실전 팁

  • kubectl label ns prod env=prod 같이 네임스페이스 라벨 추가 필요
  • 정책 적용 전후 네트워크 통신 테스트로 검증할 것 (e.g. curl, nc, telnet)
  • Calico, Cilium과 같은 네트워크 플러그인에서 정책이 정상 작동
profile
React, Node.js, AWS, Git, Github, Github Action, Docker, K8S

0개의 댓글