[Kubernetes] Network Security 완벽 정리 (NetworkPolicy, Pod Network)

☸️ Kubernetes Network Security #

Kubernetes 클러스터에서는 기본적으로 모든 Pod가 서로 통신할 수 있습니다.

즉 아무 설정이 없다면

Pod ↔ Pod
Pod ↔ Service
Pod ↔ Node

모든 네트워크가 허용됩니다.

하지만 실제 운영 환경에서는 보안 문제가 발생할 수 있습니다.

  • 내부 서비스 접근 제한 필요
  • 특정 Namespace 통신 차단
  • 데이터베이스 접근 제한

이 문제를 해결하기 위해 NetworkPolicy를 사용합니다.


Kubernetes 네트워크 구조 #

Kubernetes는 기본적으로 Flat Network 구조를 사용합니다.

graph TD

A[Pod A]

B[Pod B]

C[Pod C]

D[Service]

A --> B
A --> C
B --> C
C --> D

특징

  • Pod 간 직접 통신 가능
  • NAT 없이 IP 통신
  • 모든 Pod가 서로 접근 가능

NetworkPolicy란? #

NetworkPolicy는 Pod 간 네트워크 통신을 제어하는 정책입니다.

주요 기능

  • 특정 Pod만 접근 허용
  • 특정 Namespace 허용
  • 특정 Port 허용
  • Ingress / Egress 제어

NetworkPolicy 구조 #

graph TD

A[Pod]

B[NetworkPolicy]

C[Allowed Pod]

D[Blocked Pod]

C --> A
D -. blocked .-> A
A --> B

Ingress Policy #

Ingress Policy는 Pod로 들어오는 트래픽을 제어합니다.

graph TD

A[Client Pod]

B[Target Pod]

C[NetworkPolicy]

A --> C
C --> B

Ingress Policy 예시 #

 1apiVersion: networking.k8s.io/v1
 2kind: NetworkPolicy
 3
 4metadata:
 5  name: allow-nginx
 6
 7spec:
 8  podSelector:
 9    matchLabels:
10      app: nginx
11
12  policyTypes:
13  - Ingress
14
15  ingress:
16  - from:
17    - podSelector:
18        matchLabels:
19          app: frontend

설명

  • nginx Pod로 들어오는 트래픽 허용
  • frontend Pod만 접근 가능

Egress Policy #

Egress Policy는 Pod에서 나가는 트래픽을 제어합니다.

graph TD

A[Pod]

B[NetworkPolicy]

C[External Service]

A --> B --> C

Egress Policy 예시 #

 1apiVersion: networking.k8s.io/v1
 2kind: NetworkPolicy
 3
 4metadata:
 5  name: allow-dns
 6
 7spec:
 8  podSelector: {}
 9
10  policyTypes:
11  - Egress
12
13  egress:
14  - to:
15    - namespaceSelector: {}

Namespace 기반 접근 제어 #

NetworkPolicy는 Namespace 단위 제어도 가능합니다.

graph TD

A[Namespace A]

B[Namespace B]

C[Namespace C]

A --> B
C -. blocked .-> B

  • frontend → backend 허용
  • 외부 namespace 차단

Label 기반 접근 제어 #

Kubernetes는 Label 기반 정책을 사용합니다.

graph TD

A[Pod frontend]

B[Pod backend]

C[Pod database]

A --> B
B --> C
A -. blocked .-> C

  • frontend → backend 허용
  • database 직접 접근 차단

NetworkPolicy 적용 전후 #

정책 없음 #

graph TD

A[Pod A]

B[Pod B]

C[Pod C]

A --> B
A --> C
B --> C

정책 적용 #

graph TD

A[Frontend]

B[Backend]

C[Database]

A --> B
B --> C
A -. blocked .-> C

CNI 플러그인 #

NetworkPolicy는 CNI 플러그인이 지원해야 동작합니다.

대표적인 CNI

CNI특징
Calico가장 널리 사용
CiliumeBPF 기반
Weave간단한 설정
Flannel기본 네트워크

NetworkPolicy 아키텍처 #

graph TD

A[Pod]

B[CNI Plugin]

C[NetworkPolicy]

D[Allowed Traffic]

E[Blocked Traffic]

A --> B
C --> B
B --> D
B -.-> E

실무 보안 설계 예시 #

일반적인 서비스 구조

graph TD

A[Internet]

B[Ingress]

C[Frontend]

D[Backend]

E[Database]

A --> B
B --> C
C --> D
D --> E

C -. blocked .-> E

보안 원칙

  • Frontend → Backend만 허용
  • Backend → DB만 허용
  • Frontend → DB 차단

정리 #

Kubernetes Network Security 핵심

기본 네트워크 #

  • 모든 Pod 간 통신 가능

NetworkPolicy #

  • Pod 통신 제어
  • Ingress / Egress 지원
  • Label 기반 정책

지원 조건 #

  • CNI 플러그인 필요
  • Kubernetes 네트워크 정책 활성화
Advertisement