Kubernetes/Udemy - CKAD with Tests

Network Policy

비번변경 2021. 8. 18. 19:51

Ingress

서버 입장에서, 들어오는 트래픽

 

Egress

서버 입장에서, 보내는 트래픽

ingress, egress
출처 : https://openvpn.net/for/ingress-egress/

트래픽이 발생한 방향을 따져서 ingress와 egress를 정의하며, ingress와 egress를 정의하기 위해서는 트래픽 규칙이 필요하다.

 

All allow

모든 포드에서 다른 포르 또는 서비스로 트래픽을 허용하는 규칙

쿠버네티스가 기본적으로 구성하는 규칙으로, 쿠버네티스는 어떤 솔루션을 구현하든 추가 설정 없이 포드 간에 통신이 가능해야 함을 전제한다.

 

Network Policy

쿠버네티스의 개체 중 하나로, 하나 이상의 포드에 연결하여 policy 내에 트래픽 규칙을 정의할 수 있다.

Network Policy를 생성하여 포드에 적용하면, 적용된 포드에서는 규칙에 해당하는 트래픽만 혀용하고 다른 트래픽은 차단한다.

웹 서버가 동작하는 포드에서 DB가 동작하는 포드로의 직접 통신을 제한하는 등, 네트워크 보안을 구현해야할 때 사용한다.

레이블과 셀렉터를 이용하여 포드에 적용한다.

 

생성 방법

yaml 형식의 정의 파일을 작성하여 생성할 수 있다.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-policy
spec: 
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress # Egress | Both
  ingress:
  - from:
    - podSelector:
        matchLabels:
          name: api-pod
    ports:
    - protocol: TCP
      port: 3306
  • spec.podSelector : 정책이 적용되는 Pod 그룹 선택. 빈 값인 경우 네임스페이스의 모든 Pod를 선택한다.

 

 

Network Policy는 쿠버네티스 클러스터에 구현된 네트워크 솔루션에 의해 동작하며, 모든 네트워크 솔루션의 Network Policy를 지원하는 것은 아니다. 지원 여부는 네트워크 솔루션의 공식 문서를 확인해야 한다.

  • 지원 O : kube-router, Calico, Romana, Weave-net
  • 지원 X : Flannel

Network Policy를 지원하지 않는 솔루션으로 구성된 쿠버네티스 클러스터에서도 정책을 생성할 수는 있으나 적용되어 동작하지는 않는다. 지원하지 않는다는 오류 메세지도 표시되지 않으니 주의한다.