Mengonfigurasi gateway NAT keluar

Dokumen ini menjelaskan cara menyiapkan gateway NAT keluar untuk Google Distributed Cloud. Gateway ini menyediakan IP SNAT persisten dan determenistik untuk traffic keluar dari cluster Anda. Saat Anda menjalankan workload yang memiliki traffic pengguna keluar (di luar cluster), pelanggan ingin mengidentifikasi lalu lintas ini dengan menggunakan beberapa alamat IP. Hal ini memungkinkan pelanggan Anda untuk melakukan langkah-langkah keamanan berbasis IP, seperti membuat daftar yang diizinkan kebijakan izin yang relevan.

Gateway NAT keluar diaktifkan menggunakan dua resource kustom. Untuk namespace, resource kustom NetworkGatewayGroup akan menentukan IP mengambang alamat IP yang dapat dikonfigurasi pada antarmuka jaringan dari {i>Node<i} yang dipilih untuk bertindak sebagai {i>gateway<i}. Resource kustom EgressNatPolicy memungkinkan Anda menentukan kebijakan pemilihan rute keluar untuk mengontrol traffic di gateway keluar.

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

Gateway NAT keluar adalah penawaran jaringan canggih yang dibangun di atas Pesawat Data V2.

Cara kerja gateway NAT keluar

Logika pemilihan traffic keluar didasarkan pada pemilih namespace, pemilih Pod, dan kumpulan alamat IP tujuan rentang dalam notasi blok CIDR. Untuk menggambarkan cara kerja {i> egress NAT gateway<i}, mari kita pertimbangkan aliran paket dari Pod ke konsumen eksternal dan respons yang sesuai. Asumsikan subnet Node memiliki alamat IP di 192.168.1.0/24 blok CIDR.

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 dalam 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 merutekan traffic keluar tersebut ke node gateway, alih-alih langsung menyamar dengan Node dengan Alamat IP tertentu

  3. Gateway Node menerima traffic keluar.

  4. Simpul {i>gateway<i} menyamarkan alamat IP sumber lalu lintas asal, 10.10.10.1, dengan alamat IP keluar sumber, 192.168.1.100 ditentukan di resource kustom EgressNATPolicy.

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

  6. Simpul {i>gateway<i} sesuai dengan {i>conntrack<i} dari lalu lintas 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, yang dirutekan ke Node asli, dan dikirimkan kembali ke Pod asli.

Mengonfigurasi alamat IP mengambang untuk traffic Node

Resource kustom Network Gateway Group adalah komponen paket Google Distributed Cloud. Resource mengelola daftar atau lebih alamat IP mengambang yang akan digunakan untuk traffic keluar dari Node di . Node yang berpartisipasi ditentukan berdasarkan namespace yang ditentukan. Tujuan Grup Gateway Jaringan membuat alamat IP mengambang tersedia setiap saat pada upaya terbaik. Jika sebuah Node yang menggunakan alamat IP floating tidak berfungsi, operator jaringan lanjutan 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 cluster file konfigurasi saat Anda membuat cluster 1.29.300--gke.185 baru.

Membuat resource kustom NetworkGatewayGroup

Anda mengaktifkan Grup Gateway Jaringan dengan menyetel Kolom spec.clusterNetwork.advancedNetworking ke true di file konfigurasi cluster saat Anda membuat cluster sebagai yang ditunjukkan dalam 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 menentukan daftar alamat IP mengambang, seperti ditunjukkan di 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 tingkat lanjut 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 diutamakan daripada bidang kontrol saat menetapkan alamat IP mengambang.
  • Apakah Node memiliki alamat IP mengambang: operator akan memprioritaskan yang ditetapkan ke Node yang belum memiliki IP mengambang yang ditetapkan.

Pemetaan node/alamat dapat ditemukan di bagian status saat Anda mendapatkan Objek NetworkGatewayGroup. Perhatikan bahwa objek NetworkGatewayGroup berada dalam namespace kube-system. Jika node gateway tidak aktif, jaringan lanjutan operator 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 akan 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 khusus EgressNATPolicy menentukan aturan pemilihan traffic dan menetapkan alamat IP deterministik untuk traffic keluar yang meninggalkan cluster. Saat menentukan resource kustom, egress (dengan sedikitnya satu aturan), destinationCIDRs, dan egressSourceIP diperlukan.

