Part 5: Network Policy

지원 버전: Calico v3.29+ / Kubernetes 1.28+ 마지막 업데이트: 2026년 2월 23일

개요

Network Policy는 Calico의 두 번째 핵심 차별화 요소입니다. Calico는 Kubernetes 표준 NetworkPolicy를 완벽히 지원하면서, 더 강력한 확장 기능을 제공합니다. 이 문서에서는 Kubernetes 표준 정책의 한계를 이해하고, Calico가 제공하는 고급 정책 기능을 심층적으로 다룹니다.

spinner

Kubernetes NetworkPolicy 기본

표준 NetworkPolicy 구조

Kubernetes NetworkPolicy는 Pod 간 트래픽을 제어하는 기본 메커니즘입니다.

# 기본 Kubernetes NetworkPolicy 예시
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
  namespace: production
spec:
  # 정책이 적용될 Pod 선택
  podSelector:
    matchLabels:
      app: backend
      tier: api

  # 정책 유형 (Ingress, Egress, 또는 둘 다)
  policyTypes:
    - Ingress
    - Egress

  # Ingress 규칙 (들어오는 트래픽)
  ingress:
    # 규칙 1: frontend에서 8080 포트로 접근 허용
    - from:
        - podSelector:
            matchLabels:
              app: frontend
        - namespaceSelector:
            matchLabels:
              env: production
      ports:
        - protocol: TCP
          port: 8080

    # 규칙 2: monitoring 네임스페이스에서 메트릭 수집 허용
    - from:
        - namespaceSelector:
            matchLabels:
              name: monitoring
      ports:
        - protocol: TCP
          port: 9090

  # Egress 규칙 (나가는 트래픽)
  egress:
    # DNS 허용
    - to:
        - namespaceSelector: {}
          podSelector:
            matchLabels:
              k8s-app: kube-dns
      ports:
        - protocol: UDP
          port: 53

    # 데이터베이스 접근 허용
    - to:
        - podSelector:
            matchLabels:
              app: database
      ports:
        - protocol: TCP
          port: 5432

Kubernetes NetworkPolicy의 한계

한계
설명
Calico 해결책

명시적 Deny 없음

Allow 규칙만 가능, Deny 규칙 불가

action: Deny 지원

L7 정책 없음

HTTP 메서드, 경로 기반 필터링 불가

HTTP/gRPC 프로토콜 인식

클러스터 전역 정책 없음

네임스페이스 범위로 제한

GlobalNetworkPolicy

FQDN 기반 정책 없음

IP 주소만 사용 가능

domains 필드 지원

정책 순서 없음

순서 지정 불가

order 필드로 우선순위

로깅 없음

정책 매치 로깅 불가

action: Log 지원

ICMP 제어 제한

ICMP 유형별 제어 불가

ICMP 유형/코드 지정

호스트 엔드포인트 보호 없음

노드 자체 보호 불가

HostEndpoint 지원

Calico NetworkPolicy

기본 구조

Calico NetworkPolicy는 Kubernetes NetworkPolicy를 확장합니다.

셀렉터 문법

Calico는 강력한 표현식 기반 셀렉터를 제공합니다.

Action 유형

Calico는 네 가지 액션을 지원합니다.

프로토콜 및 포트 지정

Source/Destination 지정

GlobalNetworkPolicy

GlobalNetworkPolicy는 클러스터 전체에 적용되는 정책입니다.

Default Deny 정책

DNS 허용 정책

외부 Egress 차단

Kubernetes API 서버 접근 제어

NetworkSet / GlobalNetworkSet

NetworkSet은 IP 주소 집합을 정의하여 정책에서 재사용합니다.

NetworkSet (네임스페이스 범위)

GlobalNetworkSet (클러스터 전역)

Tier 기반 정책

Calico Network Policy Tier 평가 흐름

Tier는 정책을 계층화하여 관리합니다. 보안팀, 플랫폼팀, 애플리케이션팀이 각자의 영역에서 정책을 관리할 수 있습니다.

Tier 정의

Tier 평가 흐름

spinner

Tier 정책 예시

Tier + RBAC 통합

각 팀에게 자신의 Tier에서만 정책을 관리할 수 있는 권한을 부여합니다.

FQDN 기반 Egress 정책

도메인 이름을 기반으로 Egress 트래픽을 제어합니다.

FQDN 정책 동작 원리:

  1. DNS 쿼리 모니터링: Calico가 DNS 응답을 모니터링

  2. IP 매핑 유지: 도메인과 IP 매핑을 동적으로 관리

  3. 정책 적용: 해당 IP로의 트래픽에 정책 적용

L7 (HTTP) 정책

Calico Enterprise 또는 Envoy 프록시 통합 시 L7 정책을 사용할 수 있습니다.

HostEndpoint 보호

HostEndpoint는 노드 자체의 네트워크 인터페이스를 보호합니다.

HostEndpoint 정의

HostEndpoint 정책

DoNotTrack / PreDNAT 정책

DoNotTrack 정책

연결 추적을 우회하는 고성능 정책입니다.

DoNotTrack 사용 사례:

  • 고성능 DNS 서버

  • 대량 UDP 트래픽 처리

  • 상태 비저장 서비스

PreDNAT 정책

DNAT 변환 전에 원본 목적지 IP를 기준으로 정책을 적용합니다.

정책 디버깅

calicoctl을 통한 정책 확인

정책 추적

iptables 규칙 확인 (iptables 모드)

Felix 로그 분석

일반적인 정책 패턴

1. 마이크로서비스 패턴

2. 멀티 테넌트 격리

3. Zero Trust with Default Deny

4. Egress 제어 (특정 외부 서비스만 허용)

5. 공유 서비스 허용 (네임스페이스 격리 + 공유 서비스)

정책 성능 최적화

정책 수와 성능

정책 수
Felix 처리 시간
권장 사항

< 100

빠름

문제 없음

100-500

보통

모니터링 권장

500-1000

느림

최적화 필요

> 1000

매우 느림

정책 통합 필수

최적화 전략


참고 자료

이전: Part 4 - BGP 아키텍처 심화 | 다음: Part 6 - eBPF 데이터플레인 | 메인 페이지로 돌아가기

마지막 업데이트