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.
Halaman ini ditujukan untuk spesialis Jaringan{i> <i}yang merancang dan merancang jaringan untuk organisasi mereka, dan menginstal, mengonfigurasi, dan mendukung jaringan peralatan. Untuk mempelajari lebih lanjut tentang peran umum dan contoh tugas yang kami rujuk di konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise yang umum.
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.
Alur paket melalui gateway NAT keluar mungkin terlihat seperti ini:
Traffic keluar dihasilkan dari Pod dengan alamat IP
10.10.10.1
dalam 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 tersebut ke node gateway, alih-alih langsung menyamar dengan Node dengan Alamat IP tertentu
Gateway Node menerima traffic keluar.
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 kustomEgressNATPolicy
.Traffic yang dikembalikan akan kembali ke gateway Node dengan tujuan
192.168.1.100
.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
.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.30.0-gke.1930 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 menetapkan 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.
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
danworker2
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
dannamespaceSelector
. - 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.
- Setiap aturan terdiri dari
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
atauuser: 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,
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 keduanya.
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:
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
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.30.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.