Mengontrol komunikasi dengan alamat IP persisten


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.31 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 cluster yang mengaktifkan GKE Dataplane V2 dan Gateway API.

Batasan

  • 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 yang cocok. 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.
  • Dukungan ketersediaan tinggi (HA) yang menggunakan alamat IP persisten tidak didukung untuk kasus penggunaan non-DPDK.

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 memiliki Gateway API, GKE Dataplane V2.
  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: Mengonfigurasi objek Kubernetes Gateway yang menyimpan alamat IP persisten yang dicadangkan dan memungkinkan Anda membuat aturan (GKEIPRoutes) tentang Pod mana di cluster yang dapat menggunakan alamat IP persisten tersebut.
  4. Buat atau identifikasi beban kerja 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.
  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 secara opsional dapat mengonfigurasi cara rute bereaksi terhadap 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 yang mengaktifkan Gateway API dan GKE Dataplane V2

Untuk mengaktifkan kemampuan pengelolaan alamat IP dan perutean jaringan lanjutan yang diperlukan untuk menerapkan alamat IP persisten di 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 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 default cluster atau subnet jaringan tambahan.

Untuk mengetahui informasi selengkapnya tentang alamat IP eksternal dan internal atau 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 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: (Opsional) Buat atau identifikasi beban kerja 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 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 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 multi-jaringan 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 # 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: Gunakan alamat IP persisten di dalam Pod

Menetapkan alamat IP persisten ke Pod GKE menggunakan GKEIPRoute tidak akan membuat alamat IP dapat digunakan secara otomatis oleh aplikasi Anda. Alamat IP persisten ditangani di tingkat pemilihan rute 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 langsung berinteraksi 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 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 mengontrol cara pengumuman ARP ditangani. Menetapkan ke '2' memastikan bahwa pengumuman ARP dibuat 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 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