1. NetworkPolicy
이름 그대로 Pod 내부로 들어오거나(Ingress) 외부로 나가는(Egress) 트래픽을
허용하고 거부하는 정책을 설정할 수 있는 오브젝트
2. 특징 :
- NetworkPolicy는 기본적으로 Whitelist 형식이다.
설정되는 순간 명시해놓은 목록에 있는 Pod나 Host 외에는 이 Pod에 트래픽을 보낼 수가 없다.
- NetworkPolicy는 namespace 단위 자원이다.
kubectl get networkpolicy 명령을 치면 Namespace별로 자원이 출력되고, 적용도 Namespace 내에 있는 Pod에만 된다.
- 여러 개가 존재하면 중복 적용된다.
따라서 NetworkPolicy는 항상 최소한의 Pod 혹은 Host 만 트래픽을 흘릴 수 있도록 작성해야 한다.
- Pod, Namespace, IPBlock의 3가지 타입으로 제어가 가능하다.
3. 사례
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: api-allow-5000
spec:
podSelector:
matchLabels:
app: apiserver
ingress:
- ports:
- port: 5000
from:
- podSelector:
matchLabels:
role: monitoring
아래 네트워크 정책은 app:apiserver 라는 라벨을 가지고 있는 Pod들의
ingress 네트워크 정책을 정의하는 설정파일로,
5000번 포트만을 통해서 트래픽을 받을 수 있으며,
role:monitoring이라는 라벨을 가지고 있는 Pod에서 들어오는 트래픽만 허용한다.
4. 제약사항
- 내부 클러스터 트래픽이 공통 게이트웨이를 통과하도록 강제한다
(서비스 메시나 기타 프록시와 함께 제공하는 것이 가장 좋을 수 있음).
- TLS와 관련된 모든 것
(이를 위해 서비스 메시나 인그레스 컨트롤러 사용).
- 노드별 정책
(이에 대해 CIDR 표기법을 사용할 수 있지만, 특히 쿠버네티스 ID로 노드를 대상으로 지정할 수 없음).
- 이름으로 서비스를 타겟팅한다
(그러나, 레이블로 파드나 네임스페이스를 타겟팅할 수 있으며, 이는 종종 실행할 수 있는 해결 방법임).
- 타사 공급사가 이행한 "정책 요청"의 생성 또는 관리.
- 모든 네임스페이스나 파드에 적용되는 기본 정책
(이를 수행할 수 있는 타사 공급사의 쿠버네티스 배포본 및 프로젝트가 있음).
- 고급 정책 쿼리 및 도달 가능성 도구.
- 네트워크 보안 이벤트를 기록하는 기능
(예: 차단되거나 수락된 연결).
- 명시적으로 정책을 거부하는 기능
(현재 네트워크폴리시 모델은 기본적으로 거부하며, 허용 규칙을 추가하는 기능만 있음).
- 루프백 또는 들어오는 호스트 트래픽을 방지하는 기능
(파드는 현재 로컬 호스트 접근을 차단할 수 없으며, 상주 노드의 접근을 차단할 수 있는 기능도 없음).
참고 : https://taemy-sw.tistory.com/9
https://kubernetes.io/ko/docs/concepts/services-networking/network-policies/
'IT Tech > Cloud Native' 카테고리의 다른 글
Trivy를 활용한 도커 컨테이너 취약점 진단 (0) | 2023.01.13 |
---|---|
쿠버네티스 Audit 기능 (0) | 2023.01.13 |
시큐리티 컨텍스트 (Security Context) (0) | 2023.01.13 |
Future of Linux Container (0) | 2022.12.27 |
POD (Publish On Demand) (0) | 2022.09.16 |