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 GKE Jaringan pod dengan pemetaan alamat IP persisten kustom. Untuk mempelajari lebih lanjut tentang alamat IP persisten, kasus penggunaan, dan manfaatnya, lihat artikel Tentang IP persisten alamat IP untuk GKE Pod.

Persyaratan

  • GKE versi 1.29 atau yang lebih baru.
  • Pilih antara menyimpan alamat IP yang disediakan Google (alamat IP yang disediakan Google) atau membawa alamat IP Anda sendiri (BYOIP).
  • Konfigurasikan aplikasi Anda yang berjalan di dalam Pod untuk mengenali dan menggunakan alamat IP persisten yang telah ditetapkan.
  • Alamat IP persisten untuk Pod GKE memerlukan GKE Dataplane V2 dan cluster yang mendukung multijaringan.

Batasan

  • Jaringan default tidak mendukung alamat IP Persisten. Anda harus mengaktifkan multijaringan selama pembuatan cluster.
  • Konfigurasi aplikasi Anda untuk menggunakan alamat IP persisten yang telah ditetapkan. GKE tidak secara otomatis menambahkan konfigurasi alamat IP ke antarmuka jaringan Pod.
  • Anda dapat mengaitkan setiap alamat IP persisten dengan satu Pod dalam satu waktu. Ketika Anda memiliki beberapa Pod yang tersedia, GKE biasanya mengirimkan traffic ke Pod terbaru. Namun, GKE hanya melakukan ini jika Pod terbaru responsif, artinya 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 Lapisan 3 atau Jenis perangkat multijaringan untuk alamat IP persisten.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Mengaktifkan 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 didukung hanya pada cluster yang ada di Project yang diaktifkan dengan GKE Enterprise:

Untuk memahami biaya 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 di sekitar Anda.

Bagian ini merangkum alur kerja untuk menerapkan alamat IP persisten untuk Pod GKE:

  1. Buat cluster: Buat cluster yang memiliki Gateway API, GKE Dataplane V2, dan multi-jaringan diaktifkan.
  2. Cadangkan alamat IP: Putuskan apakah Anda memerlukan alamat IP eksternal ( dapat diakses) atau internal (khusus Google Cloud) dan mencadangkannya. Pilih region yang sama dengan cluster GKE Anda.
  3. Buat Gateway: Konfigurasikan objek Gateway Kubernetes yang menyimpan alamat IP persisten yang dicadangkan dan memungkinkan Anda membuat aturan (GKEIPRoutes) Pod mana di cluster Anda yang dapat menggunakan alamat IP persisten tersebut.
  4. Buat atau identifikasi workload dengan jaringan tambahan untuk alamat IP persisten: Menyiapkan Pod untuk menggunakan alamat IP persisten dengan mengaktifkan beberapa jaringan dan menentukan jaringan tempat alamat IP persisten berada.
  5. 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 reaksi perutean terhadap perubahan Pod.
  6. Mengonfigurasi awareness aplikasi Anda: Konfigurasikan aplikasi Anda dalam Pod untuk menggunakan alamat IP persisten secara aktif.
  7. Pemantauan: Lacak status Gateway dan GKEIPRoute Anda. untuk memastikan semuanya bekerja seperti yang diharapkan.

Untuk mengimplementasikan alamat IP persisten untuk Pod GKE, lakukan langkah-langkah berikut:

Langkah 1: Buat GKE Dataplane V2 dan cluster GKE yang mendukung multi-jaringan

Untuk mengaktifkan kemampuan pemilihan rute jaringan dan pengelolaan alamat IP lanjutan yang diperlukan untuk menerapkan alamat IP persisten pada Pod GKE, Anda harus buat GKE Dataplane V2 dan cluster yang mendukung multi-jaringan.

Langkah 2: Cadangkan alamat IP persisten

Guna membangun identitas jaringan yang andal untuk Pod Anda dan menyiapkan IP persisten , Anda harus terlebih dahulu memperoleh alamat IP persisten. Anda dapat memilih antara mereservasi alamat IP yang disediakan Google atau menggunakan alamat IP Anda sendiri (BYOIP).

Langkah 2a: Cadangkan 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: wilayah tempat Anda ingin mereservasi ini alamat IPv6 Region ini harus sama dengan region Pod yang diinginkan untuk melekatkan alamat IP.

    Catatan: Anda harus menentukan region saat mereservasi alamat IP karena aturan penerusan, yang menangani perutean traffic untuk alamat IP persisten, bersifat regional. Alamat IP dan cluster GKE Anda harus berada di wilayah yang sama agar {i>routing<i} 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 dari satu atau beberapa alamat yang ingin direservasi. Untuk beberapa alamat, tentukan semua sebagai daftar, yang dipisahkan oleh spasi. Misalnya, contoh-alamat-1 contoh-alamat-2 contoh-alamat-3
  • REGION: region untuk permintaan ini.
  • SUBNETWORK: subnet untuk alamat IPv4 internal ini.

Untuk memastikan lalu lintas diarahkan dengan benar dalam jaringan pribadi Anda, alamat harus berasal dari subnet yang ditentukan.

