Mengonfigurasi gateway NAT keluar

Dengan Google Distributed Cloud, Anda dapat mengonfigurasi alamat jaringan sumber sehingga traffic keluar tertentu dari cluster pengguna Anda dengan alamat IP sumber yang dapat diprediksi.

Dokumen ini menunjukkan cara mengonfigurasi gateway NAT keluar untuk cluster pengguna.

Pengantar

Terkadang Anda memiliki Pod yang berjalan di cluster pengguna yang perlu mengirim paket ke komponen yang berjalan di organisasi Anda, tetapi di luar cluster. Anda mungkin ingin merancang komponen eksternal tersebut agar menyaring lalu lintas jaringan sesuai dengan serangkaian alamat IP sumber yang sudah dikenal.

Berikut beberapa skenarionya:

  • Anda memiliki {i>firewall<i} di depan {i>database<i} yang mengizinkan akses hanya dengan alamat IP. Dan tim yang mengelola firewall database berbeda dengan tim yang mengelola cluster pengguna.

  • Beban kerja di cluster pengguna Anda harus mengakses API pihak ketiga melalui di Internet. Untuk alasan keamanan, penyedia API mengautentikasi dan memberi otorisasi traffic menggunakan alamat IP sebagai identitas.

Dengan gateway NAT keluar, Anda dapat memiliki kontrol terperinci atas IP sumber alamat yang digunakan untuk traffic jaringan yang keluar dari cluster.

Harga

Penggunaan fitur ini selama pratinjau tidak dikenai biaya.

Cara kerja gateway NAT keluar

Biasanya, saat Pod mengirimkan paket keluar dari cluster, paket tersebut adalah SNAT diterjemahkan dengan alamat IP {i>node<i} tempat Pod berjalan.

Ketika gateway NAT keluar diterapkan, Anda dapat menentukan paket harus dikirim terlebih dahulu ke {i> gateway node<i} khusus. Antarmuka jaringan di node gateway dikonfigurasi dengan dua alamat IP: alamat IP primer dan alamat IP sumber keluar.

Ketika sebuah paket telah dipilih untuk menggunakan gateway NAT keluar, paket tersebut meninggalkan cluster dari node gateway dan SNAT diterjemahkan dengan traffic keluar alamat IP sumber yang dikonfigurasi pada antarmuka jaringan.

Diagram berikut mengilustrasikan alur paket:

Alur paket dengan gateway NAT keluar diterapkan.

Pada diagram sebelumnya, Anda dapat melihat aliran paket yang dikirim dari Pod.

  1. Pada node dengan alamat IP 192.168.1.1, Pod dengan alamat IP 10.10.10.1 menghasilkan paket keluar.

  2. Paket cocok dengan aturan keluar, sehingga paket diteruskan ke gateway {i>node<i}.

  3. {i>Gateway node<i} mengubah alamat IP sumber menjadi 192.168.1.100 dan mengirim paket keluar dari cluster.

  4. Traffic yang dikembalikan akan kembali ke node gateway dengan tujuan 192.168.1.100.

  5. Node gateway menggunakan {i> conntrack<i} untuk mengubah alamat IP tujuan untuk 10.10.10.1.

  6. Paket diperlakukan sebagai traffic dalam cluster dan diteruskan ke paket asli node dan dikirimkan kembali ke Pod asli.

Persona

Topik ini mengacu pada dua persona:

  • Administrator cluster. Orang ini membuat cluster pengguna dan menentukan alamat IP mengambang yang akan digunakan oleh Anthos Network Gateway.

  • Developer. Orang ini menjalankan workload di cluster pengguna dan membuat kebijakan traffic keluar.

Aktifkan gateway NAT keluar

Bagian ini ditujukan untuk administrator cluster.

Untuk mengonfigurasi gateway NAT keluar, gunakan kolom enableDataplaneV2 dan advancedNetworking di file konfigurasi cluster pengguna, lalu buat satu atau beberapa objek NetworkGatewayGroup.

Di file konfigurasi cluster Anda, tetapkan kolom ini ke true:

enableDataplaneV2: true
...
advancedNetworking: true

Buat cluster pengguna.

Menentukan alamat IP mengambang

Bagian ini ditujukan untuk administrator cluster.

Pilih sekumpulan alamat IP yang ingin Anda gunakan sebagai sumber traffic keluar untuk alamat internal dan eksternal. Ini disebut alamat IP mengambang, karena Jaringan Gateway Group menugaskan mereka, sesuai kebutuhan, ke antarmuka jaringan dari {i>node<i} yang memilih untuk menjadi gateway keluar.

