Mengonfigurasi gateway NAT keluar

Dokumen ini berisi penjelasan mengenai cara menyiapkan gateway NAT keluar untuk Google Distributed Cloud. Gateway ini menyediakan alamat IP SNAT yang persisten dan determenistik untuk traffic keluar dari cluster Anda. Saat Anda menjalankan workload yang memiliki traffic pengguna yang keluar (di luar cluster), pelanggan Anda ingin mengidentifikasi traffic ini menggunakan beberapa alamat IP determenistik. Dengan demikian, pelanggan Anda dapat menetapkan langkah keamanan berbasis IP, seperti kebijakan terkait izin.

Gateway NAT keluar diaktifkan menggunakan dua resource kustom. Untuk namespace tertentu, resource kustom NetworkGatewayGroup menentukan alamat IP mengambang yang dapat dikonfigurasi pada antarmuka jaringan Node yang dipilih untuk bertindak sebagai gateway. Resource kustom EgressNatPolicy dapat Anda gunakan untuk menentukan kebijakan pemilihan rute keluar untuk mengontrol traffic di gateway keluar.

Jika Anda tidak menyiapkan gateway NAT keluar, atau jika traffic keluar tidak memenuhi aturan pemilihan traffic, traffic keluar dari Pod tertentu ke tujuan di luar cluster akan disamarkan ke alamat IP node tempat Pod berjalan. Dalam skenario ini, tidak ada jaminan bahwa semua traffic keluar dari Pod tertentu akan memiliki alamat IP sumber yang sama atau akan menyamar ke alamat IP Node yang sama.

Gateway NAT keluar adalah penawaran jaringan lanjutan yang dibangun di atas Dataplane V2.

Cara kerja gateway NAT keluar

Logika pemilihan traffic keluar didasarkan pada pemilih namespace, pemilih Pod, dan serangkaian rentang alamat IP tujuan dalam notasi blok CIDR. Untuk menggambarkan cara kerja gateway NAT keluar, mari kita pertimbangkan alur paket dari Pod ke konsumen eksternal dan respons yang terkait. Asumsikan subnet Node memiliki alamat IP dalam blok CIDR 192.168.1.0/24.

Diagram berikut menunjukkan arsitektur jaringan untuk traffic keluar melalui node gateway.

Diagram gateway NAT keluar untuk Google Distributed Cloud

Alur paket melalui gateway NAT keluar mungkin terlihat seperti ini:

  1. Traffic keluar dihasilkan dari Pod dengan alamat IP 10.10.10.1 di Node dengan alamat IP 192.168.1.1.

    Alamat tujuan traffic adalah endpoint di luar cluster.

  2. Jika traffic cocok dengan aturan keluar, program eBPF akan mengarahkan traffic keluar ke Node gateway, bukan menyamar secara langsung dengan alamat IP Node.

  3. Gateway Node menerima traffic keluar.

  4. Node gateway menyamarkan alamat IP sumber traffic asal, 10.10.10.1, dengan alamat IP keluar sumber, 192.168.1.100 yang ditetapkan dalam resource kustom EgressNATPolicy.

  5. Traffic yang dikembalikan akan kembali ke Node gateway dengan tujuan sebagai 192.168.1.100.

  6. Node gateway mencocokkan conntrack traffic kembali dengan traffic keluar asli dan menulis ulang alamat IP tujuan sebagai 10.10.10.1.

  7. 10.10.10.1 diperlakukan sebagai traffic dalam cluster, dirutekan ke Node asli, dan dikirim kembali ke Pod asli.

Mengonfigurasi alamat IP mengambang untuk traffic Node

Resource kustom Network Gateway Group adalah komponen paket dari Google Distributed Cloud. Resource ini mengelola daftar satu atau beberapa alamat IP mengambang yang akan digunakan untuk traffic keluar dari Node di cluster Anda. Node yang berpartisipasi ditentukan berdasarkan namespace yang ditentukan. Network Gateway Group menyediakan alamat IP mengambang setiap saat berdasarkan upaya terbaik. Jika Node yang menggunakan alamat IP mengambang tidak berfungsi, operator jaringan lanjutan akan memindahkan alamat IP yang ditetapkan ke Node berikutnya yang tersedia. Semua traffic keluar workload yang menggunakan alamat IP tersebut juga akan berpindah.