Gunakan kubectl apply untuk membuat resource kustom EgressNATPolicy. Tujuan di bagian berikut ini 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 egress bagian.

    • Setiap aturan terdiri dari podSelector dan namespaceSelector.
    • Pilihan didasarkan pada label namespace, namespaceSelector.matchLabels.user, dan label Pod, podSelector.matchLabels.role.
    • Jika Pod cocok dengan salah satu aturan (pencocokan menggunakan hubungan ATAU), ini 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 jatuh dalam rentang blok CIDR tertentu, maka dipilih untuk traffic keluar.

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

  • 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 informasi lebih lanjut tentang penggunaan label, lihat Label dan Pemilih dalam dokumentasi Kubernetes.

Mendapatkan alamat IP sumber untuk traffic keluar

Resource kustom EgressNATPolicy (kebijakan) menggunakan gatewayRef.name dan gatewayRef.namespace nilai untuk menemukan objek NetworkGatewayGroup (gateway). Kebijakan ini menggunakan salah satu alamat IP mengambang gateway sebagai IP sumber untuk traffic keluar. Jika ada beberapa alamat IP mengambang pada gateway yang cocok, kebijakan tersebut akan menggunakan alamat IP pertama dalam daftar floatingIPs dan mengabaikan alamat IP lainnya. Untuk example gateway, yang pertama alamat dalam daftar floatingIPs adalah 192.168.1.100. Memiliki {i>field<i} yang tidak valid atau nilai di bagian gatewayRef akan mengakibatkan kegagalan dalam menerapkan kebijakan .

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 Anda ingin menggunakan alamat IP yang berbeda, Anda harus membuat beberapa objek NetworkGatewayGroup dan merujuk ke masing-masing objek tersebut.

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 objek alamat IP mengambang (floating IP). Biasanya, setiap kebijakan keluar harus memiliki objek gateway yang sesuai untuk memastikan alamat IP yang benar dialokasikan.

    Lalu verifikasi setiap objek gateway dengan kubectl untuk mendapatkan status alokasi dari 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 seperti yang dibuat gateway1 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 {i>subset<i} yang dianggap untuk menghosting alamat IP mengambang, Anda dapat menambahkan pemilih node ke objek NetworkGatewayGroup seperti yang ditampilkan di bawah contoh:

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 tertentu dan hanya node node dianggap sebagai {i> hosting<i} alamat IP mengambang. Jika Anda menentukan beberapa pemilih, logikanya adalah aditif, sehingga {i>node<i} harus cocok dengan setiap label dipertimbangkan untuk menghosting alamat IP mengambang. Jika tidak ada banyak {i>node<i} dengan label yang cocok, pemilih node dapat mengurangi kualitas ketersediaan tinggi (HA) penempatan alamat IP mengambang (floating IP address).

Aturan pemilihan traffic keluar dan kebijakan jaringan

Gateway NAT keluar kompatibel dengan API kebijakan jaringan. Kebijakan jaringan akan dinilai terlebih dahulu dan diutamakan daripada aturan pemilihan traffic pada gateway NAT keluar. Misalnya, jika traffic keluar memicu kebijakan jaringan mengakibatkan paket dihapus, aturan {i> egress gateway<i} tidak akan memeriksa paket. Hanya ketika kebijakan jaringan memungkinkan paket untuk keluar, jalur keluar aturan pemilihan traffic dievaluasi untuk menentukan cara penanganan traffic, baik menggunakan gateway NAT keluar atau langsung berkamuflase dengan alamat IP pada Node tempat Pod dijalankan.

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 IP Node untuk alamat internal dan eksternal.

  • Upgrade tidak didukung untuk cluster yang telah dikonfigurasi untuk menggunakan Pratinjau gateway NAT keluar. Sebagai Google Distributed Cloud rilis 1.29.0 dan yang lebih baru, traffic keluar Gateway NAT ada dalam Pratinjau di Ubuntu 18.04 saja. Penggunaan tanpa biaya fitur ini saat berada dalam Pratinjau.