Untuk informasi selengkapnya tentang alamat IP eksternal dan internal, lihat Mencadangkan IP eksternal statis alamat IP dan Mencadangkan IP internal statis Anda.

Langkah 2b: Bawa alamat IP Anda sendiri (BYOIP)

Anda dapat membawa alamat IP Anda sendiri (BYOIP), daripada mengandalkan Alamat IP yang disediakan Google. BYOIP sangat membantu jika Anda memerlukan alamat IP tertentu untuk aplikasi Anda atau memindahkan sistem yang ada ke Google Cloud. Untuk menggunakan BYOIP, Google memvalidasi bahwa Anda memiliki rentang alamat IP, dan setelah alamat IP dan alamat jaringan diimpor ke Google Cloud, Anda dapat menetapkannya sebagai Alamat IP untuk Pod GKE. Untuk informasi selengkapnya, lihat Menggunakan bawa alamat IP Anda sendiri.

Langkah 3: Buat objek Gateway

Objek gateway menyimpan alamat IP dan menentukan Pod mana yang memenuhi syarat untuk digunakan mereka. Untuk mengontrol cara alamat IP persisten ditetapkan ke Pod GKE, Anda akan menggunakan objek Gateway.

  1. Buat objek Gateway Kubernetes 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. Di dalam bagian Alamat gateway, cantumkan alamat IP persisten (disediakan oleh Google atau BYOIP) yang dikelola oleh Gateway ini.
  3. Gunakan bagian Listeners untuk menentukan Pod mana (dan Pod yang terkait GKEIPRoute) berpotensi menggunakan alamat IP Gateway. Listeners bertindak sebagai filter berdasarkan namespace GKEIPRoute di mana Objek GKEIPRoute ada.

    Anda dapat memilih dari opsi pemilihan namespace Kubernetes berikut:

    • Semua Namespace: Semua GKEIPRoute yang ada di cluster.
    • Pemilih: GKEIPRoute di namespace GKEIPRoute yang cocok dengan label tertentu.
    • Name yang Sama: Hanya GKEIPRoutes dalam namespace GKEIPRoute yang sama dengan Gateway.

Contoh berikut memberikan akses tingkat cluster ke IP persisten eksternal yang memungkinkan Pod berpotensi 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:

  • alamat: mencantumkan semua alamat IP yang izinnya dikelola oleh {i>Gateway<i} tertentu.
  • pemroses: digunakan untuk mengidentifikasi namespace tempat objek GKEIPRoute dapat merujuk ke {i>Gateway<i} ini.

Terapkan manifes ke cluster:

kubectl apply -f allowed-pod-ips.yaml

Langkah 4: Buat atau identifikasi workload dengan jaringan tambahan untuk alamat IP persisten

Menyiapkan multi-jaringan Pod dan membuat objek jaringan yang menunjukkan jaringan di mana alamat IP persisten berada.

Langkah 5: Buat objek GKEIPRoute untuk workload 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 berada data Kolom ini tidak dapat diubah.
  • address: mencantumkan semua alamat IP persisten yang dirutekan ke Pod yang diidentifikasi dengan podSelector. Kolom ini dapat berubah. Untuk IPv4, hanya /32 alamat email tidak didukung.
  • podSelector: menentukan label yang mengidentifikasi Pod tempat dan alamat IP akan dirutekan. Kolom ini dapat berubah dan berlaku untuk namespace tempat GKEIPRoute ditempatkan. Jika memilih beberapa Pod, ada dua faktor tambahan juga dipertimbangkan: waktu pembuatan Pod (GKE memilih yang terbaru) dan setelan kolom reactionMode.
  • reactionMode: menentukan perilaku fitur ini saat Pod tertentu (dipilih oleh podSelector) akan dibuat atau dihapus. Bidang ini adalah opsional dan defaultnya adalah ReadyCondition. Kolom ReadyCondition tidak dapat diubah. Anda dapat menyetel reactionMode untuk mengontrol cara kerja fitur kapan Pod dibuat, dihapus, atau diupdate.
  • network: mengarah ke antarmuka jaringan di Pod tempat alamat IP persisten alamat akan 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 metode Nama host dan Kubernetes yang dapat diprediksi untuk pod pelabelan otomatis, seperti yang terlihat 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 di 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 secara otomatis membuat alamat IP dapat digunakan oleh aplikasi Anda. Tujuan alamat IP persisten ditangani pada tingkat perutean jaringan, tetapi alamat IP konfigurasi {i>default<i} tidak akan menyadarinya. Anda harus mengonfigurasi atribut untuk mengenali dan menggunakan alamat dalam Pod. Untuk mencapai hal ini, Pod Anda akan memerlukan izin hak istimewa.