Alamat IP mengambang harus berada dalam subnet yang sama dengan alamat IP node Anda.

Kumpulan alamat IP mengambang tidak boleh tumpang-tindih dengan kumpulan alamat IP yang telah Anda tentukan untuk node.

Misalnya, subnet memiliki rentang alamat 192.168.1.0/24. Dan anggaplah Anda telah memilih untuk menggunakan 192.168.1.1 hingga 192.168.1.99 untuk {i>node<i}. Kemudian Anda dapat menggunakan 192.168.1.100 hingga 192.168.1.104 sebagai alamat IP mengambang.

Membuat objek NetworkGatewayGroup

Bagian ini ditujukan untuk administrator cluster.

Berikut adalah contoh manifes untuk objek NetworkGatewayGroup:

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
  - 192.168.1.103
  - 192.168.1.104

Ganti array floatingIPs dengan alamat IP mengambang Anda, lalu simpan manifes dalam file bernama my-ngg.yaml.

Buat objek NetworkGatewayGroup:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-ngg.yaml

Contoh kebijakan NAT keluar

Bagian ini ditujukan untuk developer.

Berikut adalah contoh resource kustom EgressNatPolicy:

kind: EgressNATPolicy
apiVersion: networking.gke.io/v1
metadata:
  name: alice-paul
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

Dalam manifes sebelumnya, kita melihat:

  • Pod merupakan kandidat untuk NAT keluar jika memenuhi salah satu hal berikut:

    • Pod memiliki label role: frontend, dan Pod berada dalam namespace yang memiliki dengan label user: alice.

    • Pod memiliki label role: frontend, dan Pod berada dalam namespace yang memiliki dengan label user: paul.

  • Traffic dari Pod kandidat ke alamat dalam rentang 8.8.8.0/24 dikirim ke gateway NAT keluar.

  • Bagian gatewayRef menentukan alamat IP sumber keluar. Resource kustom EgressNATPolicy menggunakan nilai gatewayRef.name dan gatewayRef.namespace untuk menemukan objek NetworkGatewayGroup. Kebijakan ini menggunakan salah satu alamat IP mengambang NetworkGatewayGroup sebagai alamat IP sumber untuk traffic keluar. Jika ada beberapa alamat IP mengambang di NetworkGatewayGroup yang cocok, kebijakan akan menggunakan alamat IP pertama dalam daftar floatingIPs, dan mengabaikan alamat IP lainnya. Jika ada kolom yang tidak valid di bagian gatewayRef, hal ini akan menyebabkan kegagalan penerapan objek EgressNATPolicy.

Membuat objek EgressNATPolicy

Membuat manifes EgressNATPolicy Anda sendiri. Tetapkan metadata.name ke "my-policy". Simpan manifes Anda dalam file bernama my-policy.yaml.

Buat objek EgressNatPolicy:

kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f my-policy.yaml

Melihat informasi tentang kebijakan NAT keluar Anda

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get egressnatpolicy my-policy --output yaml

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get networkgatewaygroup --namespace kube-system --output yaml

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG describe egressnatpolicy my-policy

Urutan operasi ({i>Order of operations<i})

Kebijakan NAT keluar kompatibel dengan API kebijakan jaringan. Kebijakan jaringan adalah dievaluasi sebelum kebijakan NAT keluar. Jika kebijakan jaringan mengatakan untuk meninggalkan paket, paket tersebut dibuang terlepas dari kebijakan NAT keluar.

Kebijakan multi-traffic keluar

Seperti yang dijelaskan sebelumnya, setiap EgressNATPolicy menggunakan alamat IP pertama dalam daftar floatingIPs dari NetworkGatewayGroup yang cocok dengan gatewayRef.name dan gatewayRef.namespace. Jika membuat beberapa kebijakan dan ingin menggunakan alamat IP yang berbeda, Anda harus membuat beberapa objek NetworkGatewayGroup, dan merujuk ke objek tersebut. Jika Anda membuat beberapa kebijakan, objek gatewayRef untuk setiap kebijakan harus unik.

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: egresspolicy1
    spec:
      ...
      gatewayRef:
        name: gateway1
        namespace: kube-system
    ---
    kind: EgressNATPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: egresspolicy2
    spec:
      ...
      gatewayRef:
        name: gateway2
        namespace: kube-system
    ---
    kind: EgressNATPolicy
    apiVersion: networking.gke.io/v1
    metadata:
      name: egresspolicy3
    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, jadi {i>node<i} harus cocok dengan setiap label agar 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).