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 lebih lanjut alamat IP persisten, kasus penggunaan, dan manfaatnya, lihat Tentang alamat IP persisten untuk Pod GKE.
Persyaratan
- GKE versi 1.31 atau yang lebih baru.
- Pilih antara mencadangkan alamat IP yang disediakan Google atau membawa alamat IP Anda sendiri (BYOIP).
- Konfigurasi aplikasi yang berjalan di 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 Gateway API.
Batasan
- Anda harus mengonfigurasi aplikasi 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 yang paling baru dan cocok. 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.
- Dukungan ketersediaan tinggi (HA) menggunakan alamat IP persisten tidak didukung untuk kasus penggunaan non-DPDK.
- Anda dapat menentukan hingga 16 alamat IP pada satu
GKEIPRoute
. Untuk mengonfigurasi lebih banyak alamat, Anda dapat membuat beberapa objekGKEIPRoute
.
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.
Menerapkan alamat IP persisten untuk Pod GKE
Alamat IP persisten di GKE menawarkan cara untuk memberikan identitas jaringan yang stabil pada Pod Anda, meskipun Pod itu sendiri diupdate atau dipindahkan.
Bagian ini merangkum alur kerja untuk menerapkan alamat IP persisten bagi Pod GKE:
- Buat cluster: Buat cluster yang memiliki Gateway API, GKE Dataplane V2.
- Mencadangkan alamat IP: Tentukan apakah Anda memerlukan alamat IP eksternal (dapat diakses secara publik) atau internal (khusus Google Cloud) dan cadangkan alamat IP tersebut. Pilih region yang sama dengan cluster GKE Anda.
- Buat Gateway: Konfigurasi objek Gateway Kubernetes yang menyimpan alamat IP persisten yang dicadangkan dan memungkinkan Anda membuat aturan (
GKEIPRoutes
) tentang Pod mana di cluster Anda yang dapat menggunakan alamat IP persisten tersebut. - Buat atau identifikasi workload untuk alamat IP persisten: Jika Anda menggunakan alamat IP persisten di jaringan tambahan, 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: Konfigurasi
GKEIPRoute
untuk menetapkan alamat IP persisten ke Pod tertentu. Anda dapat menggunakan label untuk menargetkan Pod yang tepat dan secara opsional dapat mengonfigurasi cara perutean bereaksi terhadap perubahan Pod. - Konfigurasi keaktifan aplikasi Anda: Konfigurasi aplikasi Anda dalam Pod untuk secara aktif menggunakan alamat IP persisten.
- Pemantauan: Pantau status Gateway dan
GKEIPRoute
objek Anda untuk memastikan semuanya berfungsi seperti yang diharapkan.
Untuk menerapkan alamat IP persisten untuk Pod GKE, lakukan langkah-langkah berikut:
Langkah 1: Buat cluster GKE yang mendukung Gateway API dan GKE Dataplane V2
Untuk mengaktifkan kemampuan perutean jaringan dan pengelolaan alamat IP tingkat lanjut yang diperlukan untuk menerapkan alamat IP persisten pada Pod GKE, Anda harus membuat cluster GKE Dataplane V2 sebagai berikut:
gcloud container clusters create CLUSTER_NAME \
--cluster-version=CLUSTER_VERSION \
--enable-dataplane-v2 \
--enable-ip-alias \
--gateway-api=standard
Ganti kode berikut:
CLUSTER_NAME
: nama cluster.CLUSTER_VERSION
: versi cluster.
Langkah 2: Siapkan alamat IP persisten
Untuk membuat identitas jaringan yang andal bagi Pod Anda 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: Mencadangkan 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 tempat Anda ingin melampirkan alamat IP.Catatan: Anda harus menentukan region saat mencadangkan alamat IP karena aturan penerusan, yang menangani perutean 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 default cluster atau subnet jaringan tambahan.
Untuk mengetahui informasi selengkapnya tentang alamat IP eksternal dan internal atau untuk melihat cara mencadangkan alamat menggunakan konsol, lihat Mencadangkan alamat IP eksternal statis dan Mencadangkan alamat IP internal statis.
Langkah 2b: Bring your own IP address (BYOIP)
Anda dapat membawa alamat IP Anda sendiri (BYOIP), alih-alih mengandalkan alamat IP yang disediakan Google. BYOIP berguna jika Anda memerlukan alamat IP tertentu untuk aplikasi Anda atau memindahkan sistem yang ada ke Google Cloud. Untuk menggunakan BYOIP, Google memvalidasi bahwa Anda adalah pemilik rentang alamat IP, dan setelah alamat IP diimpor ke Google Cloud, Anda dapat menetapkannya sebagai alamat IP persisten untuk Pod GKE. Untuk mengetahui informasi selengkapnya, lihat Menggunakan alamat IP Anda sendiri.
Langkah 3: Buat objek Gateway
Objek gateway menyimpan alamat IP dan menentukan Pod mana yang memenuhi syarat untuk menggunakannya. Untuk mengontrol cara penetapan alamat IP persisten ke Pod GKE Anda, 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 (khususGoogle 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
terkaitnya) yang berpotensi menggunakan alamat IP Gateway.Listeners
bertindak 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 memungkinkan Pod mana pun 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.
- listeners: digunakan untuk mengidentifikasi namespace tempat objek
GKEIPRoute
dapat mereferensikan Gateway ini.
Terapkan manifes ke cluster:
kubectl apply -f allowed-pod-ips.yaml
Langkah 4: (Opsional) Buat atau identifikasi workload dengan jaringan tambahan untuk alamat IP persisten
Jika berencana menggunakan alamat IP persisten dengan Pod yang memerlukan konektivitas ke beberapa jaringan, Anda dapat Menyiapkan Pod multi-jaringan dan membuat 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: default
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 persisten 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 multijaringan 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 Pod Deployment
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 # point to the right network if you intend to use persistent-ip on additional networks
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: <- Remove these lines if the pods are not multi-nic pods
# 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:
kubectl apply -f my-ip-route.yaml
Pastikan Anda memiliki Jaringan bernama "blue-network", jika Anda menggunakan jaringan tambahan.
Langkah 6: Menggunakan alamat IP persisten di dalam Pod
Menetapkan alamat IP persisten ke Pod GKE menggunakan GKEIPRoute tidak secara 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 melakukannya, Pod Anda akan memerlukan izin hak istimewa.
Untuk mengonfigurasi aplikasi, pertimbangkan opsi berikut:
- net.ipv4.ip_nonlocal_bind: Ubah setelan sistem untuk mengizinkan aplikasi Anda menggunakan alamat IP yang tidak ditetapkan langsung ke antarmukanya.
- ip address add: Gunakan perintah ini dalam logika aplikasi Anda untuk menambahkan alamat IP persisten ke antarmuka secara manual.
- Socket 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 canggih).
Langkah 7: Aktifkan ARP untuk alamat IP persisten (khusus jaringan default)
Untuk membuat permintaan dan respons Address Resolution Protocol (ARP) yang valid, dan
untuk membuat koneksi baru ke Pod dengan menggunakan alamat IP persisten di
jaringan default, Anda harus mengonfigurasi variabel ARP_ANNOUNCE
.
Untuk menetapkan variabel ARP_ANNOUNCE
, jalankan perintah berikut di Pod Anda:
echo "2" > /proc/sys/net/ipv4/conf/eth0/ARP_ANNOUNCE
dengan variabel ARP_ANNOUNCE
yang mengontrol cara penanganan pengumuman ARP. Menyetelnya ke '2' memastikan bahwa pengumuman ARP dilakukan untuk alamat IP persisten, sehingga perangkat lain di jaringan dapat mempelajari asosiasi baru.
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 sedang terjadi, secara otomatis akan menetapkan ulang alamat IP persisten ke
Pod yang sesuai menurut reactionMode
yang Anda pilih.
Pahami cara fitur alamat IP persisten menangani perubahan Pod secara otomatis 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 dengan 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 ada Pod yang cocok ditemukan
Gejala
Objek GKEIPRoute
menentukan podSelector
(kumpulan 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 tidak Siap: Jika
reactionMode == ReadyCondition
, periksa apakah status Pod adalahREADY
. Meskipun Pod yang cocok ada, jika Pod tersebut tidak dalam statusReady
, Pod tersebut tidak dapat melayani traffic sehingga tidak dipilih.
Resolusi
- Periksa Label Anda: Periksa kembali apakah label di
GKEIPRoute's
podSelector
Anda cocok dengan label yang telah Anda terapkan ke Pod yang dimaksud. - 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 dalam statusReady
menggunakan perintah berikut:kubectl get pods -n <namespace>
Pod dalam status lain (misalnya, "Tertunda", "Error") tidak dipilih.
Konfigurasi Pod untuk merespons alamat IP persisten yang ditetapkan.
Mutated
saat Pod yang cocok ditemukan dan pemrograman alamat IP persisten sedang berlangsung
Gejala
Status GKEIPRoute
menampilkan "Diubah", yang menunjukkan bahwa konfigurasi alamat IP persisten untuk Pod yang cocok sedang berlangsung.
Kemungkinan Penyebab:
Anda dapat mengharapkan status "Mutated" selama konfigurasi karena sistem sedang menyiapkan jalur data GKE dan resource Google Cloud untuk alamat IP persisten.
Penyelesaian:
- Tunggu dan coba lagi: Dalam sebagian besar kasus, proses konfigurasi selesai
secara otomatis dalam waktu singkat. Periksa status setelah menunggu. Statusnya
akan berubah menjadi
Ready
jika berhasil. - Selidiki lebih lanjut (jika perlu): Jika status "Diubah" terus berlanjut selama jangka waktu yang lama, hal ini mungkin menunjukkan adanya error konfigurasi. Periksa kondisi status lainnya di
GKEIPRoute
Anda:- Diterima: Menunjukkan apakah penyiapan
GKEIPRoute
Anda valid. - DPV2Ready: Menunjukkan apakah jalur data pada node diprogram dengan benar.
- GCPReady: Menunjukkan apakah resource Google Cloud disiapkan seperti yang diharapkan.
- Diterima: Menunjukkan apakah penyiapan
Cari pesan error dalam kondisi ini untuk membantu memecahkan masalah.