Agen penyamaran IP


Halaman ini menjelaskan cara kerja penyamaran IP di Google Kubernetes Engine (GKE) dan menyediakan opsi konfigurasi untuk berbagai skenario.

Ringkasan penyamaran IP

Penyamaran IP adalah bentuk penafsiran alamat jaringan sumber (SNAT) yang melakukan penafsiran alamat IP many-to-one. GKE dapat menggunakan penyamaran IP untuk mengubah sumber alamat IP dari paket yang dikirim dari Pod.

Untuk mengetahui ringkasan yang lebih umum tentang penyamaran IP dalam penerapan Kubernetes, baca Panduan Pengguna Agen Penyamaran IP.

Penyamaran IP GKE

Jika penyamaran IP berlaku pada paket yang dikeluarkan oleh Pod, GKE akan mengubah alamat IP sumber paket dari alamat IP Pod ke alamat IP node dasar. Penyamaran alamat IP sumber paket berguna jika penerima dikonfigurasi untuk menerima paket hanya dari alamat IP node cluster.

Di node Linux, GKE mengonfigurasi aturan iptables. GKE menggunakan ip-masq-agent DaemonSet untuk mengonfigurasi bidang data yang sesuai.

Penyamaran IP tidak didukung dengan node pool Windows Server.

Penyamaran IP untuk cluster Standard

Di cluster Standard, perilaku penyamaran IP cluster dipengaruhi oleh tiga faktor:

Tabel berikut merangkum konfigurasi penyamaran IP untuk cluster GKE Standard:

Konfigurasi cluster Menghasilkan perilaku SNAT

DaemonSet ip-masq-agent ada dalam cluster, dan daftar nonMasqueradeCIDRs kustom ada di ConfigMap ip-masq-agent.

GKE akan mempertahankan alamat IP Pod sumber untuk paket yang dikirim ke tujuan yang ditentukan dalam daftar nonMasqueradeCIDRs.

GKE akan mengubah alamat IP Pod sumber menjadi alamat IP node sumber untuk paket yang dikirim ke tujuan yang tidak ditentukan dalam daftar nonMasqueradeCIDRs.

DaemonSet ip-masq-agent ada dalam cluster, tetapi daftar nonMasqueradeCIDRs kustom tidak ada di ConfigMap ip-masq-agent atau ConfigMap ip-masq-agent tidak ada sama sekali.

GKE akan mempertahankan alamat IP Pod sumber untuk paket yang dikirim ke kumpulan tujuan non-penyamaran default.

GKE akan mengubah alamat IP Pod sumber menjadi alamat IP node sumber untuk paket yang dikirim ke tujuan di luar tujuan non-penyamaran default.

DaemonSet ip-masq-agent tidak ada dalam cluster, dan Anda telah membuat cluster tanpa flag --disable-default-snat.

GKE akan mempertahankan alamat IP Pod sumber untuk paket yang dikirim ke kumpulan tujuan non-penyamaran default.

GKE akan mengubah alamat IP Pod sumber menjadi alamat IP node sumber untuk paket yang dikirim ke tujuan di luar tujuan non-penyamaran default.

DaemonSet ip-masq-agent tidak ada dalam cluster, dan Anda telah membuat cluster dengan flag --disable-default-snat.

GKE akan mempertahankan alamat IP Pod sumber untuk paket yang dikirim ke semua tujuan.

Tinjau Mempertahankan sumber alamat IPv4 Pod ke tujuan internet untuk pertimbangan pemilihan rute penting saat Anda mempertahankan alamat sumber IPv4 Pod dan harus merutekan paket ke internet.

Penyamaran IP untuk cluster Autopilot

