Post

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

Kubernetes 네트워크 보안과 NetworkPolicy 동작 방식, Pod 간 통신 제어 방법을 정리합니다.

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

☸️ Kubernetes Network Security

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

즉 아무 설정이 없다면

1
2
3
4
5
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 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy

metadata:
  name: allow-nginx

spec:
  podSelector:
    matchLabels:
      app: nginx

  policyTypes:
  - Ingress

  ingress:
  - from:
    - podSelector:
        matchLabels:
          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 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy

metadata:
  name: allow-dns

spec:
  podSelector: {}

  policyTypes:
  - Egress

  egress:
  - to:
    - 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 네트워크 정책 활성화
This post is licensed under CC BY 4.0 by the author.