Menyertakan detail Grup Gateway Jaringan (anotasi dan spesifikasi) di file konfigurasi cluster saat Anda membuat cluster 1.29.200-gke.243 baru.

Membuat resource kustom NetworkGatewayGroup

Aktifkan Grup Gateway Jaringan dengan menetapkan kolom spec.clusterNetwork.advancedNetworking ke true dalam file konfigurasi cluster saat Anda membuat cluster seperti yang ditunjukkan pada contoh berikut:

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
spec:
  clusterNetwork:
    ...
    advancedNetworking: true
    ...

Saat Anda membuat resource kustom NetworkGatewayGroup, tetapkan namespace-nya ke namespace cluster dan tentukan daftar alamat IP mengambang, seperti ditunjukkan dalam contoh berikut:

kind: NetworkGatewayGroup
apiVersion: networking.gke.io/v1
metadata:
  namespace: cluster-cluster1
  name: default
spec:
  floatingIPs:
  - 192.168.1.100
  - 192.168.1.101
  - 192.168.1.102

Operator jaringan lanjutan menetapkan IP mengambang ke Node berdasarkan kriteria berikut:

  • Subnet node: alamat IP mengambang harus cocok dengan subnet Node.
  • Peran node (bidang kontrol, worker): Node pekerja lebih diprioritaskan daripada Node bidang kontrol saat menetapkan alamat IP mengambang.
  • Apakah Node memiliki alamat IP mengambang: operator akan memprioritaskan penetapan ke Node yang belum memiliki IP mengambang yang ditetapkan.

Pemetaan node/alamat dapat ditemukan di bagian status saat Anda mendapatkan objek NetworkGatewayGroup. Perlu diperhatikan bahwa objek NetworkGatewayGroup berada di namespace kube-system. Jika node gateway tidak aktif, operator jaringan lanjutan akan menetapkan alamat IP mengambang ke Node berikutnya yang tersedia.

Memverifikasi konfigurasi gateway

Setelah menerapkan perubahan konfigurasi gateway, Anda dapat menggunakan kubectl untuk memeriksa status gateway dan mengambil alamat IP mengambang yang ditentukan untuk gateway.

  1. Gunakan perintah berikut untuk memeriksa status NetworkGatewayGroup dan melihat bagaimana alamat IP mengambang dialokasikan:

    kubectl -n kube-system get networkgatewaygroups.networking.gke.io default -o yaml
    

    Respons untuk cluster dengan dua node, worker1 dan worker2 mungkin terlihat seperti ini:

    kind: NetworkGatewayGroup
    apiVersion: networking.gke.io/v1
    metadata:
      namespace: kube-system
      name: default
    spec:
      floatingIPs:
      - 192.168.1.100
      - 192.168.1.101
      - 192.168.1.102
    status:
      nodes:
        worker1: Up
        worker2: Up // Or Down
      floatingIPs:
        192.168.1.100: worker1
        192.168.1.101: worker2
        192.168.1.102: worker1
    

Menetapkan aturan pemilihan traffic

Resource kustom EgressNATPolicy menentukan aturan pemilihan traffic dan menetapkan alamat IP deterministik untuk traffic keluar yang keluar dari cluster. Saat menentukan resource kustom, egress (dengan setidaknya satu aturan), destinationCIDRs, dan egressSourceIP wajib ada.

Gunakan kubectl apply untuk membuat resource kustom EgressNATPolicy. Bagian berikut memberikan detail dan contoh untuk menentukan spesifikasi.

Menentukan aturan pemilihan rute keluar