Untuk mengonfigurasi aplikasi Anda, pertimbangkan opsi berikut:

  1. net.ipv4.ip_nonlocal_bind: Ubah setelan sistem untuk memungkinkan aplikasi untuk menggunakan alamat IP yang tidak secara langsung ditetapkan ke antarmukanya.
  2. ip address add: Gunakan perintah ini dalam logika aplikasi Anda untuk akan menambahkan alamat IP persisten ke antarmuka secara manual.
  3. Soket mentah: Untuk kontrol yang lebih besar, aplikasi Anda dapat berinteraksi langsung dengan tumpukan jaringan (lanjutan).
  4. Tumpukan alamat IP Userspace: Dalam kasus khusus, alamat IP aplikasi dapat berjalan di dalam Pod untuk mengelola alamat IP (yang sangat tingkat lanjut).

Menyesuaikan perilaku alamat IP persisten selama perubahan Pod

Bagian ini menjelaskan cara alamat IP persisten untuk Pod GKE akan berperilaku saat Pod yang ditargetkan dibuat atau dihapus. GKE pengontrol memantau Pod Anda dan konfigurasi GKEIPRoute. Saat mendeteksi terjadi pembaruan, sistem secara otomatis menetapkan kembali alamat IP persisten untuk Pod yang cocok sesuai dengan reactionMode pilihan Anda.

Memahami cara fitur alamat IP persisten menangani Pod secara otomatis perubahan dan opsi konfigurasi yang tersedia untuk Anda:

  • Tentukan antara ReadyCondition atau Ada dalam reactionMode untuk konfigurasi GKEIPRoute Anda. Mempertimbangkan kebutuhan aplikasi Anda mengenai seberapa cepat alamat IP ditetapkan versus seberapa ketat persyaratan kesiapan.
  • Jika Anda menggunakan ReadyCondition untuk memastikan kesiapan, pastikan bahwa Pod telah mengimplementasikan pemeriksaan kesiapan Kubernetes dengan benar. Jika tidak, alamat IP persisten mungkin tidak berfungsi sebagaimana mestinya.
  • Sebaiknya Anda memantau status Pod dan Conditions kolom objek GKEIPRoute untuk memastikan sistem berfungsi dengan benar. Status true dari kondisi Ready menunjukkan bahwa sistem telah bekerja dengan benar.

Memecahkan masalah komunikasi dengan alamat IP persisten untuk Pod

Bagian ini menampilkan cara menyelesaikan masalah yang terkait dengan alamat IP persisten untuk Pod.

NoPodsFound jika tidak ditemukan Pod yang cocok

Gejala

Objek GKEIPRoute menentukan podSelector (sekumpulan label) untuk diidentifikasi Pod mana yang terkait dengan alamat IP persisten. Tujuan Status NoPodsFound menunjukkan bahwa tidak ada Pod dalam target Namespace GKEIPRoute's 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 ada label sama sekali.
  • Tidak ada Pod: Jika reactionMode == Exists, periksa apakah Pod sudah ditetapkan ke node dengan memeriksa kolom pod.Spec.nodeName. Terkadang mungkin ada bukanlah Pod yang berjalan di namespace GKEIPRoute's yang sesuai dengan pemilih.
  • Pod tidak Siap: Jika reactionMode == ReadyCondition, periksa apakah Pod statusnya adalah READY. Meskipun ada Pod yang cocok, jika Pod tidak ada dalam Ready status, tidak dapat melayani lalu lintas dan oleh karena itu 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. Memverifikasi Keberadaan Pod: Pastikan Pod dengan label yang benar ada di namespace GKEIPRoute's yang ditentukan oleh Listeners Gateway Anda. Jika reactionMode == Exists, periksa apakah Pod telah ditetapkan ke node oleh 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 yang berstatus lain (misalnya, "Tertunda", "Error") tidak dipilih.

  4. Mengonfigurasi Pod merespons alamat IP persisten yang telah ditetapkan.

Mutated saat Pod yang cocok ditemukan dan pemrograman alamat IP persisten sedang berlangsung

Gejala

Status GKEIPRoute menunjukkan "Bermutasi", yang menunjukkan bahwa alamat IP persisten untuk Pod yang cocok sedang berlangsung.

Potensi Penyebab:

Anda akan mendapati status selama konfigurasi karena sistem sedang mengatur jalur data GKE dan resource Google Cloud untuk IP persisten alamat IPv6

Penyelesaian:

  1. Tunggu dan coba lagi: Pada umumnya, proses konfigurasi akan selesai secara otomatis dalam waktu singkat. Periksa status setelah menunggu. Ini akan berubah menjadi Ready jika berhasil.
  2. Investigasi lebih lanjut (jika perlu): Jika instance "Diubah" status akan tetap ada selama waktu yang lebih lama, hal ini mungkin mengindikasikan error konfigurasi. Periksa kondisi status lainnya di GKEIPRoute Anda:
    • Diterima: Menunjukkan apakah penyiapan GKEIPRoute valid.
    • DPV2Ready: Menunjukkan apakah jalur data pada node diprogram dengan benar.
    • GCPReady: Menunjukkan apakah resource Google Cloud telah disiapkan sebagai yang diharapkan.

Cari pesan error dalam kondisi ini untuk membantu memecahkan masalah.

Langkah selanjutnya