개요
Kubernetes에서 네트워크 정책(Network Policies)은 특정 파드(Pod) 간의 통신을 제어하는 역할을 합니다. 이를 통해 클러스터 내에서 무분별한 접근을 제한하고, 보안성을 강화할 수 있습니다.
네트워크 정책(Network Policies)이란?
네트워크 정책은 Kubernetes의 리소스로, 레이블과 셀렉터(Selector)를 기반으로 파드 간의 트래픽 흐름을 제어하는 역할을 합니다. 기본적으로 Kubernetes에서는 모든 파드 간의 통신을 허용하지만, 네트워크 정책을 사용하면 특정 트래픽만 허용할 수 있습니다.
주요 개념
- 인그레스(Ingress) 및 이그레스(Egress) 규칙: 파드 내부로 들어오는 트래픽(인그레스)과 나가는 트래픽(이그레스)에 대한 제어 규칙을 정의합니다.
- 셀렉터(Selector): 특정 파드에 정책을 적용하기 위해 레이블을 활용합니다.
- 허용된 연결(Allowed Connections): 특정한 파드, 네임스페이스, IP 범위 등을 대상으로 허용할 트래픽을 지정합니다.
- 네트워크 플러그인 지원: Calico, Cilium, Weave와 같은 CNI(Container Network Interface)를 지원하는 환경에서 네트워크 정책이 동작합니다.
네트워크 정책 예제
다음은 특정 애플리케이션 파드가 데이터베이스 파드에만 접근할 수 있도록 설정하는 네트워크 정책입니다.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-app-to-db
namespace: default
spec:
podSelector:
matchLabels:
role: database
ingress:
- from:
- podSelector:
matchLabels:
role: app
ports:
- protocol: TCP
port: 5432
설명
role: database
레이블을 가진 파드에 적용됩니다.role: app
레이블을 가진 파드만 데이터베이스 파드에 접근할 수 있도록 허용합니다.- 포트
5432
(PostgreSQL 기본 포트)만 허용됩니다.
네트워크 정책 모범 사례
- 최소 권한 원칙(Principle of Least Privilege): 반드시 필요한 트래픽만 허용합니다.
- 네임스페이스를 활용한 격리(Isolation): 네임스페이스 간 통신을 제한하는 정책을 설정합니다.
- 배포 전에 정책 테스트:
kubectl exec
또는netshoot
등을 활용하여 접근 가능 여부를 확인합니다. - 네트워크 트래픽 모니터링:
Cilium Hubble
같은 도구를 사용해 네트워크 정책의 영향을 시각적으로 분석합니다.
결론
네트워크 정책은 Kubernetes에서 보안성을 향상시키고, 불필요한 트래픽을 차단하여 클러스터를 보호하는 중요한 역할을 합니다. 적절한 정책을 수립하면 보안성을 높이고, 시스템의 안정성을 확보할 수 있습니다.
Kubernetes 환경에서 네트워크 정책을 효과적으로 활용하여 보안 수준을 한층 높여보세요!