Dalam cluster Autopilot, GKE selalu men-deploy DemonSet ip-masq-agent. Kecuali untuk paket yang dikirim oleh Pod ke node, Pod, atau rentang Layanan cluster, Anda dapat mengontrol perilaku penyamaran IP menggunakan EgressNATPolicy. Untuk menggunakan EgressNATPolicy, cluster Autopilot harus memenuhi kedua persyaratan berikut:

  • Cluster harus menggunakan GKE versi 1.23.4-gke.1600 atau yang lebih baru, atau 1.22.7-gke.1500 atau yang lebih baru.
  • Cluster harus dibuat dengan GKE Dataplane V2 yang diaktifkan.

Tabel berikut merangkum konfigurasi penyamaran IP untuk cluster GKE Autopilot:

Konfigurasi cluster autopilot Menghasilkan perilaku SNAT

Cluster ini menyertakan EgressNATPolicy kustom yang spec.action-nya adalah NoSNAT yang berisi tujuan non- penyamaran yang ditentukan di spec.destinations[].

GKE akan mempertahankan alamat IP Pod sumber untuk paket yang dikirim ke tujuan yang ditentukan dalam spec.destinations[] EgressNATPolicy. GKE melakukannya dengan menafsirkan spec.destinations[] ke dalam daftar nonMasqueradeCIDRs di configMap ip-masq-agent.

GKE mengubah alamat IP Pod sumber menjadi alamat IP node sumber untuk paket yang dikirim ke tujuan yang tidak ditentukan dalam spec.destinations[] EgressNATPolicy.

Cluster tidak menyertakan EgressNATPolicy kustom.

EgressNATPolicy default dan kebijakan Dikelola oleh GKE akan berlaku, sehingga menghasilkan perilaku berikut:

  • GKE akan mempertahankan alamat IP Pod sumber untuk paket yang dikirim ke kumpulan tujuan non-penyamaran default.
  • GKE akan mengubah alamat IP Pod sumber menjadi alamat IP node sumber untuk paket yang dikirim ke tujuan di luar tujuan non-penyamaran default.

Contoh konfigurasi

Luaskan bagian berikut untuk melihat contoh penyamaran dan konfigurasi IP berdasarkan jenis cluster.

Referensi konfigurasi lanjutan

Saat ip-masq-agent di-deploy secara otomatis

Dalam cluster mode Autopilot, GKE selalu men-deploy DaemonSet ip-masq-agent.

Dalam cluster Standard, GKE men-deploy DaemonSet ip-masq-agent saat flag --disable-default-snat belum ditetapkan dan cluster menggunakan salah satu kombinasi konfigurasi berikut:

  • Cluster tidak menggunakan GKE Dataplane V2, dan penerapan kebijakan jaringan diaktifkan.

  • Cluster menggunakan rentang alamat IP Pod yang tidak sesuai dalam 10.0.0.0/8.

Agar DaemonSet ip-masq-agent efektif, Anda juga harus menentukan daftar nonMasqueradeCIDRs di ConfigMap ip-masq-agent. Untuk mengetahui informasi selengkapnya, lihat cara mengonfigurasi agen penyamaran IP.

Saat DaemonSet ip-masq-agent ada di cluster, GKE akan mengupdate dan merekonsiliasi Pod yang aktif di setiap node cluster.

Tujuan non-penyamaran default

Tujuan non-penyamaran default adalah:

  • 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

Tujuan non-penyamaran default berlaku untuk cluster dengan konfigurasi berikut:

Tujuan non-penyamaran default tidak berlaku untuk cluster dengan konfigurasi berikut:

Efek flag --disable-default-snat

Flag --disable-default-snat mengubah perilaku SNAT GKE default sehingga alamat IP Pod sumber dipertahankan untuk paket yang dikirim ke semua tujuan. GKE menerapkan perilaku SNAT default dengan tidak men-deploy DaemonSet ip-masq-agent apa pun dalam cluster.

Flag --disable-default-snat tidak berpengaruh jika cluster menyertakan DaemonSet ip-masq-agent:

  • Karena cluster Autopilot selalu menyertakan DaemonSet ip-masq-agent, flag --disable-default-snat tidak berpengaruh pada cluster Autopilot.

