이 페이지에서는 Google Kubernetes Engine(GKE)에서 IP 매스커레이드가 작동하는 방식과 다양한 시나리오의 구성 옵션에 대해 설명합니다.
IP 매스커레이딩 개요
IP 매스커레이딩은 다대일 IP 주소 변환을 수행하는 소스 네트워크 주소 변환(SNAT) 형식입니다. GKE에서는 IP 매스커레이딩을 사용하여 포드에서 전송된 패킷의 소스 IP 주소를 변경할 수 있습니다.
Kubernetes 구현의 IP 매스커레이딩에 대한 일반적인 개요는 IP 매스커레이드 에이전트 사용자 가이드를 참조하세요.
GKE IP 매스커레이딩
IP 매스커레이딩이 포드에서 내보내는 패킷에 적용되면 GKE는 패킷 소스 IP 주소를 포드 IP에서 기본 노드의 IP 주소로 변경합니다. 패킷의 소스 IP 주소를 매스커레이딩하면 수신자가 클러스터 노드 IP 주소의 패킷만 수신하도록 구성된 경우에 유용합니다.
Linux 노드에서 GKE는 iptables
규칙을 구성합니다.
GKE는 ip-masq-agent
DaemonSet를 사용하여 적절한 데이터 영역을 구성합니다.
Windows Server 노드 풀에서는 IP 매스커레이딩이 지원되지 않습니다.
Autopilot 클러스터의 IP 매스커레이딩
Autopilot 클러스터에서 GKE는 항상 ip-masq-agent
DaemonSet를 배포합니다. 포드가 클러스터 노드, 포드 또는 서비스 범위로 전송하는 패킷을 제외하고 EgressNATPolicy
를 사용하여 IP 매스커레이드 동작을 제어할 수 있습니다. EgressNATPolicy
를 사용하려면 Autopilot 클러스터가 다음 요구사항을 모두 충족해야 합니다.
- 클러스터가 GKE 버전 1.23.4-gke.1600 이상 또는 1.22.7-gke.1500 이상을 사용해야 합니다.
- GKE Dataplane V2가 사용 설정된 클러스터를 만들어야 합니다.
다음 표에는 Autopilot GKE 클러스터의 IP 매스커레이드 구성이 요약되어 있습니다.
Autopilot 클러스터 구성 | 결과 SNAT 동작 |
---|---|
클러스터에는 |
GKE는 GKE는 소스 포드 IP 주소를 |
클러스터에 커스텀 |
기본
|
구성 예시
다음 섹션을 펼쳐 클러스터 유형에 따른 IP 매스커레이딩과 구성 예시를 확인합니다.
고급 구성 참조
ip-masq-agent
가 자동으로 배포되는 경우
Autopilot 모드 클러스터에서 GKE는 항상 ip-masq-agent
DaemonSet를 배포합니다.
ip-masq-agent
DaemonSet가 클러스터에 있으면 GKE는 클러스터의 각 노드에서 제공 포드를 업데이트하고 조정합니다.
기본 비매스커레이드 대상
기본 비매스커레이드 대상은 다음과 같습니다.
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
100.64.0.0/10
192.0.0.0/24
192.0.2.0/24
192.88.99.0/24
198.18.0.0/15
198.51.100.0/24
203.0.113.0/24
240.0.0.0/4
--disable-default-snat
플래그 영향
--disable-default-snat
플래그는 모든 대상으로 전송된 패킷에 대해 소스 포드 IP 주소가 보존되도록 기본 GKE SNAT 동작을 변경합니다.
GKE는 클러스터에 ip-masq-agent
DaemonSet를 배포하지 않고 기본 SNAT 동작을 구현합니다.
클러스터에 ip-masq-agent
DaemonSet가 포함되어 있으면 --disable-default-snat
플래그는 아무런 영향을 미치지 않습니다.
- Autopilot 클러스터는 항상
ip-masq-agent
DaemonSet를 포함하므로--disable-default-snat
플래그는 Autopilot 클러스터에 영향을 주지 않습니다.
클러스터가 생성된 후 클러스터를 업데이트하여 --disable-default-snat
플래그를 설정할 수 있습니다. 클러스터에 배포된 ip-masq-agent
DaemonSet가 없는 경우 기본 SNAT 사용 중지는 클러스터가 모든 노드를 교체한 후(경우에 따라 몇 시간 후에) 적용됩니다. 이는 GKE가 클러스터의 노드를 교체할 때 구성된 유지보수 기간을 반영하기 때문입니다. 유지보수 기간을 구성하지 않은 경우 --disable-default-snat
플래그를 적용하기 전에 클러스터의 노드를 수동으로 순환해야 합니다.
링크-로컬 매스커레이딩
169.254.0.0/16
범위는 링크-로컬 IP 주소에 사용됩니다. 링크-로컬 매스커레이딩은 소스 포드 IP 주소를 169.254.0.0/16
대상으로 전송된 패킷의 소스 노드 IP 주소로 변경하는 것을 의미합니다.
Autopilot 클러스터는 항상 169.254.0.0/16
대상으로 전송된 패킷의 소스 포드 IP 주소를 보존합니다.
hostNetwork: true
를 사용한 진단 컨테이너 및 포드
패킷에 커스텀 소스 IP 주소를 지정하지 않으면 hostNetwork: true
및 진단 컨테이너로 실행되는 포드는 노드의 IP 주소와 일치하는 소스를 사용하여 패킷을 전송합니다. hostNetwork: true
로 실행되는 포드의 경우 GKE는 노드의 IP 주소를 포드에 할당합니다. GKE는 도구 상자를 사용하여 노드 문제를 디버깅할 수 있는 컨테이너를 포함하여 진단 컨테이너의 IP 주소를 관리하지 않습니다.
Autopilot 클러스터는 spec.hostNetwork: true
를 사용한 포드 실행을 지원하지 않습니다. Autopilot 클러스터의 노드는 SSH를 통해 액세스할 수 없으므로 진단 컨테이너를 실행할 수 없습니다.
인터넷 대상에 포드 IPv4 주소 소스 보존
클러스터의 IP 매스커레이드 구성이 다음 중 하나인 경우 GKE는 인터넷 대상을 포함하여 모든 대상으로 전송되는 패킷의 포드 IP 주소 소스를 보존합니다.
- Autopilot 클러스터에서
spec.action
이NoSNAT
이고spec.destinations
에Cidr: 0.0.0.0/0
이 포함되도록 기본 EgressNATPolicy를 수정한 경우
공개 및 비공개 클러스터 모두에서 포드 IPv4 소스는 내부 IPv4 주소이므로 인터넷에서 이 소스를 라우팅할 수 없습니다. 따라서 인터넷으로 전송된 패킷의 소스 포드 IPv4 주소를 보존하는 경우 클러스터 노드를 나간 후 패킷을 라우팅하려면 다음 기법 중 하나를 사용해야 합니다.
- VPC 네트워크에 기본 인터넷 게이트웨이 다음 홉이 있는 기본 경로가 있는지 확인하고 최소한 클러스터의 포드에서 사용하는 서브넷 보조 IPv4 주소 범위 이상으로 Public NAT 서비스를 제공하도록 Cloud NAT 게이트웨이를 구성합니다. 자세한 내용은 Cloud NAT 개요의 GKE 상호작용을 참조하세요.
- 다음 홉이 VM 인스턴스이거나 내부 패스 스루 네트워크 부하 분산기인 커스텀 기본 경로를 사용하도록 VPC 네트워크를 구성합니다. 여기서 부하 분산기의 VM 또는 백엔드는 패킷을 포드 대신 인터넷으로 라우팅하도록 구성되었습니다.
기본 SNAT 동작으로 복원
ip-masq-agent
DaemonSet가 클러스터에 있을 때 기본 SNAT 동작으로 복원하려면 연결된 ip-masq-agent
ConfigMap을 삭제합니다. ip-masq-agent
DaemonSet는 관리하는 노드에서 기본 IP 매스커레이딩 동작을 복원합니다.
ip-masq-agent
DaemonSet가 클러스터에 없을 때 기본 SNAT 동작으로 복원하려면 노드 풀을 업그레이드해야 합니다(--disable-default-snat
가 클러스터에 설정되지 않았는지 확인).
Autopilot 클러스터의 이그레스 NAT 정책 영향
GKE 이그레스 NAT 정책을 사용하면 Autopilot 클러스터에서 IP 매스커레이딩을 구성할 수 있습니다. GKE 이그레스 NAT 정책 커스텀 리소스 정의(CRD)를 사용하여 포드에서 전송된 패킷의 소스 IP 주소를 변경할 수 있습니다.
보안이나 IP 주소 소진상의 이유로 포드의 IP 주소를 온프레미스 네트워크로 가는 아웃바운드 트래픽의 노드 IP 주소 범위로 매스커레이드할 수 있습니다. 예를 들어 Autopilot 클러스터에 RFC-1918 이외의 범위를 사용하고 노드에 RFC-1918 범위를 사용할 수 있습니다. 하지만 포드에서 RFC-1918 이외의 범위도 사용하는 온프레미스 네트워크와 통신해야 하는 경우 IP 주소가 겹칠 수 있습니다. 트래픽 손실을 방지하려면 포드의 RFC-1918 이외의 범위를 온프레미스 네트워크에 공지하지 않도록 이그레스 NAT 정책을 구성하면 됩니다. 이그레스 NAT 정책은 대신 포드의 RFC-1918 이외의 범위를 매스커레이드하여 노드의 RFC-1918 범위를 사용합니다. 노드 범위가 온프레미스 범위와 겹치지 않는지 또는 트래픽 루프가 발생하는지 확인합니다.
GKE는 다음 프로세스를 통해 Autopilot 클러스터의 IP 매스커레이딩 동작을 적용합니다.
- GKE는 이그레스 NAT 컨트롤러와
ip-masq-agent
를 배포합니다. - 이그레스 NAT 정책을 만듭니다.
- GKE 컨트롤러는 정책을
ip-masq-agent
ConfigMap으로 변환합니다. ip-masq-agent
DaemonSet에서 ConfigMap을 읽은 후 GKE에서 IP 매스커레이딩 동작을 적용합니다.
자동 생성된 정책
GKE는 자동으로 생성된 이그레스 NAT 정책 두 개를 지원합니다.
- 기본 정책: 이러한 정책은 수정할 수 있습니다.
- GKE 관리 정책: 이러한 정책은 고정되어 있으며 수정할 수 없습니다.
기본 정책
GKE는 기본 IP 주소 범위 집합을 사전 정의합니다. 패킷이 이러한 대상으로 전송되면 클러스터에서 IP 주소 소스를 매스커레이드하지 않고 소스 포드 IP 주소를 보존합니다. 이러한 기본 IP 주소 범위를 변경하려면 이그레스 NAT 정책 수정 및 배포를 참조하세요.
다음 매니페스트에서는 기본 이그레스 NAT 정책을 설명합니다.
Name: default
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: EgressNATPolicy
Metadata:
Creation Timestamp: 2022-03-16T21:05:45Z
Generation: 2
Managed Fields:
API Version: networking.gke.io/v1
Fields Type: FieldsV1
fieldsV1:
f:spec:
.:
f:action:
f:status:
Manager: egress-nat-controller
Operation: Update
Time: 2022-03-16T21:05:45Z
API Version: networking.gke.io/v1
Fields Type: FieldsV1
fieldsV1:
f:spec:
f:destinations:
Manager: kubectl
Operation: Update
Time: 2022-03-17T01:58:13Z
Resource Version: 189346
UID: 06acbb5a-23ba-4c2a-bb34-9b6ed8c4a87f
Spec:
Action: NoSNAT
Destinations:
Cidr: 10.0.0.0/8
Cidr: 172.16.0.0/12
Cidr: 192.168.0.0/16
Cidr: 240.0.0.0/4
Cidr: 192.0.2.0/24
Cidr: 198.51.100.0/24
Cidr: 203.0.113.0/24
Cidr: 100.64.0.0/10
Cidr: 198.18.0.0/15
Cidr: 192.0.0.0/24
Cidr: 192.88.99.0/24
Status:
Events: <none>
CIDR 범위는 기본 비매스커레이드 대상 범위와 동일합니다.
GKE 정책으로 관리
GKE 이그레스 NAT 정책은 클러스터 작업을 보존하는 데 필요한 고정 IP 주소 범위를 예약합니다. 이 정적 범위에는 클러스터의 포드, 서비스, 노드 IP 주소 범위가 포함되며, 기본 정책과 겹칠 수 있습니다.
GKE에서 할당하는 동적 8바이트 해시(gke-{CLUSTER_SHORT_HASH}
)를 사용하여 이 정책을 식별할 수 있습니다. 이 정책을 수정할 수 없습니다.
다음 매니페스트는 gke-bbfa6c0e-1
이라는 GKE에서 관리하는 정책을 설명합니다.
Name: gke-bbfa6c0e-1
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: EgressNATPolicy
Metadata:
Creation Timestamp: 2022-03-16T21:05:46Z
Generation: 1
Managed Fields:
API Version: networking.gke.io/v1
Fields Type: FieldsV1
fieldsV1:
f:spec:
.:
f:action:
f:destinations:
f:status:
Manager: egress-nat-controller
Operation: Update
Time: 2022-03-16T21:05:46Z
Resource Version: 11699
UID: 0201b5de-a6f6-4926-822b-31ed7cdee2c6
Spec:
Action: NoSNAT
Destinations:
Cidr: 10.119.128.0/17
Cidr: 10.120.0.0/22
Cidr: 10.128.0.0/20
Status:
Events: <none>