본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Pre-DNAT 정책

원문 보기 위키 갱신

host 엔드포인트 정책에 preDNAT를 표시하는 방법을 다뤄요. DNAT가 목적지 주소를 재작성하기 전에 규칙을 적용하는 정책이에요. Kubernetes NodePort를 클러스터 외부에서 보호할 때 특히 유용한 개념이에요. pre-DNAT 정책이 일반 host 엔드포인트 정책과 어떻게 다른지도 함께 정리했어요.

출처: 문서

본문

host 엔드포인트 정책은 preDNAT로 표시할 수 있어요. 이는 그 정책의 규칙이 어떤 DNAT(Destination Network Address Translation)보다 먼저 적용되어야 한다는 뜻이에요. 패킷의 원래 목적지 IP 주소와 포트 기준으로 Calico 정책을 지정하는 편이, DNAT가 적용된 뒤의 목적지 IP 주소와 포트 기준으로 지정하는 것보다 편리할 때 유용해요.

한 가지 예는 클러스터 외부에서 Kubernetes NodePort로의 접근을 보호하는 거예요. 외부 트래픽은 알려진 NodePort의 모든 노드 IP 주소로 향하고, Kubernetes(kube-proxy)는 그 트래픽을 해당 서비스를 제공하는 파드의 IP 주소와 그 파드의 관련 포트 번호(보통 NodePort와 다름)로 DNAT해요.

NodePort는 서비스에 연결하는 외부에 광고된 방법이고(NodePort는 서비스를 유일하게 식별하지만, 내부 포트 번호는 그렇지 못할 수 있어요), 특정 Service를 노출하거나 보호하는 Calico 정책을 대응 NodePort 기준으로 표현하는 게 자연스러워요. 하지만 DNAT가 NodePort를 다른 값으로 바꾸기 전에 Calico 정책이 적용되어야만 가능해요. 그래서 이런 종류의 정책에는 preDNAT를 true로 설정해야 해요.

DNAT보다 먼저 적용된다는 점 외에도, pre-DNAT 정책의 강제 방식은 세 가지 핵심 세부 사항에서 일반 host 엔드포인트 정책과 달라요. 클러스터 외부에서 들어오는 트래픽을 위한 정책이라는 설계 의도가 반영된 거예요:

  • pre-DNAT 정책은 ingress 규칙만 가질 수 있고 egress 규칙은 가질 수 없어요. (ingress 규칙이 들어오는 트래픽을 허용하면, 표준 연결 추적(connection tracking)만으로 되돌아가는 경로의 트래픽을 허용할 수 있어요.)

  • pre-DNAT 정책은 host 엔드포인트를 통해 도착하는 모든 트래픽에 대해, 그 트래픽이 어디로 가든지 — 특히 같은 호스트의 로컬 워크로드로 라우팅되더라도 — 강제돼요. (일반 host 엔드포인트 정책은 로컬 워크로드로 가는 트래픽에는 건너뛰어져요.)

  • pre-DNAT 정책에는 '기본 드랍(default drop)' 의미 체계가 없어요(일반 host 엔드포인트 정책에는 있어요). 즉 host 엔드포인트가 정의되어 있지만 특정 들어오는 패킷을 명시적으로 허용하거나 거부하는 pre-DNAT 정책이 없다면, 그 패킷은 계속 진행되고 이후 워크로드 정책(로컬 워크로드로 가는 경우) 또는 일반 host 엔드포인트 정책(아닌 경우)에 따라 수락되거나 드랍돼요.

더 알아보기 (Learn more)

host 엔드포인트의 기본 개념이 낯설다면 host 엔드포인트 개요 문서를 먼저 읽어보세요. DNAT가 붙기 전에 규칙을 걸어야 하는 이유를 이해하면 NodePort 보호 설계가 훨씬 쉬워져요.