Mengontrol komunikasi dengan alamat IP persisten di Pod GKE


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 sebagai True secara default. Anda dapat mengonfigurasi perilaku ini dan mengubahnya menggunakan setelan reactionMode di GKEIPRoute.
  • 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.

Harga

Fitur Network Function Optimizer (NFO) berikut hanya didukung di cluster yang berada dalam Project yang diaktifkan dengan GKE Enterprise:

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:

  1. Buat cluster: Buat cluster yang mengaktifkan Gateway API, GKE Dataplane V2, dan multi-jaringan.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Mengonfigurasi pengetahuan aplikasi: Konfigurasikan aplikasi Anda dalam Pod untuk secara aktif menggunakan alamat IP persisten.
  7. 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-3
  • REGION: 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.

  1. 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).
  2. Dalam bagian alamat Gateway, cantumkan alamat IP persisten (disediakan Google atau BYOIP) yang dikelola Gateway ini.
  3. Gunakan bagian Listeners untuk menentukan Pod mana (dan objek GKEIPRoute terkait) yang berpotensi dapat menggunakan alamat IP Gateway. Listeners berfungsi sebagai filter berdasarkan namespace GKEIPRoute tempat objek GKEIPRoute 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.

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 kolom reactionMode.
  • reactionMode: menentukan perilaku fitur ini saat Pod tertentu (dipilih oleh podSelector) dibuat atau dihapus. Kolom ini bersifat opsional dan setelan defaultnya adalah ReadyCondition. Kolom ReadyCondition tidak dapat diubah. Anda dapat menetapkan reactionMode 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:

  1. net.ipv4.ip_nonlocal_bind: Mengubah setelan sistem untuk mengizinkan aplikasi Anda menggunakan alamat IP yang tidak ditetapkan secara langsung ke antarmukanya.
  2. ip address add: Gunakan perintah ini dalam logika aplikasi Anda untuk menambahkan alamat IP persisten ke antarmuka secara manual.
  3. Soket mentah: Untuk kontrol yang lebih besar, aplikasi Anda dapat berinteraksi langsung dengan stack jaringan (lanjutan).
  4. 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 objek GKEIPRoute untuk memastikan sistem berfungsi dengan benar. Status true dari kondisi Ready 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 kolom pod.Spec.nodeName. Mungkin tidak ada Pod yang berjalan di namespace GKEIPRoute's yang cocok dengan pemilih.
  • Pod not Ready: Jika reactionMode == ReadyCondition, periksa apakah status Pod adalah READY. Meskipun Pod yang cocok ada, jika tidak dalam status Ready, Pod tersebut tidak dapat menayangkan traffic sehingga tidak dipilih.

Resolusi

  1. Periksa Label Anda: Periksa kembali apakah label di GKEIPRoute's podSelector cocok dengan label yang telah Anda terapkan ke Pod yang diinginkan.
  2. Verifikasi Keberadaan Pod: Pastikan Pod dengan label yang benar benar-benar ada di namespace GKEIPRoute's yang ditentukan oleh Listeners Gateway Anda. Jika reactionMode == Exists, periksa apakah Pod ditetapkan ke node dengan memeriksa kolom pod.Spec.nodeName
  3. Konfirmasi Kesiapan Pod: Jika reactionMode == ReadyCondition, periksa apakah status Pod adalah READY. Pastikan Pod berada dalam status Ready menggunakan perintah berikut:

    kubectl get pods -n <namespace>
    

    Pod dalam status lain (misalnya, "Tertunda", "Error") tidak dipilih.

  4. 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:

  1. 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.
  2. 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.

Cari pesan error dalam kondisi ini untuk membantu memecahkan masalah.

Langkah selanjutnya