Halaman ini menunjukkan cara menerapkan alamat IP persisten di Pod Google Kubernetes Engine (GKE). Anda dapat mengontrol jaringan Pod GKE dengan pemetaan alamat IP persisten kustom. Untuk mempelajari alamat IP persisten, kasus penggunaan, dan manfaatnya lebih lanjut, lihat Tentang alamat IP persisten untuk Pod GKE.
Persyaratan
- GKE versi 1.29 atau yang lebih baru.
- Pilih antara mencadangkan alamat IP yang disediakan Google (alamat IP yang disediakan Google) atau membawa alamat IP Anda sendiri (BYOIP).
- Konfigurasikan aplikasi Anda yang berjalan dalam Pod untuk mengenali dan menggunakan alamat IP persisten yang ditetapkan.
- Alamat IP persisten untuk Pod GKE memerlukan GKE Dataplane V2 dan cluster yang mengaktifkan multi-jaringan.
Batasan
- Jaringan default tidak mendukung alamat IP Persisten. Anda harus mengaktifkan multi-jaringan selama pembuatan cluster.
- Konfigurasikan aplikasi Anda untuk menggunakan alamat IP persisten yang ditetapkan. GKE tidak otomatis menambahkan konfigurasi alamat IP ke antarmuka jaringan Pod.
- Anda dapat mengaitkan setiap alamat IP persisten dengan satu Pod dalam satu waktu.
Jika Anda memiliki beberapa Pod yang tersedia, GKE biasanya mengirimkan traffic ke Pod terbaru. Namun, GKE hanya melakukannya jika
Pod terbaru dalam kondisi baik, yang berarti Pod memiliki status kondisi
Ready
sebagaiTrue
secara default. Anda dapat mengonfigurasi perilaku ini dan mengubahnya menggunakan setelanreactionMode
diGKEIPRoute
. - GKE hanya mendukung alamat IPv4 sebagai alamat IP persisten.
- GKE hanya mendukung multi-jaringan jenis Lapisan 3 atau Perangkat untuk alamat IP persisten.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Baca tentang alamat IP.
Tinjau persyaratan dan batasan.
Harga
Fitur Network Function Optimizer (NFO) berikut hanya didukung di cluster yang berada dalam Project yang diaktifkan dengan GKE Enterprise:
- Dukungan multi-jaringan untuk Pod
- Dukungan alamat IP persisten untuk Pod (Pratinjau)
- Kebijakan jaringan multi-jaringan (Pratinjau)
- Dukungan Service Steering untuk Pod (Pratinjau)
Untuk memahami tagihan yang berlaku untuk mengaktifkan edisi Google Kubernetes Engine (GKE) Enterprise, lihat Harga GKE Enterprise.
Mengimplementasikan alamat IP persisten untuk Pod GKE
Alamat IP persisten di GKE menawarkan cara untuk memberi Pod Anda identitas jaringan yang stabil, meskipun Pod itu sendiri diupdate atau dipindahkan.
Bagian ini merangkum alur kerja untuk menerapkan alamat IP persisten untuk Pod GKE:
- Buat cluster: Buat cluster yang mengaktifkan Gateway API, GKE Dataplane V2, dan multi-jaringan.
- Mencadangkan alamat IP: Tentukan apakah Anda memerlukan alamat IP eksternal (dapat diakses secara publik) atau internal (khusus Google Cloud) dan cadangkan alamat tersebut. Pilih region yang sama dengan cluster GKE Anda.
- Membuat Gateway: Konfigurasikan objek Kubernetes Gateway yang menyimpan alamat IP persisten yang Anda cadangkan dan memungkinkan Anda membuat aturan (
GKEIPRoutes
) tentang Pod mana di cluster yang dapat menggunakan alamat IP persisten tersebut. - Buat atau identifikasi beban kerja dengan jaringan tambahan untuk alamat IP persisten: Siapkan Pod untuk menggunakan alamat IP persisten dengan mengaktifkan beberapa antarmuka jaringan dan menentukan jaringan tempat alamat IP persisten berada.
- Buat objek GKEIPRoute untuk workload yang dipilih: Konfigurasikan
GKEIPRoute
untuk menetapkan alamat IP persisten ke Pod tertentu. Anda dapat menggunakan label untuk menargetkan Pod yang tepat dan dapat secara opsional mengonfigurasi cara pemilihan rute merespons perubahan Pod. - Mengonfigurasi pengetahuan aplikasi: Konfigurasikan aplikasi Anda dalam Pod untuk secara aktif menggunakan alamat IP persisten.
- Pemantauan: Melacak status Gateway dan objek
GKEIPRoute
untuk memastikan semuanya berfungsi seperti yang diharapkan.
Untuk menerapkan alamat IP persisten untuk Pod GKE, lakukan langkah-langkah berikut:
Langkah 1: Buat cluster GKE Dataplane V2 dan cluster GKE yang mengaktifkan multi-jaringan
Untuk mengaktifkan kemampuan perutean jaringan lanjutan dan pengelolaan alamat IP yang diperlukan untuk menerapkan alamat IP persisten di Pod GKE, Anda harus create cluster GKE Dataplane V2 dan multi-jaringan yang diaktifkan.
Langkah 2: Pesan alamat IP persisten
Untuk membuat identitas jaringan yang andal bagi Pod dan menyiapkan alamat IP persisten, Anda harus mendapatkan alamat IP persisten terlebih dahulu. Anda dapat memilih antara mencadangkan alamat IP yang disediakan Google atau menggunakan alamat IP Anda sendiri (BYOIP).
Langkah 2a: Reservasi alamat IP yang disediakan Google
Untuk mencadangkan alamat IP eksternal, jalankan perintah berikut:
gcloud compute addresses create ADDRESS_NAME \
--region=REGION
Ganti kode berikut:
ADDRESS_NAME
: nama yang ingin Anda kaitkan dengan alamat ini.REGION
: region tempat Anda ingin mencadangkan alamat ini. Region ini harus berupa region yang sama dengan Pod yang ingin Anda lampirkan alamat IP-nya.Catatan: Anda harus menentukan wilayah saat mencadangkan alamat IP karena aturan penerusan, yang menangani pemilihan rute traffic untuk alamat IP persisten, bersifat regional. Alamat IP dan cluster GKE Anda harus berada di region yang sama agar perutean berfungsi dengan benar.
Untuk mencadangkan alamat IP internal, jalankan perintah berikut:
gcloud compute addresses create ADDRESS_NAME \
--region REGION
--subnet SUBNETWORK \
--addresses IP_ADDRESS
Ganti kode berikut:
ADDRESS_NAME
: nama satu atau beberapa alamat yang ingin Anda cadangkan. Jika terdapat beberapa alamat, tentukan semua alamat sebagai daftar, yang dipisahkan dengan spasi. Misalnya, example-address-1 example-address-2 example-address-3REGION
: region untuk permintaan ini.SUBNETWORK
: subnet untuk alamat IPv4 internal ini.
Untuk memastikan traffic dirutekan dengan benar dalam jaringan pribadi Anda, alamat IP internal harus termasuk dalam subnet yang ditetapkan.
Untuk mengetahui informasi selengkapnya tentang alamat IP eksternal dan internal, lihat Mencadangkan alamat IP eksternal statis dan Mencadangkan alamat IP internal statis.
Langkah 2b: Bring your own IP address (BYOIP)
Anda dapat menggunakan alamat IP Anda sendiri (BYOIP), bukan mengandalkan alamat IP yang disediakan Google. BYOIP berguna jika Anda memerlukan alamat IP tertentu untuk aplikasi atau memindahkan sistem yang ada ke Google Cloud. Untuk menggunakan BYOIP, Google memvalidasi bahwa Anda adalah pemilik rentang alamat IP tersebut, dan setelah alamat IP diimpor ke Google Cloud, Anda dapat menetapkannya sebagai alamat IP permanen untuk Pod GKE. Untuk mengetahui informasi selengkapnya, lihat Menggunakan alamat IP Anda sendiri (BYOL).
Langkah 3: Buat objek Gateway
Objek gateway menyimpan alamat IP dan menentukan Pod mana yang memenuhi syarat untuk menggunakannya. Untuk mengontrol cara alamat IP persisten ditetapkan ke Pod GKE, Anda akan menggunakan objek Gateway.
- Buat objek Kubernetes Gateway dari class yang sesuai:
gke-persistent-regional-external-managed
untuk alamat IP eksternal (publik).gke-persistent-regional-internal-managed
untuk alamat IP internal (khusus Google Cloud).
- Dalam bagian alamat Gateway, cantumkan alamat IP persisten (disediakan Google atau BYOIP) yang dikelola Gateway ini.
Gunakan bagian
Listeners
untuk menentukan Pod mana (dan objekGKEIPRoute
terkait) yang berpotensi dapat menggunakan alamat IP Gateway.Listeners
berfungsi sebagai filter berdasarkan namespace GKEIPRoute tempat objekGKEIPRoute
berada.Anda dapat memilih dari opsi pemilihan namespace Kubernetes berikut:
- Semua Namespace:
GKEIPRoute
apa pun di cluster. - Selector:
GKEIPRoute
di namespace GKEIPRoute yang cocok dengan label tertentu. - Namespace yang Sama: Hanya
GKEIPRoutes
dalam namespace GKEIPRoute yang sama dengan Gateway.
- Semua Namespace:
Contoh berikut memberikan akses di seluruh cluster ke alamat IP persisten eksternal, sehingga Pod apa pun dapat menggunakannya.
Simpan manifes contoh berikut sebagai allowed-pod-ips.yaml
:
kind: Gateway
apiVersion: gateway.networking.k8s.io/v1beta1
metadata:
namespace: default
name: allowed-pod-ips
spec:
gatewayClassName: gke-persistent-regional-external-managed
listeners:
- name: default
port: 443
protocol: none
allowedRoutes:
namespaces:
from: All
addresses:
- value: "34.123.10.1/32"
type: "gke.networking.io/cidr"
- value: "34.123.10.2/32"
type: "gke.networking.io/cidr"
dengan:
- addresses: mencantumkan semua alamat IP yang izinnya dikelola oleh Gateway tertentu.
- pemroses: digunakan untuk mengidentifikasi namespace tempat objek
GKEIPRoute
dapat mereferensikan Gateway ini.
Terapkan manifes ke cluster:
kubectl apply -f allowed-pod-ips.yaml
Langkah 4: Buat atau identifikasi beban kerja dengan jaringan tambahan untuk alamat IP persisten
Siapkan Pod multi-jaringan dan buat objek jaringan yang menunjukkan jaringan tempat alamat IP persisten berada.
Langkah 5: Buat objek GKEIPRoute
untuk beban kerja yang dipilih
Untuk menetapkan alamat IP persisten ke Pod yang dipilih, buat objek GKEIPRoute
.
Simpan manifes contoh berikut sebagai my-ip-route.yaml
:
kind: GKEIPRoute
apiVersion: networking.gke.io/v1
metadata:
namespace: default
name: my-ip-route
spec:
parentRefs:
- name: allowed-pod-ips
namespace: default
addresses:
- value: "34.123.10.1/32"
type: "gke.networking.io/cidr"
network: blue-network
reactionMode: ReadyCondition
podSelector: # Only one pod is selected.
matchLabels:
component: proxy
dengan:
- parentRefs: mengarah ke Gateway tempat alamat IP persisten digunakan. Kolom ini tidak dapat diubah.
- addresses: mencantumkan semua alamat IP persisten yang dirutekan ke Pod yang diidentifikasi dengan
podSelector
. Kolom ini dapat diubah. Untuk IPv4, hanya alamat /32 yang didukung. - podSelector: menentukan label yang mengidentifikasi Pod tempat alamat IP
persisten dirutekan. Kolom ini dapat diubah dan berlaku untuk namespace
yang sama tempat
GKEIPRoute
ditempatkan. Jika Anda memilih beberapa Pod, dua faktor tambahan akan dipertimbangkan: waktu pembuatan Pod (GKE memilih yang terbaru) dan setelan kolomreactionMode
. - reactionMode: menentukan perilaku fitur ini saat Pod tertentu
(dipilih oleh
podSelector
) dibuat atau dihapus. Kolom ini bersifat opsional dan setelan defaultnya adalahReadyCondition
. KolomReadyCondition
tidak dapat diubah. Anda dapat menetapkanreactionMode
untuk mengontrol cara kerja fitur saat Pod dibuat, dihapus, atau diperbarui. - network: mengarah ke antarmuka jaringan di Pod tempat alamat IP permanen dirutekan. Kolom ini tidak dapat diubah.
Terapkan manifes ke cluster:
kubectl apply -f my-ip-route.yaml
Menetapkan alamat IP persisten ke Pod StatefulSet
Untuk menetapkan alamat IP persisten ke Pod tertentu dalam StatefulSet, gunakan nama host Pod yang dapat diprediksi dan pemberian label otomatis Kubernetes, seperti yang ditunjukkan dalam contoh berikut:
Simpan manifes contoh berikut sebagai my-pod-ips.yaml
:
kind: GKEIPRoute
apiVersion: networking.gke.io/v1
metadata:
namespace: proxy-ss-ns
name: my-pod-ips
spec:
parentRefs:
- name: allowed-pod-ips
namespace: default
addresses:
- value: "34.123.10.1/32"
type: "gke.networking.io/cidr"
- value: "34.123.10.2/32"
type: "gke.networking.io/cidr"
network: blue-network
reactionMode: ReadyCondition
podSelector:
matchLabels:
statefulset.kubernetes.io/pod-name: proxy-ss-1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: proxy-ss-ns
name: proxy-ss
spec:
selector:
matchLabels:
component: proxy
serviceName: "proxy"
replicas: 3
template:
metadata:
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: '[{"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"blue-network"}]'
labels:
component: proxy
spec:
containers:
- name: hello-app
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Terapkan manifes ke cluster (pastikan Anda memiliki Jaringan bernama "blue-network"):
kubectl apply -f my-pod-ips.yaml
Menetapkan alamat IP persisten ke Deployment Pod
Untuk menetapkan alamat IP persisten ke Pod terbaru dalam Deployment, terapkan
GKEIPRoute
dengan konfigurasi berikut:
Simpan manifes contoh berikut sebagai my-pod-ips.yaml
:
kind: GKEIPRoute
apiVersion: networking.gke.io/v1
metadata:
namespace: proxy-deploy-ns
name: my-pod-ips
spec:
parentRefs:
- name: allowed-pod-ips
namespace: default
addresses:
- value: "34.123.10.1/32"
type: "gke.networking.io/cidr"
- value: "34.123.10.2/32"
type: "gke.networking.io/cidr"
network: blue-network
reactionMode: ReadyCondition
podSelector:
matchLabels:
component: proxy
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: proxy-deploy-ns
name: proxy-deploy
spec:
selector:
matchLabels:
component: proxy
replicas: 4 # Latest Pod is used
template:
metadata:
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: '[{"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"blue-network"}]'
labels:
component: proxy
spec:
containers:
- name: hello-app
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Terapkan manifes ke cluster (pastikan Anda memiliki Jaringan bernama "blue-network"):
kubectl apply -f my-ip-route.yaml
Langkah 6: Gunakan alamat IP persisten di dalam Pod
Menetapkan alamat IP persisten ke Pod GKE menggunakan GKEIPRoute
tidak otomatis membuat alamat IP dapat digunakan oleh aplikasi Anda. Alamat IP persisten ditangani di tingkat perutean jaringan, tetapi konfigurasi default Pod Anda tidak akan mengetahuinya. Anda harus mengonfigurasi konfigurasi
aplikasi untuk mengenali dan menggunakan alamat dalam Pod. Untuk mencapai hal ini,
Pod Anda akan memerlukan izin hak istimewa.
Untuk mengonfigurasi aplikasi, pertimbangkan opsi berikut:
- net.ipv4.ip_nonlocal_bind: Mengubah setelan sistem untuk mengizinkan aplikasi Anda menggunakan alamat IP yang tidak ditetapkan secara langsung ke antarmukanya.
- ip address add: Gunakan perintah ini dalam logika aplikasi Anda untuk menambahkan alamat IP persisten ke antarmuka secara manual.
- Soket mentah: Untuk kontrol yang lebih besar, aplikasi Anda dapat berinteraksi langsung dengan stack jaringan (lanjutan).
- Stack alamat IP ruang pengguna: Dalam kasus khusus, aplikasi terpisah mungkin berjalan dalam Pod untuk mengelola alamat IP (sangat lanjut).
Menyesuaikan perilaku alamat IP persisten selama perubahan Pod
Bagian ini menjelaskan perilaku alamat IP persisten untuk Pod GKE
saat Pod yang ditargetkan dibuat atau dihapus. Pengontrol GKE memantau Pod dan konfigurasi GKEIPRoute
Anda. Saat mendeteksi
update yang terjadi, Pod akan otomatis menetapkan ulang alamat IP persisten ke
Pod yang sesuai sesuai dengan reactionMode
yang Anda pilih.
Pahami cara fitur alamat IP persisten secara otomatis menangani perubahan Pod dan opsi konfigurasi yang tersedia untuk Anda:
- Tentukan antara
ReadyCondition
atau
Exists
dalam
kolom
reactionMode
konfigurasi
GKEIPRoute
Anda. Pertimbangkan kebutuhan aplikasi Anda terkait seberapa cepat alamat IP ditetapkan dibandingkan persyaratan kesiapan yang ketat. - Jika Anda menggunakan
ReadyCondition
untuk memastikan kesiapan, pastikan Pod Anda telah menerapkan pemeriksaan kesiapan Kubernetes dengan benar. Jika tidak, alamat IP persisten mungkin tidak berfungsi sebagaimana mestinya. - Sebaiknya pantau status Pod dan kolom
Conditions
objekGKEIPRoute
untuk memastikan sistem berfungsi dengan benar. Statustrue
dari kondisiReady
menunjukkan bahwa sistem berfungsi dengan benar.
Memecahkan masalah komunikasi dengan alamat IP persisten untuk Pod
Bagian ini menunjukkan cara menyelesaikan masalah terkait alamat IP persisten untuk Pod.
NoPodsFound
jika tidak ditemukan Pod yang cocok
Gejala
Objek GKEIPRoute
menentukan podSelector
(serangkaian label) untuk mengidentifikasi
Pod mana yang terkait dengan alamat IP persisten. Status
NoPodsFound
menunjukkan bahwa tidak ada Pod dalam namespace
GKEIPRoute's
yang ditargetkan yang memiliki label yang cocok.
Kemungkinan penyebab
- Label salah: Pod yang ingin Anda gunakan dengan alamat IP persisten mungkin memiliki label yang salah, atau tidak memiliki label sama sekali.
- Tidak ada Pod: Jika
reactionMode == Exists
, periksa apakah Pod ditetapkan ke node dengan memeriksa kolompod.Spec.nodeName
. Mungkin tidak ada Pod yang berjalan di namespaceGKEIPRoute's
yang cocok dengan pemilih. - Pod not Ready: Jika
reactionMode == ReadyCondition
, periksa apakah status Pod adalahREADY
. Meskipun Pod yang cocok ada, jika tidak dalam statusReady
, Pod tersebut tidak dapat menayangkan traffic sehingga tidak dipilih.
Resolusi
- Periksa Label Anda: Periksa kembali apakah label di
GKEIPRoute's
podSelector
cocok dengan label yang telah Anda terapkan ke Pod yang diinginkan. - Verifikasi Keberadaan Pod: Pastikan Pod dengan label yang benar benar-benar ada di namespace
GKEIPRoute's
yang ditentukan olehListeners
Gateway Anda. JikareactionMode == Exists
, periksa apakah Pod ditetapkan ke node dengan memeriksa kolompod.Spec.nodeName
Konfirmasi Kesiapan Pod: Jika
reactionMode == ReadyCondition
, periksa apakah status Pod adalahREADY
. Pastikan Pod berada dalam statusReady
menggunakan perintah berikut:kubectl get pods -n <namespace>
Pod dalam status lain (misalnya, "Tertunda", "Error") tidak dipilih.
Konfigurasikan Pod Anda untuk merespons di alamat IP persisten yang ditetapkan.
Mutated
saat Pod yang cocok ditemukan dan pemrograman alamat IP persisten sedang berlangsung
Gejala
Status GKEIPRoute
menampilkan "Mutated", yang menunjukkan bahwa konfigurasi alamat IP persisten
untuk Pod yang cocok sedang berlangsung.
Penyebab Potensial:
Anda dapat melihat status "Mutated" selama konfigurasi saat sistem menyiapkan jalur data GKE dan resource Google Cloud untuk alamat IP persisten.
Penyelesaian:
- Tunggu dan coba lagi: Pada umumnya, proses konfigurasi akan selesai
secara otomatis dalam waktu singkat. Periksa statusnya setelah menunggu. Status ini
akan berubah menjadi
Ready
jika berhasil. - Selidiki lebih lanjut (jika perlu): Jika status "Mutated" tetap ada selama
jangka waktu yang lama, hal ini mungkin menunjukkan error konfigurasi. Periksa
kondisi status lainnya di
GKEIPRoute
Anda:- Disetujui: Menunjukkan apakah penyiapan
GKEIPRoute
Anda valid. - DPV2Ready: Menunjukkan apakah jalur data di node diprogram dengan benar.
- GCPReady: Menunjukkan apakah resource Google Cloud disiapkan seperti yang diharapkan.
- Disetujui: Menunjukkan apakah penyiapan
Cari pesan error dalam kondisi ini untuk membantu memecahkan masalah.