IP 매스커레이드 에이전트


이 페이지에서는 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 매스커레이드 구성이 요약되어 있습니다.

클러스터 구성 결과 SNAT 동작

ip-masq-agent DaemonSet가 클러스터에 있고 커스텀 nonMasqueradeCIDRs 목록이 ip-masq-agent ConfigMap에 있습니다.

GKE는 nonMasqueradeCIDRs 목록에 지정된 대상으로 전송된 패킷의 소스 포드 IP 주소를 유지합니다.

GKE는 소스 포드 IP 주소를 nonMasqueradeCIDRs 목록에 지정되지 않은 대상으로 전송된 패킷의 소스 노드 IP 주소로 변경합니다.

ip-masq-agent DaemonSet가 클러스터에 있지만 커스텀 nonMasqueradeCIDRs 목록이 ip-masq-agent ConfigMap에 존재하지 않거나 또는 ip-masq-agent ConfigMap이 전혀 존재하지 않습니다.

GKE는 기본 비매스커레이드 대상 집합으로 전송된 패킷의 소스 포드 IP 주소를 유지합니다.

GKE는 소스 포드 IP 주소를 기본 비매스커레이드 대상의 외부 대상으로 전송된 패킷의 소스 노드 IP 주소로 변경합니다.

ip-masq-agent DaemonSet가 클러스터에 없고 그리고 --disable-default-snat 플래그 없이 클러스터를 만들었습니다.

GKE는 기본 비매스커레이드 대상 집합으로 전송된 패킷의 소스 포드 IP 주소를 유지합니다.

GKE는 소스 포드 IP 주소를 기본 비매스커레이드 대상의 외부 대상으로 전송된 패킷의 소스 노드 IP 주소로 변경합니다.

ip-masq-agent DaemonSet가 클러스터에 없고 그리고 --disable-default-snat 플래그를 사용하여 클러스터를 만들었습니다.

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 동작

클러스터에는 spec.destinations[]에 지정된 비매스커레이드 대상을 포함하는 spec.actionNoSNAT인 커스텀 EgressNATPolicy가 포함되어 있습니다.

GKE는 EgressNATPolicyspec.destinations[]에 지정된 대상으로 전송된 패킷의 소스 포드 IP 주소를 유지합니다. GKE는 spec.destinations[]ip-masq-agent configMap의 nonMasqueradeCIDRs 목록으로 변환하여 이를 수행합니다.

GKE는 소스 포드 IP 주소를 EgressNATPolicyspec.destinations[]에 지정되지 않은 대상으로 전송된 패킷의 소스 노드 IP 주소로 변경합니다.

클러스터에 커스텀 EgressNATPolicy포함되지 않습니다.

기본 EgressNATPolicyGKE 관리 정책이 모두 적용되어 다음과 같은 동작이 발생합니다.

  • GKE는 기본 비매스커레이드 대상 집합으로 전송된 패킷의 소스 포드 IP 주소를 유지합니다.
  • GKE는 소스 포드 IP 주소를 기본 비매스커레이드 대상의 외부 대상으로 전송된 패킷의 소스 노드 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

기본 비매스커레이드 대상은 다음 구성을 사용하는 클러스터에 적용할 수 있습니다.

기본 비매스커레이드 대상은 다음 구성을 사용하는 클러스터에 적용되지 않습니다.

--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 주소를 보존합니다.

기본적으로 표준 클러스터는 169.254.0.0/16 대상으로 전송된 패킷의 소스 포드 IP 주소도 보존합니다.

다음 두 가지를 모두 수행하여 표준 클러스터에서 링크-로컬 IP 매스커레이딩을 사용 설정할 수 있습니다.

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이 있는 표준 클러스터에서 nonMasqueradeCIDRsip-masq-agent ConfigMap의 0.0.0.0으로 설정한 경우
  • ip-masq-agent DaemonSet이 없는 표준 클러스터에서 --disable-default-snat 플래그를 설정한 경우

공개 및 비공개 클러스터 모두에서 포드 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 매스커레이딩 동작을 적용합니다.

  1. GKE는 이그레스 NAT 컨트롤러와 ip-masq-agent를 배포합니다.
  2. 이그레스 NAT 정책을 만듭니다.
  3. GKE 컨트롤러는 정책을 ip-masq-agent ConfigMap으로 변환합니다.
  4. 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>

다음 단계