Dengan Google Distributed Cloud, Anda dapat mengonfigurasi penafsiran alamat jaringan sumber (SNAT) sehingga traffic keluar tertentu dari cluster pengguna Anda diberi 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 mendesain komponen eksternal tersebut sehingga memfilter traffic jaringan masuk sesuai dengan serangkaian alamat IP sumber yang sudah dikenal.
Berikut beberapa skenarionya:
Anda memiliki firewall di depan database yang hanya mengizinkan akses berdasarkan alamat IP. Selain itu, tim yang mengelola firewall database berbeda dengan tim yang mengelola cluster pengguna.
Workload di cluster pengguna Anda harus mengakses API pihak ketiga melalui internet. Untuk alasan keamanan, penyedia API mengautentikasi dan mengotorisasi traffic dengan menggunakan alamat IP sebagai identitas.
Dengan gateway NAT keluar, Anda dapat mengontrol alamat IP sumber yang digunakan untuk traffic jaringan yang keluar dari cluster secara terperinci.
Harga
Penggunaan fitur ini tidak dikenai biaya selama pratinjau.
Cara kerja gateway NAT keluar
Biasanya, saat Pod mengirim paket keluar dari cluster, paket tersebut akan diterjemahkan SNAT dengan alamat IP node tempat Pod berjalan.
Jika gateway NAT keluar sudah ada, Anda dapat menentukan bahwa paket keluar tertentu harus dikirim terlebih dahulu ke node gateway khusus. Antarmuka jaringan di node gateway dikonfigurasi dengan dua alamat IP: alamat IP utama dan alamat IP sumber keluar.
Saat paket telah dipilih untuk menggunakan gateway NAT keluar, paket akan keluar dari cluster dari node gateway dan diterjemahkan SNAT dengan alamat IP sumber keluar yang dikonfigurasi di antarmuka jaringan.
Diagram berikut menggambarkan alur paket:
Pada diagram sebelumnya, Anda dapat melihat alur paket yang dikirim dari Pod.
Di node dengan alamat IP 192.168.1.1, Pod dengan alamat IP 10.10.10.1 membuat paket keluar.
Paket cocok dengan aturan keluar, sehingga paket diteruskan ke node gateway.
Node gateway mengubah alamat IP sumber menjadi 192.168.1.100 dan mengirim paket keluar dari cluster.
Traffic kembali ke node gateway dengan tujuan 192.168.1.100.
Node gateway menggunakan conntrack untuk mengubah alamat IP tujuan menjadi 10.10.10.1.
Paket diperlakukan sebagai traffic dalam cluster dan diteruskan ke node asli serta dikirim 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 beban kerja di cluster pengguna dan membuat kebijakan keluar.
Aktifkan gateway NAT keluar
Bagian ini ditujukan untuk administrator cluster.
Untuk mengonfigurasi gateway NAT keluar, gunakan kolom enableDataplaneV2
dan advancedNetworking
dalam 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
Menentukan alamat IP floating
Bagian ini ditujukan untuk administrator cluster.
Pilih sekumpulan alamat IP yang ingin Anda gunakan sebagai alamat sumber keluar. Alamat ini disebut alamat IP mengambang, karena Network Gateway Group menetapkannya, sesuai kebutuhan, ke antarmuka jaringan node yang dipilihnya sebagai gateway keluar.
Alamat IP mengambang Anda harus berada di subnet yang sama dengan alamat IP node Anda.
Kumpulan alamat IP mengambang Anda tidak boleh tumpang-tindih dengan kumpulan alamat IP yang telah Anda tentukan untuk node Anda.
Misalnya, anggaplah subnet memiliki rentang alamat 192.168.1.0/24. Misalkan Anda telah memilih untuk menggunakan 192.168.1.1 hingga 192.168.1.99 untuk node. 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, dan 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 adalah kandidat untuk NAT keluar jika memenuhi salah satu hal berikut:
Pod memiliki label
role: frontend
, dan Pod berada di namespace yang memiliki labeluser: alice
.Pod memiliki label
role: frontend
, dan Pod berada di namespace yang memiliki labeluser: 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 nilaigatewayRef.name
dangatewayRef.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 daftarfloatingIPs
, dan mengabaikan alamat IP lainnya. Jika ada kolom yang tidak valid di bagiangatewayRef
, hal ini akan menyebabkan kegagalan penerapan objek EgressNATPolicy.
Buat objek EgressNATPolicy
Buat 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
Kebijakan NAT Keluar kompatibel dengan API kebijakan jaringan. Kebijakan jaringan dievaluasi sebelum kebijakan NAT keluar. Jika kebijakan jaringan mengatakan untuk menghapus paket, paket akan dihapus terlepas dari kebijakan NAT keluar.
Beberapa kebijakan 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 Anda membuat beberapa kebijakan dan ingin menggunakan alamat IP yang berbeda, Anda harus membuat beberapa objek NetworkGatewayGroup, dan merujuknya masing-masing. Jika Anda membuat beberapa kebijakan, objek gatewayRef
harus unik untuk setiap kebijakan.
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 egress dan beberapa objek gateway:
Buat objek gateway di 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
Buat beberapa kebijakan yang merujuk ke objek gateway, seperti
gateway1
yang dibuat 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 floating
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 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
nodeSelector:
node-type: "egressNat"
Pemilih node cocok dengan node yang memiliki label tertentu 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 dapat dipertimbangkan untuk menghosting alamat IP mengambang. Jika tidak banyak node dengan label yang cocok, pemilih node dapat mengurangi kualitas ketersediaan tinggi (HA) penempatan alamat IP mengambang.