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 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 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) 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 objek GKEIPRoute.

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.

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:

  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 IP tersebut. Pilih region yang sama dengan cluster GKE Anda.
  3. 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.
  4. 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.
  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 cara perutean bereaksi terhadap perubahan Pod.
  6. Konfigurasi keaktifan aplikasi Anda: Konfigurasi aplikasi Anda dalam Pod untuk secara aktif menggunakan alamat IP persisten.
  7. 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-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 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.

  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 (khususGoogle 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 terkaitnya) yang berpotensi menggunakan alamat IP Gateway. Listeners bertindak 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 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 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 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 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 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 kolom pod.Spec.nodeName. Mungkin tidak ada Pod yang berjalan di namespace GKEIPRoute's yang cocok dengan pemilih.
  • Pod tidak Siap: Jika reactionMode == ReadyCondition, periksa apakah status Pod adalah READY. Meskipun Pod yang cocok ada, jika Pod tersebut tidak dalam status Ready, Pod tersebut tidak dapat melayani traffic sehingga tidak dipilih.

Resolusi

  1. Periksa Label Anda: Periksa kembali apakah label di GKEIPRoute's podSelector Anda cocok dengan label yang telah Anda terapkan ke Pod yang dimaksud.
  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 dalam status Ready menggunakan perintah berikut:

    kubectl get pods -n <namespace>
    

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

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

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

Cari pesan error dalam kondisi ini untuk membantu memecahkan masalah.

Langkah berikutnya