이 페이지에서는 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 매스커레이딩이 지원되지 않습니다.
표준 클러스터의 IP 매스커레이딩
표준 클러스터에서 클러스터의 IP 매스커레이드 동작은 다음 세 가지 요소로 제어됩니다.
- 배포했거나 GKE가
ip-masq-agent
DaemonSet을 클러스터에 자동으로 배포했는지 여부. GKE가ip-masq-agent
DaemonSet을 자동으로 배포하는 시나리오에 대한 자세한 내용은ip-masq-agent
가 자동으로 배포되는 경우를 참조하세요. ip-masq-agent
configMap에서 커스텀nonMasqueradeCIDRs
목록을 만들었는지 여부ip-masq-agent
DaemonSet이 클러스터에 배포되지 않은 경우--disable-default-snat
플래그로 클러스터를 만들었는지 여부. 이 플래그에 대한 자세한 내용은--disable-default-snat
플래그 영향을 참조하세요.
다음 표에는 표준 GKE 클러스터의 IP 매스커레이드 구성이 요약되어 있습니다.
클러스터 구성 | 결과 SNAT 동작 |
---|---|
|
GKE는 GKE는 소스 포드 IP 주소를 |
|
GKE는 기본 비매스커레이드 대상 집합으로 전송된 패킷의 소스 포드 IP 주소를 유지합니다. GKE는 소스 포드 IP 주소를 기본 비매스커레이드 대상의 외부 대상으로 전송된 패킷의 소스 노드 IP 주소로 변경합니다. |
|
GKE는 기본 비매스커레이드 대상 집합으로 전송된 패킷의 소스 포드 IP 주소를 유지합니다. GKE는 소스 포드 IP 주소를 기본 비매스커레이드 대상의 외부 대상으로 전송된 패킷의 소스 노드 IP 주소로 변경합니다. |
|
GKE는 모든 대상으로 전송되는 패킷의 소스 포드 IP 주소를 유지합니다. 포드 IPv4 소스 주소를 보존하고 패킷을 인터넷으로 라우팅해야 할 경우의 중요 라우팅 고려사항은 포드 IPv4 주소 소스를 인터넷 대상에 보존을 참조하세요. |
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를 배포합니다.
표준 클러스터에서 GKE는 --disable-default-snat
플래그가 설정되지 않은 경우 ip-masq-agent
DaemonSet를 배포하고 클러스터가 다음 구성 조합 중 하나를 사용합니다.
클러스터에서 GKE Dataplane V2를 사용하지 않으며 네트워크 정책 적용이 사용 설정되어 있습니다.
클러스터가
10.0.0.0/8
에 맞지 않는 포드 IP 주소 범위를 사용합니다.
ip-masq-agent
DaemonSet을 적용하려면 ip-masq-agent
ConfigMap에서 nonMasqueradeCIDRs
목록도 지정해야 합니다. 자세한 내용은 IP 매스커레이드 에이전트를 구성하는 방법을 참조하세요.
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
기본 비매스커레이드 대상은 다음 구성을 사용하는 클러스터에 적용할 수 있습니다.
클러스터에
ip-masq-agent
DaemonSet가 있지만ip-masq-agent
ConfigMap에 지정된nonMasqueradeCIDRs
목록이 없습니다. 여기에는 클러스터에ip-masq-agent
DaemonSet가 포함되지만ip-masq-agent
ConfigMap이 전혀 없는 경우가 포함됩니다.클러스터에
ip-masq-agent
DaemonSet가 없고 또한--disable-default-snat
플래그가 설정되지 않았습니다.
기본 비매스커레이드 대상은 다음 구성을 사용하는 클러스터에 적용되지 않습니다.
클러스터에
ip-masq-agent
DaemonSet가 있고ip-masq-agent
ConfigMap에 지정된 커스텀nonMasqueradeCIDRs
목록이 있습니다. 커스텀nonMasqueradeCIDRs
목록은 클러스터에ip-masq-agent
DaemonSet가 있을 때 항상 기본 비매스커레이드 대상을 재정의합니다.클러스터에
ip-masq-agent
DaemonSet가 없고 그리고--disable-default-snat
플래그가 설정되어 있습니다. 이 구성에 대한 자세한 내용은--disable-default-snat
플래그 영향을 참조하세요.
--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 클러스터에 영향을 주지 않습니다.
- 표준 클러스터의 경우:
ip-masq-agent
DaemonSet을 배포하거나 GKE에서ip-masq-agent
DaemonSet을 자동으로 배포하는 경우--disable-default-snat
플래그는--disable-default-snat
가 설정되어 있더라도 클러스터에 의미가 없습니다.ip-masq-agent
DaemonSet이 클러스터에 있는 경우 비매스커레이드 대상은ip-masq-agent
ConfigMap의nonMasqueradeCIDRs
목록 또는nonMasqueradeCIDRs
목록이 정의되지 않은 경우 기본 비매스커레이드 대상에서 명시적으로 지정됩니다.
클러스터가 생성된 후 클러스터를 업데이트하여 --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 주소를 보존합니다.
기본적으로 표준 클러스터는 169.254.0.0/16
대상으로 전송된 패킷의 소스 포드 IP 주소도 보존합니다.
다음 두 가지를 모두 수행하여 표준 클러스터에서 링크-로컬 IP 매스커레이딩을 사용 설정할 수 있습니다.
ip-masq-agent
configMap에masqLinkLocal
파라미터가 있고True
로 설정되었는지 확인합니다.ip-masq-agent
configMap에masqLinkLocal
매개변수가 없으면 기본값은False
입니다. 자세한 내용은ip-masq-agent
ConfigMap 확인,ip-masq-agent
ConfigMap 만들기, 기존ip-masq-agent
ConfigMap 수정을 참조하세요.- 클러스터에
ip-masq-agent
DaemonSet이 배포되었는지 확인합니다. 자세한 내용은ip-masq-agent
DaemonSet 확인 및ip-masq-agent
DaemonSet 배포를 참조하세요.
hostNetwork: true
를 사용한 진단 컨테이너 및 포드
패킷에 커스텀 소스 IP 주소를 지정하지 않으면 hostNetwork: true
및 진단 컨테이너로 실행되는 포드는 노드의 IP 주소와 일치하는 소스를 사용하여 패킷을 전송합니다. hostNetwork: true
로 실행되는 포드의 경우 GKE는 노드의 IP 주소를 포드에 할당합니다. GKE는 도구 상자를 사용하여 노드 문제를 디버깅할 수 있는 컨테이너를 포함하여 진단 컨테이너의 IP 주소를 관리하지 않습니다.
Autopilot 클러스터는 spec.hostNetwork: true
를 사용한 포드 실행을 지원하지 않습니다. Autopilot 클러스터의 노드는 SSH를 통해 액세스할 수 없으므로 진단 컨테이너를 실행할 수 없습니다.
인터넷 대상에 포드 IPv4 주소 소스 보존
클러스터의 IP 매스커레이드 구성이 다음 중 하나인 경우 GKE는 인터넷 대상을 포함하여 모든 대상으로 전송되는 패킷의 포드 IP 주소 소스를 보존합니다.
ip-masq-agent
DaemonSet이 있는 표준 클러스터에서nonMasqueradeCIDRs
를ip-masq-agent
ConfigMap의0.0.0.0
으로 설정한 경우ip-masq-agent
DaemonSet이 없는 표준 클러스터에서--disable-default-snat
플래그를 설정한 경우
- 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>
다음 단계
- 이그레스 NAT 정책을 사용하여 Autopilot 클러스터에서 IP 매스커레이드를 구성하는 방법을 알아봅니다.
- Standard 클러스터에서 IP 매스커레이드 에이전트를 구성하는 방법을 알아봅니다.
- GKE 네트워크 개요 읽기
- 승인된 네트워크 구성에 대해 알아보기