NetworkPolicy 리소스를 제공하며, 이를 통해 어떤 트래픽이 controller manager 파드에 도달할 수 있는지 제한합니다. 여기서 말하는 대상은 ClickHouse 서버나 Keeper 파드가 아니라 연산자 프로세스 자체입니다. 이 기능은 기본적으로 비활성화되어 있으므로, 연산자의 인그레스를 격리하려는 경우에만 활성화하면 됩니다.
이 정책은 연산자가 다른 클라이언트에 노출하는 두 개의 포트, 즉 메트릭 엔드포인트와 admission webhook을 대상으로 합니다.
NetworkPolicy는 클러스터의 CNI plugin이 이를 구현하는 경우에만 적용됩니다
(예: Calico 또는 Cilium). NetworkPolicy 적용을 지원하지 않는 CNI에서는 해당
리소스가 생성되더라도 아무런 효과가 없으며, Kubernetes는 오류를 반환하지
않습니다. 따라서 이를 사용하기 전에 사용 중인 CNI가 정책을 실제로 적용하는지 확인하십시오.Helm 차트가 생성하는 항목
두 정책 모두
policyTypes: [Ingress]만 선언합니다. 따라서 연산자의 egress는 제한하지
않으며, ClickHouse 서버 또는 Keeper 파드에는 적용되지 않습니다.
기본 거부 동작
NetworkPolicy로 파드를 선택하면 해당 파드는 인그레스 기본 거부
상태로 전환됩니다. 즉, 둘 중 하나의 정책이라도 적용되면 명시적으로 허용되지 않은
controller manager 파드로 들어오는 모든 인바운드 트래픽은 차단됩니다. 활성화 후
연산자에 도달할 수 있는 인그레스는 다음뿐입니다.
metrics: enabled로 레이블된 네임스페이스에서의 메트릭 스크레이프webhook: enabled로 레이블된 네임스페이스에서의 admission webhook 호출
정책 활성화
allow-webhook-traffic에는 추가로 webhook.enabled: true(기본값)가 필요하므로,
웹훅을 비활성화하면 해당 정책도 함께 제거됩니다.
raw kubectl 매니페스트를 사용하는 경우,
kubectl 설치 가이드에 설명된 대로 [NETWORK POLICY] 섹션의 주석 처리를 해제하십시오.
raw 매니페스트에는 동일한 두 개의 정책이 포함되어 있습니다.
클라이언트 네임스페이스에 레이블 지정
namespaceSelector를 기준으로 소스를 매칭하므로, 연산자에 연결해야 하는 모든 네임스페이스에는 일치하는 레이블이 있어야 합니다. 레이블이 없는 네임스페이스에서 발생한 스크레이프 또는 웹훅 호출은 차단됩니다.
확인하기
- Prometheus가 계속해서 메트릭 엔드포인트를 스크레이프하는지 확인하십시오(해당 네임스페이스에
metrics: enabled레이블이 지정되어 있고 metrics-reader 클러스터 역할에 바인딩되어 있어야 합니다). ClickHouseCluster를 생성하거나 업데이트할 때도 계속 admission을 통과하는지 확인하십시오(웹훅에 연결할 수 있어야 합니다).
- 연산자 모니터링 — 메트릭 엔드포인트, 해당 RBAC, 그리고 스크레이프를 안전하게 보호하는 방법입니다.
- kubectl로 설치 — 네트워크 policy 섹션의 주석을 해제해야 하는 위치입니다.
- Helm으로 설치 — 연산자와 관련된 chart values입니다.