8.4 네트워크 폴리시 (Network Policy): 파드 간 통신 제어

지금까지 우리는 쿠버네티스에서 파드들이 서로 어떻게 통신하고(파드 IP, 서비스), 외부에서 어떻게 클러스터 내부의 서비스에 접근하는지(서비스 타입, 인그레스)에 대해 살펴보았습니다. 쿠버네티스는 기본적으로 클러스터 내의 모든 파드가 서로 자유롭게 통신할 수 있도록 하는 개방적인(open) 네트워크 모델을 가지고 있습니다. 이는 개발 초기 단계나 신뢰할 수 있는 내부 네트워크 환경에서는 편리할 수 있지만, 보안이 중요한 프로덕션 환경이나 멀티테넌트(multi-tenant) 환경에서는 심각한 보안 취약점이 될 수 있습니다. 마치 모든 집의 문이 항상 열려 있어서 누구나 자유롭게 드나들 수 있는 마을과 같습니다. 편리할 수는 있지만 안전하지는 않겠죠.

애플리케이션의 보안을 강화하고, “최소 권한의 원칙(principle of least privilege)”을 네트워크 레벨에서 구현하기 위해서는, 파드 간의 통신 흐름을 세밀하게 제어할 필요가 있습니다. 즉, 특정 파드는 오직 허용된 다른 파드나 서비스하고만 통신할 수 있도록 하고, 그 외의 모든 불필요한 통신은 차단해야 합니다. 바로 이러한 요구사항을 충족시키기 위해 쿠버네티스가 제공하는 기능이 네트워크 폴리시(Network Policy)입니다.

네트워크 폴리시는 마치 파드들 사이에 방화벽 규칙을 설정하는 것과 유사하게, 어떤 파드가 어떤 다른 파드(또는 IP 주소 범위)와 어떤 포트를 통해 통신할 수 있는지(또는 없는지)를 선언적으로 정의하는 쿠버네티스 리소스입니다. 이를 통해 우리는 마이크로서비스 환경에서 각 서비스 간의 통신 경로를 명확히 하고, 잠재적인 공격 표면을 줄이며, 보안 사고 발생 시 피해 범위를 최소화할 수 있습니다.

이번 8.4장에서는 쿠버네티스 클러스터의 네트워크 보안을 한층 강화해주는 네트워크 폴리시에 대해 자세히 알아볼 것입니다.

  • 먼저 8.4.1 네트워크 폴리시의 필요성 (기본: 모든 파드 간 통신 허용)에서는 왜 쿠버네티스의 기본 개방형 네트워크 모델만으로는 부족하며, 어떤 상황에서 네트워크 폴리시를 통한 통신 제어가 반드시 필요한지 그 배경과 중요성을 살펴볼 것입니다. 제로 트러스트(Zero Trust) 네트워크 보안 모델과 관련하여 네트워크 폴리시가 어떤 역할을 하는지에 대해서도 이해하게 될 것입니다.
  • 다음으로 8.4.2 네트워크 폴리시 동작 원리 (CNI 플러그인 지원 필요)에서는 네트워크 폴리시 리소스에 정의된 규칙들이 실제로 어떻게 적용되어 파드 간 통신을 차단하거나 허용하는지 그 내부 메커니즘을 알아볼 것입니다. 특히, 모든 CNI(Container Network Interface) 플러그인이 네트워크 폴리시를 지원하는 것은 아니며, Calico, Cilium, Weave Net과 같이 네트워크 폴리시 기능을 지원하는 CNI 플러그인이 클러스터에 반드시 설치되어 있어야 한다는 중요한 전제 조건을 강조할 것입니다. K3s나 Rancher Desktop과 같은 환경에서 사용되는 기본 CNI(예: Flannel)가 네트워크 폴리시를 지원하는지, 만약 지원하지 않는다면 어떻게 다른 CNI로 교체하거나 추가 기능을 활성화할 수 있는지도 간략히 언급할 것입니다.
  • 이어서 8.4.3 폴리시 타입 (Policy Types): Ingress, Egress에서는 네트워크 폴리시가 어떤 방향의 트래픽을 제어할 수 있는지를 정의하는 policyTypes 필드에 대해 설명합니다. 파드로 들어오는 트래픽(인바운드)을 제어하는 Ingress 타입과, 파드에서 나가는 트래픽(아웃바운드)을 제어하는 Egress 타입이 있으며, 이들을 어떻게 조합하여 원하는 통제 수준을 달성할 수 있는지 알아볼 것입니다.
  • 그리고 8.4.4 규칙 정의 (Ingress/Egress Rules)에서는 실제 네트워크 폴리시 YAML 파일에서 어떻게 구체적인 허용/차단 규칙을 정의하는지 그 명세 구조를 자세히 살펴볼 것입니다. 특정 레이블을 가진 파드들만 선택하는 podSelector, 특정 네임스페이스 전체를 대상으로 하는 namespaceSelector, 그리고 특정 IP 주소 범위(CIDR)를 지정하는 ipBlock을 활용하여 트래픽의 출발지(Egress 규칙의 경우 목적지)를 어떻게 지정하는지, 그리고 특정 프로토콜과 포트 번호를 어떻게 명시하는지 등을 배우게 됩니다.
  • 마지막으로 8.4.5 [실습] 특정 네임스페이스/파드 간의 통신 제한 설정에서는 직접 네트워크 폴리시를 생성하여 파드 간 통신을 제어하는 과정을 경험해 볼 것입니다. 먼저 기본적으로 모든 트래픽을 차단하는 “기본 Deny” 정책을 설정한 후, 특정 레이블을 가진 파드에서만 다른 특정 파드로의 접근을 선택적으로 허용하는 정책을 추가로 생성할 것입니다. 그리고 실제로 통신 테스트를 통해 정의한 네트워크 폴리시가 올바르게 적용되어 의도한 대로 통신이 차단되거나 허용되는지를 눈으로 직접 확인할 것입니다. 이 실습을 통해 네트워크 폴리시의 강력함과 유연성을 체감하고, 실제 운영 환경에서 보안 정책을 수립하는 데 필요한 기초를 다질 수 있을 겁니다.

네트워크 폴리시는 쿠버네티스 클러스터의 보안을 위한 매우 중요한 도구이지만, 잘못 설정하면 정상적인 서비스 통신까지 차단할 수 있으므로 신중한 계획과 테스트가 필요합니다. 이 장을 통해 네트워크 폴리시의 개념과 사용법을 정확히 익히신다면, 더욱 안전하고 신뢰할 수 있는 클라우드 네이티브 애플리케이션 환경을 구축하는 데 큰 도움이 될 것입니다.