Dokumen ini menjelaskan cara menyiapkan gateway NAT traffic keluar untuk Google Distributed Cloud. Gateway ini menyediakan alamat IP SNAT yang persisten dan deterministik untuk traffic keluar dari cluster Anda. Saat Anda menjalankan beban kerja yang memiliki traffic pengguna keluar (di luar cluster Anda), pelanggan Anda ingin mengidentifikasi traffic ini menggunakan beberapa alamat IP deterministik. Hal ini memungkinkan pelanggan Anda menerapkan langkah-langkah keamanan berbasis IP, seperti kebijakan daftar yang diizinkan.
Halaman ini ditujukan bagi spesialis Jaringan yang mendesain dan membuat arsitektur jaringan untuk organisasi mereka, serta menginstal, mengonfigurasi, dan mendukung peralatan jaringan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten, lihat Peran dan tugas pengguna GKE umum. Google Cloud
Gateway NAT keluar diaktifkan menggunakan dua resource kustom. Untuk namespace
tertentu, resource kustom NetworkGatewayGroup
menentukan alamat IP mengambang
yang dapat dikonfigurasi di antarmuka jaringan Node yang dipilih untuk
bertindak sebagai gateway. Resource kustom EgressNatPolicy
memungkinkan Anda
menentukan kebijakan perutean 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 Anda 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 disamarkan 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 mengilustrasikan cara kerja gateway NAT keluar, mari kita pertimbangkan alur paket dari Pod ke konsumen eksternal dan respons yang sesuai. 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.
Alur paket melalui gateway NAT keluar mungkin terlihat seperti ini:
Traffic keluar dihasilkan dari Pod dengan alamat IP
10.10.10.1
di Node dengan alamat IP192.168.1.1
.Alamat tujuan traffic adalah endpoint di luar cluster.
Jika traffic cocok dengan aturan keluar, program eBPF akan merutekan traffic keluar ke Node gateway, bukan langsung melakukan masquerade dengan alamat IP Node.
Node gateway menerima traffic keluar.
Node gateway menyamarkan alamat IP sumber traffic asal,
10.10.10.1
, dengan alamat IP keluar sumber,192.168.1.100
yang ditentukan dalam resource kustomEgressNATPolicy
.Traffic kembali ke Node gateway dengan tujuan sebagai
192.168.1.100
.Node gateway mencocokkan conntrack traffic kembali dengan traffic keluar asli dan menulis ulang alamat IP tujuan sebagai
10.10.10.1
.10.10.10.1
diperlakukan sebagai traffic dalam cluster, dirutekan ke Node asli, dan dikirim kembali ke Pod asli.
Mengonfigurasi alamat IP floating untuk traffic Node
Resource kustom Network Gateway Group adalah komponen gabungan dari Google Distributed Cloud. Resource mengelola daftar satu atau beberapa alamat IP mengambang untuk digunakan bagi traffic keluar dari Node di cluster Anda. Node yang Berpartisipasi ditentukan oleh namespace yang ditentukan. Grup Gateway Jaringan membuat alamat IP mengambang tersedia 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 beban kerja 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.32.200-gke.104 baru.
Membuat resource kustom NetworkGatewayGroup
Anda mengaktifkan Grup Gateway Jaringan dengan menyetel kolom
spec.clusterNetwork.advancedNetworking
ke true
di 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 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, pekerja): Node pekerja lebih diutamakan 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/node dapat ditemukan di bagian status
saat Anda mendapatkan objek NetworkGatewayGroup
. Perhatikan bahwa objek NetworkGatewayGroup
berada di
namespace kube-system
. Jika node gateway tidak berfungsi, 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 pengalokasian alamat IP mengambang:kubectl -n kube-system get networkgatewaygroups.networking.gke.io default -o yaml
Respons untuk cluster dengan dua node,
worker1
danworker2
, 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 meninggalkan cluster.
Saat menentukan resource kustom, egress
(dengan minimal 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 perutean 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
dannamespaceSelector
. - 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 keluar.
- Setiap aturan terdiri dari
Tentukan alamat tujuan yang diizinkan di bagian
destinationCIDRs
.destinationCIDRs
menggunakan 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.
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: alice
atauuser: 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 Selektor 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 di gateway yang cocok, kebijakan akan menggunakan alamat IP pertama dalam daftar floatingIPs
dan mengabaikan alamat IP lainnya. Untuk
example gateway, alamat
pertama dalam daftar floatingIPs
adalah 192.168.1.100
. Memiliki kolom atau nilai yang tidak valid di bagian gatewayRef
akan mengakibatkan kegagalan penerapan objek 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 perlu 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-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: 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 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 sebuah 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.
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 dihentikan, aturan gateway keluar tidak akan memeriksa paket. Hanya jika kebijakan jaringan mengizinkan paket keluar, aturan pemilihan traffic keluar akan dievaluasi untuk memutuskan cara menangani traffic, baik menggunakan gateway NAT keluar atau langsung melakukan penyamaran 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 Layer 2 yang sama dengan alamat IP Node.