Anda dapat menetapkan flag --disable-default-snat dengan mengupdate cluster setelah dibuat. Asalkan cluster tidak memiliki DaemonSet ip-masq-agent yang di-deploy, penonaktifan SNAT default akan diterapkan setelah cluster mengganti semua nodenya—terkadang beberapa jam kemudian. Hal ini karena GKE mematuhi periode pemeliharaan yang Anda konfigurasi saat mengganti node dalam cluster. Jika belum mengonfigurasi masa pemeliharaan apa pun, Anda perlu memproses ulang node di cluster secara manual sebelum flag --disable-default-snat memiliki efek apa pun.

Penyamaran link-local

Rentang 169.254.0.0/16 digunakan untuk alamat IP link-local. Penyamaran link-local mengacu pada perubahan alamat IP Pod sumber menjadi alamat IP node sumber untuk paket yang dikirim ke tujuan 169.254.0.0/16.

Cluster Autopilot selalu menyimpan alamat IP Pod sumber untuk paket yang dikirim ke tujuan 169.254.0.0/16.

Secara default, cluster Standard juga mempertahankan alamat IP Pod sumber untuk paket yang dikirim ke tujuan 169.254.0.0/16.

Anda dapat mengaktifkan penyamaran IP link-local dalam cluster Standard dengan melakukan kedua hal berikut:

Container dan Pod diagnostik dengan hostNetwork: true

Kecuali jika Anda menentukan alamat IP sumber kustom untuk paket, Pod yang berjalan dengan hostNetwork: true dan container diagnostik akan mengirim paket dengan sumber yang cocok dengan alamat IP node. Untuk Pod yang berjalan dengan hostNetwork: true, GKE menetapkan alamat IP node ke Pod. GKE tidak mengelola alamat IP untuk container diagnostik, termasuk container untuk men-debug masalah node menggunakan toolbox.

Cluster Autopilot tidak mendukung pengoperasian Pod dengan spec.hostNetwork: true. Karena node cluster Autopilot tidak dapat diakses menggunakan SSH, Anda tidak dapat menjalankan container diagnostik pada node tersebut.

Mempertahankan sumber alamat IPv4 Pod ke tujuan internet

Jika konfigurasi penyamaran IP cluster Anda adalah salah satu dari konfigurasi berikut, GKE akan mempertahankan sumber alamat IP Pod untuk paket yang dikirim ke semua tujuan, termasuk tujuan internet:

  • Di cluster Standard dengan DaemonSet ip-masq-agent, jika Anda telah menetapkan nonMasqueradeCIDRs ke 0.0.0.0 di ConfigMap ip-masq-agent.
  • Di cluster Standard tanpa DaemonSet ip-masq-agent, jika Anda telah menetapkan flag --disable-default-snat.

Sumber IPv4 Pod adalah alamat IPv4 internal, yang berarti sumber tersebut tidak dapat dirutekan di internet. Oleh karena itu, saat mempertahankan alamat IPv4 Pod sumber untuk paket yang dikirim ke internet, Anda harus menggunakan teknik seperti salah satu dari teknik berikut untuk merutekan paket setelah meninggalkan node cluster:

  • Pastikan jaringan VPC Anda memiliki rute default dengan next hop gateway internet default, dan konfigurasi gateway Cloud NAT untuk menyediakan layanan NAT publik ke setidaknya rentang alamat IPv4 sekunder subnet yang digunakan oleh Pod di cluster Anda. Untuk mengetahui detail selengkapnya, lihat interaksi GKE di ringkasan Cloud NAT.
  • Konfigurasi jaringan VPC Anda untuk menggunakan rute default kustom yang next hop-nya adalah instance VM atau Network Load Balancer passthrough internal, tempat VM atau backend load balancer telah dikonfigurasi untuk merutekan paket ke internet yang mewakili Pod.

