[CKS] 25. Network Policy

쿠버네티스 네트워크 정책으로 파드 간 통신 규칙을 설정하여 보안을 강화합니다. 불필요한 접근을 차단하고 중요 서비스만 선택적으로 노출하세요.

[CKS] 25. Network Policy
Photo by Nastya Dulhiier / Unsplash

개요

Kubernetes 네트워크 트래픽 관리 및 보안의 기본 사항을 확인합니다.

Network Traffic

Web 서버, Web Application 서버와 Database 서버간 트래픽의 흐름은 기본적으로 Egress, Ingress를 강조합니다.

  • 유입: 들어오는 트래픽(예: 웹 서버에 대한 사용자 요청).
  • 유출: 나가는 트래픽(예: 웹 서버가 API 서버를 호출하는 것).

Network Security

클러스터에서 노드는 각각 IP 주소가 할당된 파드와 서비스를 호스팅합니다.

네트워킹의 핵심 전제 조건 중 하나는 사용자가 직접 지정하는 경로가 아닌 모든 파드간 서로 통신할 수 있어야한다는 것 입니다. 일반적인 클러스터 환경에서는 모든 파드는 여러 노드에 걸쳐 있는 공유 가상 사설망에 상주하며 클러스터 내부의 IP 주소, 파드 이름 또는 관련 서비스를 통해 파드 간의 무제한 통신을 허용합니다.

Network Policy

이러한 Kubernetes의 특징으로 파드 간의 무제한 통신을 허용하다보니 Web 서버에서 데이터베이스로 직접 엑세스하는 상황이 발생할 수 있습니다. 이러한 경우 네트워크 정책을 구현하여 트래픽을 제한하고 필수적인 트래픽만 허용할 수 있어야합니다.

쿠버네티스의 네트워크 정책은 파드 간 통신 방식을 정의하는 객체입니다. 파드를 서비스 또는 복제본 세트에 연결하는 것처럼 파드에 레이블과 선택기를 추가하여 특정 규칙을 만들 수 있습니다.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-policy
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          name: api-pod
    ports:
    - protocol: TCP
      port: 3306
  • role: db Label이 붙은 파드만 적용
  • policyTypes 유형의 트래픽만 허용
  • api-pod Label을 가진 Pod만 3306 Ingress 트래픽을 허용
  • Egress에 대한 정책은 없지만 기본 옵션으로 모든 트래픽을 허용하니 Block 되지 않습니다.

네트워크 정책은 해당 정책을 지원하는 네트워크 솔루션에서만 적용됩니다. Kube-router, Calico, Romana, Weave Net과 같은 네트워크 솔루션은 네트워크 정책을 지원하지만 Flannel은 지원하지 않습니다.