Resource kustom EgressNatPolicy memungkinkan Anda menentukan aturan berikut untuk traffic keluar:

  • Anda harus menentukan satu atau beberapa aturan pemilihan traffic keluar di bagian egress.

    • Setiap aturan terdiri dari podSelector dan namespaceSelector.
    • Pemilihan didasarkan pada label namespace, namespaceSelector.matchLabels.user, dan label Pod, podSelector.matchLabels.role.
    • Jika cocok dengan salah satu aturan (pencocokan menggunakan hubungan ATAU), Pod akan dipilih untuk traffic keluar.
  • Tentukan alamat tujuan yang diizinkan di bagian destinationCIDRs.

    • destinationCIDRs mengambil daftar blok CIDR.
    • Jika traffic keluar dari Pod memiliki alamat IP tujuan yang berada dalam rentang salah satu blok CIDR yang ditentukan, traffic tersebut akan dipilih untuk traffic keluar.

Pada contoh berikut, traffic keluar dari Pod diizinkan jika kriteria berikut terpenuhi:

  • Pod diberi label role: frontend.
  • Pod berada dalam namespace yang diberi label user: alice atau user: paul.
  • Pod berkomunikasi ke alamat IP dalam blok CIDR 8.8.8.0/24.
kind: EgressNATPolicy
apiVersion: networking.gke.io/v1
metadata:
  name: egress
spec:
  sources:
  - namespaceSelector:
      matchLabels:
        user: alice
    podSelector:
      matchLabels:
        role: frontend
  - namespaceSelector:
      matchLabels:
        user: paul
    podSelector:
      matchLabels:
        role: frontend
  action: SNAT
  destinations:
    - cidr: 8.8.8.0/24
  gatewayRef:
    name: default
    namespace: kube-system

Untuk mengetahui informasi selengkapnya tentang penggunaan label, baca Label dan Pemilih dalam dokumentasi Kubernetes.

Mendapatkan alamat IP sumber untuk traffic keluar

Resource kustom EgressNATPolicy (kebijakan) menggunakan nilai gatewayRef.name dan gatewayRef.namespace untuk menemukan objek NetworkGatewayGroup (gateway). Kebijakan ini menggunakan salah satu alamat IP mengambang gateway sebagai alamat IP sumber untuk traffic keluar. Jika ada beberapa alamat IP mengambang dalam gateway yang cocok, kebijakan akan menggunakan alamat IP pertama dalam daftar floatingIPs dan mengabaikan alamat IP lainnya. Untuk contoh gateway, alamat pertama dalam daftar floatingIPs adalah 192.168.1.100. Jika ada kolom atau nilai yang tidak valid di bagian gatewayRef, objek kebijakan akan gagal diterapkan.

Beberapa kebijakan keluar dan beberapa objek gateway

Seperti yang dijelaskan di bagian sebelumnya, setiap objek egressNATPolicy (kebijakan) menggunakan alamat IP pertama dalam daftar floatingIPs dari objek gateway yang cocok dengan gatewayRef.name dan gatewayRef.namespace. Anda dapat membuat beberapa kebijakan, dan jika ingin menggunakan alamat IP yang berbeda, Anda harus membuat beberapa objek NetworkGatewayGroup dan merujuk ke objek tersebut masing-masing.

Setiap resource NetworkGatewayGroup harus berisi alamat IP mengambang yang unik. Untuk mengonfigurasi beberapa objek EgressNATPolicy agar menggunakan alamat IP yang sama, gunakan gatewayRef.name dan gatewayRef.namespace yang sama untuk keduanya.