Memulihkan ke perilaku SNAT default

Untuk memulihkan ke perilaku SNAT default saat DaemonSet ip-masq-agent ada di cluster, hapus ConfigMap ip-masq-agent terkait. DaemonSet ip-masq-agent memulihkan perilaku penyamaran IP default di node yang dikelolanya.

Untuk memulihkan ke perilaku SNAT default saat DaemonSet ip-masq-agent tidak ada di cluster, Anda harus mengupgrade node pool (pastikan --disable-default-snat tidak ditetapkan di cluster).

Efek kebijakan Egress NAT di cluster Autopilot

Kebijakan Egress NAT GKE memungkinkan Anda mengonfigurasi penyamaran IP pada cluster Autopilot. Anda dapat menggunakan definisi resource kustom (CRD) kebijakan Egress NAT GKE untuk mengubah alamat IP sumber paket yang dikirim dari Pod.

Untuk alasan keamanan atau kehabisan alamat IP, Anda dapat menyamarkan alamat IP dari Pod ke rentang alamat IP Node untuk traffic keluar ke jaringan lokal. Misalnya, Anda dapat menggunakan rentang non-RFC-1918 untuk cluster Autopilot dan menggunakan rentang RFC-1918 untuk node. Namun, jika Pod harus berkomunikasi dengan jaringan lokal yang juga menggunakan rentang non-RFC-1918, alamat IP dapat tumpang-tindih. Untuk menghindari kehilangan traffic, Anda dapat mengonfigurasi Kebijakan Egress NAT agar tidak mengiklankan rentang non-RFC-1918 Pod ke jaringan lokal. Kebijakan Egress NAT akan menyamarkan rentang non RFC-1918 Pod untuk menggunakan rentang RFC-1918 Node. Pastikan rentang Node tidak tumpang tindih dengan rentang lokal mana pun atau hal ini dapat menyebabkan loop traffic.

GKE menerapkan perilaku penyamaran IP untuk cluster Autopilot melalui proses berikut:

  1. GKE men-deploy pengontrol Egress NAT dan ip-masq-agent.
  2. Anda membuat kebijakan Egress NAT.
  3. Pengontrol GKE menafsirkan kebijakan menjadi ConfigMap ip-masq-agent.
  4. DaemonSet ip-masq-agent membaca ConfigMap, lalu GKE menerapkan perilaku penyamaran IP.

Kebijakan yang dibuat secara otomatis

GKE mendukung dua kebijakan Egress NAT yang dibuat secara otomatis berikut:

  • Default: Kebijakan ini dapat diedit.
  • Dikelola oleh GKE: Kebijakan ini bersifat permanen dan tidak dapat diedit.

Kebijakan default

GKE menentukan terlebih dahulu kumpulan rentang alamat IP default. Saat paket dikirim ke tujuan tersebut, cluster Anda tidak menyamarkan sumber alamat IP dan mempertahankan alamat IP Pod sumber. Untuk mengubah rentang alamat IP default ini, baca Mengedit dan men-deploy kebijakan Egress NAT.

Manifes berikut menjelaskan kebijakan Egress NAT default:

    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>

Rentang CIDR sama dengan rentang tujuan non-penyamaran default.

Kebijakan Dikelola oleh GKE

Kebijakan Egress NAT GKE mereservasi rentang alamat IP statis yang diperlukan untuk mempertahankan operasi cluster. Rentang statis ini berisi rentang alamat IP Pod, Layanan, dan Node dari cluster, dan mungkin tumpang tindih dengan kebijakan default.

Anda dapat mengidentifikasi kebijakan ini dengan hash 8 byte dinamis (gke-{CLUSTER_SHORT_HASH}) yang ditetapkan GKE. Anda tidak dapat mengedit kebijakan ini.

Manifes berikut menjelaskan kebijakan yang dikelola oleh GKE bernama gke-bbfa6c0e-1:

    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>

Langkah selanjutnya