Gateway NAT egress di Google Distributed Cloud memungkinkan Anda menetapkan alamat IP SNAT yang persisten dan deterministik ke traffic keluar dari cluster Anda. Dengan alamat sumber yang dapat diprediksi, jaringan eksternal dapat menerapkan langkah-langkah keamanan berbasis IP, seperti kebijakan daftar yang diizinkan. Gateway NAT egress adalah fitur jaringan lanjutan yang dibangun di Dataplane V2.
Cara kerja gateway NAT egress
Gateway NAT egress 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 memungkinkan Anda
menentukan kebijakan perutean egress untuk mengontrol traffic di gateway egress.
Jika Anda tidak menyiapkan gateway NAT egress, atau jika traffic egress tidak memenuhi aturan pemilihan traffic, traffic egress dari Pod tertentu ke tujuan di luar cluster Anda akan disamarkan ke alamat IP node tempat Pod berjalan. Dalam skenario ini, tidak ada jaminan bahwa semua traffic egress dari Pod tertentu akan memiliki alamat IP sumber yang sama atau akan disamarkan ke alamat IP Node yang sama.
Logika pemilihan traffic egress didasarkan pada pemilih namespace, pemilih Pod, dan kumpulan rentang alamat IP tujuan dalam notasi blok CIDR. Untuk mengilustrasikan cara kerja gateway NAT egress, pertimbangkan alur paket dari Pod ke konsumen eksternal dan respons yang sesuai. Asumsikan subnet Node memiliki alamat IP di blok CIDR 192.168.1.0/24.
Diagram berikut menunjukkan arsitektur jaringan untuk traffic egress melalui node gateway.
Aliran paket melalui gateway NAT egress mungkin terlihat seperti ini:
Traffic egress dihasilkan dari Pod dengan alamat IP
10.10.10.1di Node dengan alamat IP192.168.1.1.Alamat tujuan traffic adalah endpoint di luar cluster.
Jika traffic cocok dengan aturan egress, program eBPF akan merutekan traffic egress ke Node gateway, bukan langsung menyamar dengan alamat IP Node.
Node gateway menerima traffic keluar.
Node gateway menyamarkan alamat IP sumber traffic asal,
10.10.10.1, dengan alamat IP egress sumber,192.168.1.100yang ditentukan dalam resource kustomEgressNATPolicy.Traffic kembali ke Node gateway dengan tujuan sebagai
192.168.1.100.Node gateway mencocokkan conntrack traffic kembali dengan traffic egress asli dan menulis ulang alamat IP tujuan sebagai
10.10.10.1.10.10.10.1diperlakukan sebagai traffic dalam cluster, dirutekan ke Node asli, dan dikirim kembali ke Pod asli.
Sebelum memulai
Jika node Anda menjalankan Ubuntu 18.04, kernel Linux harus versi 5.4 atau yang lebih tinggi. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi Ubuntu.
Mengonfigurasi alamat IP floating 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 oleh namespace yang ditentukan. Grup Gateway Jaringan menyediakan alamat IP mengambang setiap saat berdasarkan upaya terbaik. Jika Node yang menggunakan alamat IP mengambang tidak aktif, operator jaringan lanjutan akan memindahkan alamat IP yang ditetapkan ke Node berikutnya yang tersedia. Semua traffic egress workload yang menggunakan alamat IP tersebut juga akan dipindahkan.
Sertakan detail Grup Gateway Jaringan (anotasi dan spesifikasi) dalam file konfigurasi cluster saat Anda membuat cluster 1.36.200-gke.118 baru.
Membuat resource kustom NetworkGatewayGroup
Anda dapat mengaktifkan Network Gateway Group dengan menetapkan kolom spec.clusterNetwork.advancedNetworking ke true dalam file konfigurasi cluster saat membuat cluster seperti 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 tentukan daftar alamat IP mengambang, 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
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 worker lebih diprioritaskan daripada Node bidang kontrol saat menetapkan alamat IP mengambang.
- Apakah Node memiliki alamat IP mengambang: operator memprioritaskan penetapan ke Node yang belum memiliki IP mengambang yang ditetapkan.
Pemetaan alamat ke node dapat ditemukan di bagian status saat Anda mendapatkan objek NetworkGatewayGroup. Perhatikan 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.
Gunakan perintah berikut untuk memeriksa status NetworkGatewayGroup
dan melihat cara alamat IP mengambang dialokasikan:
kubectl -n kube-system get networkgatewaygroups.networking.gke.io default -o yamlRespons 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 egress yang keluar dari cluster.
Saat menentukan resource kustom, egress (dengan setidaknya satu aturan),
destinationCIDRs, dan egressSourceIP semuanya diperlukan.
Gunakan kubectl apply untuk membuat resource kustom EgressNATPolicy. Bagian berikut memberikan detail dan contoh untuk menentukan spesifikasi.
Menentukan aturan pemilihan rute egress
Resource kustom EgressNatPolicy memungkinkan Anda menentukan aturan berikut untuk traffic egress:
Anda harus menentukan satu atau beberapa aturan pemilihan traffic egress di bagian
egress.- Setiap aturan terdiri dari
podSelectordannamespaceSelector. - Pemilihan didasarkan pada label namespace,
namespaceSelector.matchLabels.user, dan label Pod,podSelector.matchLabels.role. - Jika Pod cocok dengan salah satu aturan (pencocokan menggunakan hubungan OR), Pod tersebut akan dipilih untuk traffic egress.
- Setiap aturan terdiri dari
Tentukan alamat tujuan yang diizinkan di bagian
destinationCIDRs.destinationCIDRsmenggunakan daftar blok CIDR.- Jika traffic keluar dari Pod memiliki alamat IP tujuan yang termasuk dalam rentang blok CIDR yang ditentukan, traffic tersebut akan dipilih untuk traffic egress.
Dalam contoh berikut, traffic keluar dari Pod diizinkan jika kriteria berikut terpenuhi:
- Pod diberi label dengan
role: frontend. - Pod berada di namespace yang diberi label
user: aliceatauuser: paul. - Pod berkomunikasi dengan alamat IP di 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, lihat Label dan Pemilih dalam dokumentasi Kubernetes.
Mendapatkan alamat IP sumber untuk traffic egress
Resource kustom (kebijakan) EgressNATPolicy 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 di gateway yang cocok, kebijakan akan menggunakan alamat IP pertama dalam daftar floatingIPs dan mengabaikan alamat IP lainnya. Untuk
gateway contoh, alamat
pertama dalam daftar floatingIPs adalah 192.168.1.100. Memiliki kolom atau nilai yang tidak valid di bagian gatewayRef akan mengakibatkan kegagalan dalam menerapkan objek kebijakan.
Beberapa kebijakan egress 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 merujuknya 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 egress dan beberapa objek gateway:
Buat objek gateway di namespace
kube-systemuntuk mengelola setiap alamat IP mengambang. Biasanya, setiap kebijakan egress harus memiliki objek gateway yang sesuai untuk memastikan alamat IP yang benar dialokasikan.Kemudian, verifikasi setiap objek gateway dengan
kubectluntuk 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: worker1Buat beberapa kebijakan yang merujuk ke objek gateway, seperti
gateway1yang 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) Menentukan 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 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 dapat dipertimbangkan untuk menghosting alamat IP mengambang. Jika tidak ada banyak node dengan label yang cocok, pemilih node dapat mengurangi kualitas ketersediaan tinggi (HA) penempatan alamat IP mengambang.
Failover cepat untuk gateway NAT egress dengan ketersediaan tinggi
Untuk cluster versi 1.34 dan yang lebih tinggi, Anda dapat mengonfigurasi gateway NAT egress dengan failover cepat. Jika Anda memiliki beberapa alamat IP mengambang dan mengonfigurasi failover cepat, alamat IP tersebut akan memberikan egress ketersediaan tinggi. Fitur ini memberikan distribusi beban yang lebih baik untuk traffic egress dan failover yang lebih cepat untuk meminimalkan periode nonaktif. Alih-alih mengandalkan satu node gateway pada satu waktu (aktif-standby), cluster mendistribusikan traffic keluar di beberapa node gateway dan semua alamat IP mengambang yang dikonfigurasi dalam resourceNetworkGatewayGroup.
Model aktif-aktif ini memiliki manfaat utama berikut:
Distribusi Beban: Traffic keluar dari berbagai endpoint sumber, seperti Pod, tersebar di semua node gateway yang tersedia, sehingga mengurangi beban pada satu node dan meningkatkan total bandwidth egress yang tersedia.
Failover Cepat: Jika node gateway egress gagal, traffic akan otomatis dialihkan ke node responsif yang tersisa. Tujuannya adalah agar failover traffic dapat dilakukan dengan cepat. Meskipun koneksi yang ada di node yang gagal terputus, koneksi baru akan segera dibuat melalui gateway lain, sehingga meminimalkan periode nonaktif.
Perbedaan utama
Mengonfigurasi gateway NAT egress untuk failover cepat akan mengubah cara kerja gateway NAT egress:
| Kemampuan | Aktif-standby (default) | Aktif-aktif (failover cepat) |
|---|---|---|
| Penggunaan IP mengambang | EgressNATPolicy hanya menggunakan alamat IP mengambang pertama di NetworkGatewayGroup. |
Semua alamat IP mengambang yang tercantum dalam
NetworkGatewayGroup secara aktif mendistribusikan traffic
egress. |
| Failover | Jika node gateway gagal, alamat IP mengambang yang sama akan berpindah ke node yang berbeda, yang dapat menyebabkan gangguan traffic. | Jika node gateway gagal, traffic akan dialihkan ke alamat IP lain yang responsif di node lain. Koneksi baru akan segera dirutekan melalui gateway yang responsif, sedangkan koneksi stateful yang ada di node yang gagal akan dihentikan. |
| Traffic | Semua traffic untuk kebijakan tertentu melewati satu node gateway. | Traffic didistribusikan ke beberapa node gateway berdasarkan hashing yang konsisten dari endpoint sumber, seperti Pod. |
Mengonfigurasi failover cepat
Mengonfigurasi fitur ini melibatkan dua langkah utama:
Menentukan beberapa alamat IP floating.
Konfigurasi
NetworkGatewayGroupdengan kumpulan minimal dua alamat IP mengambang untuk mendapatkan manfaat ketersediaan tinggi dan distribusi beban. Menggunakan lebih banyak alamat IP mengambang akan meningkatkan keandalan dan throughput egress.Berikut adalah contoh konfigurasi:
apiVersion: networking.gke.io/v1 kind: NetworkGatewayGroup metadata: name: egress-gateways namespace: cluster-admin spec: nodeSelector: # Selects nodes that are designated as egress gateways node-role.kubernetes.io/egress: "" floatingIPs: - "192.168.1.100" - "192.168.1.101" - "192.168.1.102"Untuk mengaktifkan failover cepat, tambahkan anotasi
networking.gke.io/egressnat-ha: "enable"ke resource kustomEgressNATPolicy:kind: EgressNATPolicy apiVersion: networking.gke.io/v1 metadata: name: egress annotations: networking.gke.io/egressnat-ha: "enable" spec: ...
Aturan pemilihan traffic egress dan kebijakan jaringan
Gateway NAT egress kompatibel dengan API kebijakan jaringan. Kebijakan jaringan dinilai terlebih dahulu dan lebih diprioritaskan daripada aturan pemilihan traffic gateway NAT traffic keluar. Misalnya, jika traffic keluar memicu kebijakan jaringan yang mengakibatkan paket dihapus, aturan gateway traffic keluar tidak akan memeriksa paket tersebut. Hanya jika kebijakan jaringan mengizinkan paket untuk keluar, aturan pemilihan traffic keluar akan dievaluasi untuk memutuskan cara penanganan traffic, baik menggunakan gateway NAT keluar atau langsung menyamar dengan alamat IP Node tempat Pod berjalan.
Batasan
Batasan saat ini untuk gateway NAT egress meliputi:
Gateway NAT egress hanya diaktifkan untuk mode IPv4.
Alamat IP egress harus berada di domain Lapisan 2 yang sama dengan alamat IP Node.
Jika Anda mengonfigurasi load balancing BGP standar bersama NAT Egress dan menggunakan GKE On-Prem API untuk mengelola cluster (dengan Terraform, konsol Google Cloud , atau
gcloudCLI), pemilih peer BGP tidak didukung. Kurangnya dukungan ini dapat menyebabkan sesi BGP menggunakan IP lokal yang salah secara acak untuk melakukan peering, sehingga menyebabkan kegagalan peering BGP. Untuk solusinya, lihat Mengonfigurasi load balancer yang dipaketkan dengan BGP: Batasan Pemilih BGP.