Untuk menyiapkan beberapa kebijakan keluar dan beberapa objek gateway:

  1. Buat objek gateway dalam namespace kube-system untuk mengelola setiap alamat IP mengambang. Biasanya, setiap kebijakan keluar harus memiliki objek gateway yang sesuai untuk memastikan alamat IP yang benar dialokasikan.

    Kemudian, verifikasi setiap objek gateway dengan kubectl untuk mendapatkan status alokasi alamat IP mengambang:

    kind: NetworkGatewayGroup
    apiVersion: networking.gke.io/v1
    metadata:
      namespace: kube-system
      name: gateway1
    spec:
      floatingIPs:
      - 192.168.1.100
    status:
      ...
      floatingIPs:
        192.168.1.100: worker1
    ---
    kind: NetworkGatewayGroup
    apiVersion: networking.gke.io/v1
    metadata:
      namespace: kube-system
      name: gateway2
    spec:
      floatingIPs:
      - 192.168.1.101
    status:
      ...
      floatingIPs:
        192.168.1.101: worker2
    ---
    kind: NetworkGatewayGroup
    apiVersion: networking.gke.io/v1
    metadata:
      namespace: kube-system
      name: gateway3
    spec:
      floatingIPs:
      - 192.168.1.102
    status:
      ...
      floatingIPs:
        192.168.1.102: worker1
    
  2. Buat beberapa kebijakan yang merujuk ke objek gateway, seperti gateway1 yang dibuat pada langkah sebelumnya:

    kind: EgressNATPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: egress1
    spec:
      ...
      gatewayRef:
        name: gateway1
        namespace: kube-system
    ---
    kind: EgressNATPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: egress2
    spec:
      ...
      gatewayRef:
        name: gateway2
        namespace: kube-system
    ---
    kind: EgressNATPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: egress3
    spec:
      ...
      gatewayRef:
        name: gateway3
        namespace: kube-system
    

(Opsional) Tentukan node untuk menempatkan alamat IP mengambang

Resource NetworkGatewayGroup mendukung pemilih node. Untuk menentukan subset node yang dipertimbangkan untuk menghosting alamat IP mengambang, Anda dapat menambahkan pemilih node ke objek NetworkGatewayGroup seperti yang ditunjukkan pada contoh berikut:

kind: NetworkGatewayGroup
apiVersion: networking.gke.io/v1
metadata:
  namespace: cluster-cluster1
  name: default
spec:
  floatingIPs:
  - 192.168.1.100
  - 192.168.1.101
  - 192.168.1.102
  nodeSelector:
    node-type: "egressNat"

Pemilih node cocok dengan node yang memiliki label yang ditentukan dan hanya node ini yang dipertimbangkan untuk menghosting alamat IP mengambang. Jika Anda menentukan beberapa pemilih, logikanya bersifat aditif, sehingga node harus cocok dengan setiap label agar dipertimbangkan untuk menghosting alamat IP mengambang. Jika jumlah node dengan label yang cocok tidak banyak, pemilih node dapat mengurangi kualitas ketersediaan tinggi (HA) dari penempatan alamat IP mengambang.

Aturan pemilihan traffic keluar dan kebijakan jaringan

Gateway NAT keluar kompatibel dengan API kebijakan jaringan. Kebijakan jaringan dinilai terlebih dahulu dan lebih diutamakan daripada aturan pemilihan traffic gateway NAT keluar. Misalnya, jika traffic keluar memicu kebijakan jaringan yang mengakibatkan paket dihapus, aturan gateway keluar tidak akan memeriksa paket. Aturan pemilihan traffic keluar akan dievaluasi untuk menentukan cara penanganan traffic, baik menggunakan gateway NAT keluar maupun penyamaran langsung dengan alamat IP Node tempat Pod berjalan.

Batasan

Batasan saat ini untuk gateway NAT keluar meliputi:

  • Gateway NAT keluar hanya diaktifkan untuk mode IPv4.

  • Alamat IP keluar harus berada di domain Lapisan 2 yang sama dengan alamat IP Node.

  • Upgrade tidak didukung untuk cluster yang telah dikonfigurasi untuk menggunakan Pratinjau gateway NAT keluar. Untuk Google Distributed Cloud rilis 1.29.0 dan yang lebih baru, gateway keluar NAT hanya ada dalam Pratinjau di Ubuntu 18.04. Penggunaan fitur ini tidak dikenai biaya selama dalam Pratinjau.