Memigrasikan setelan konfigurasi untuk load balancer F5 BIG-IP

1.29: Pratinjau
1.28: Tidak tersedia

Dokumen ini menunjukkan cara memigrasikan setelan konfigurasi untuk integrasi load balancer F5 BIG-IP ke mode load balancing manual untuk cluster pada versi 1.29. Jika cluster Anda menggunakan versi 1.30 atau yang lebih baru, sebaiknya ikuti petunjuk di Merencanakan migrasi cluster ke fitur yang direkomendasikan.

Menggunakan F5 BIG-IP dalam mode load balancing manual memberi Anda fleksibilitas untuk mengupgrade agen F5 secara independen tanpa memengaruhi fungsi load balancer F5 atau layanan Kubernetes Anda. Jika bermigrasi ke konfigurasi manual, Anda bisa mendapatkan update langsung dari F5 untuk memastikan performa dan keamanan yang optimal.

Migrasi ini diperlukan dalam situasi berikut:

  • Anda ingin mengaktifkan fitur baru seperti Controlplane V2 dan Anda juga memerlukan akses ke F5.

  • Anda memerlukan kemampuan yang disediakan oleh versi Pengontrol Layanan Masuk Penampung CIS BIG-IP (CIS) yang lebih tinggi dari v1.14.

Jika situasi sebelumnya tidak berlaku untuk Anda, Anda dapat terus menggunakan konfigurasi yang dipaketkan untuk load balancing F5 BIG-IP.

Apa pun pilihannya, kami akan terus mendukung F5 secara resmi sebagai solusi load balancer.

Dukungan untuk load balancer F5 BIG-IP

Kami mendukung penggunaan F5 BIG-IP dengan agen load balancer, yang terdiri dari dua pengontrol berikut:

  • Pengontrol F5 (awalan pod: load-balancer-f5): merekonsiliasi Layanan Kubernetes jenis LoadBalancer ke dalam format ConfigMap Common Controller Core Library (CCCL) F5.

  • F5 BIG-IP CIS Controller v1.14 (awalan pod: k8s-bigip-ctlr-deployment): menerjemahkan ConfigMap menjadi konfigurasi load balancer F5.

Agen ini menyederhanakan konfigurasi load balancer F5 dalam cluster Kubernetes Anda. Dengan membuat Service jenis LoadBalancer, pengontrol akan otomatis mengonfigurasi load balancer F5 untuk mengarahkan traffic ke node cluster Anda.

Namun, solusi yang dipaketkan memiliki batasan:

  • Ekspresi Service API terbatas. Anda tidak dapat mengonfigurasi pengontrol BIG-IP sesuai keinginan, atau menggunakan fitur F5 lanjutan. F5 sudah menyediakan dukungan yang lebih baik Service API secara native.

  • Implementasi ini menggunakan CCCL ConfigMap API lama dan CIS 1.x. Namun, F5 kini menyediakan ConfigMap API AS3 dan CIS 2.x yang lebih baru.

Pengontrol CIS dalam paket Google Distributed Cloud tetap menggunakan v1.14 karena masalah kompatibilitas dengan panduan upgrade F5 untuk CIS v2.x. Oleh karena itu, untuk memberi Anda fleksibilitas dalam mengatasi kerentanan keamanan dan mengakses fitur terbaru, kami melakukan transisi agen F5 dari komponen yang dipaketkan menjadi diinstal secara independen. Jika melakukan migrasi, Anda dapat terus menggunakan agen yang ada tanpa gangguan dan layanan yang dibuat sebelumnya tetap beroperasi.

Untuk cluster load balancing manual yang baru dibuat dengan F5 sebagai solusi load balancing, Anda harus menginstal pengontrol sendiri. Demikian pula, jika cluster Anda telah dimigrasikan dari F5 yang dipaketkan dan Anda ingin menggunakan CIS Controller versi yang lebih baru, Anda harus menginstal pengontrol sendiri.

Persyaratan

Berikut adalah persyaratan untuk migrasi:

  • Cluster admin dan semua cluster pengguna harus menggunakan versi 1.29 atau yang lebih tinggi.

  • Anda harus menggunakan alamat IP statis untuk node cluster admin dan pengguna. Jenis pemberian alamat IP ditetapkan di kolom network.ipMode.type, dan tidak dapat diubah. Jika kolom ini ditetapkan ke DHCP, Anda tidak dapat memigrasikan cluster.

Memperbarui file konfigurasi cluster pengguna

Buat perubahan berikut pada file konfigurasi cluster pengguna:

  1. Ubah loadBalancer.kind menjadi "ManualLB".

  2. Biarkan nilai yang sama untuk kolom loadBalancer.vips.controlPlaneVIP dan loadBalancer.vips.ingressVIP.

  3. Konfigurasikan nodePort yang digunakan untuk traffic HTTP yang dikirim ke VIP masuk.

    1. Dapatkan nilai nodePort HTTP saat ini:

      kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
          get svc istio-ingress -n gke-system -oyaml | grep http2 -A 1

      Ganti USER_CLUSTER_KUBECONFIG dengan jalur file kubeconfig cluster pengguna.

    2. Tambahkan nilai dari perintah sebelumnya ke kolom loadBalancer.manualLB.ingressHTTPNodePort, misalnya:

      loadBalancer:
        manualLB:
          ingressHTTPNodePort: 30243
  4. Konfigurasikan nodePort yang digunakan untuk traffic HTTPS yang dikirim ke VIP masuk:

    1. Dapatkan nilai nodePort HTTPS saat ini:

      kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
          get svc istio-ingress -n gke-system -oyaml | grep https -A 1
    2. Tambahkan nilai dari perintah sebelumnya ke kolom loadBalancer.manualLB.ingressHTTPSNodePort, misalnya:

      loadBalancer:
        manualLB:
          ingressHTTPSNodePort: 30879
  5. Konfigurasikan nodePort untuk server Kubernetes API:

    1. Dapatkan nilai nodePort saat ini untuk server Kubernetes API:

      kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep kube-apiserver-port -A 1

      Ganti kode berikut:

      • ADMIN_CLUSTER_KUBECONFIG dengan jalur file kubeconfig cluster admin.

      • USER_CLUSTER_NAME: nama cluster pengguna.

    2. Tambahkan nilai dari perintah sebelumnya ke kolom loadBalancer.manualLB.controlPlaneNodePort, misalnya:

      loadBalancer:
        manualLB:
          controlPlaneNodePort: 30968
  6. Konfigurasikan nodePort untuk server Konnectivity:

    1. Dapatkan nilai nodePort saat ini untuk server Konnectivity:

      kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep konnectivity-server-port -A 1
    2. Tambahkan nilai dari perintah sebelumnya ke kolom loadBalancer.manualLB.konnectivityServerNodePort, misalnya:

      loadBalancer:
        manualLB:
          konnectivityServerNodePort: 30563
  7. Hapus seluruh bagian loadBalancer.f5BigIP.

Memperbarui cluster pengguna

Jalankan perintah berikut untuk memigrasikan cluster:

gkectl update cluster \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config USER_CLUSTER_CONFIG

Ganti kode berikut:

  • ADMIN_CLUSTER_KUBECONFIG: jalur file kubeconfig cluster admin.

  • USER_CLUSTER_CONFIG: jalur file konfigurasi cluster pengguna.

Memperbarui file konfigurasi cluster admin

Buat perubahan berikut pada file konfigurasi cluster admin:

  1. Ubah loadBalancer.kind menjadi "ManualLB".

  2. Tetapkan nilai yang sama untuk kolom loadBalancer.vips.controlPlaneVIP.

  3. Periksa nilai kolom adminMaster.replicas. Jika nilainya 3, cluster admin memiliki ketersediaan tinggi (HA). Jika nilainya adalah 1, cluster admin adalah non-HA.

  4. Lakukan langkah-langkah berikut hanya untuk cluster admin non-HA:

    1. Dapatkan nilai nodePort untuk server Kubernetes API:

      kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          get svc kube-apiserver -n kube-system -oyaml | grep nodePort

      Ganti ADMIN_CLUSTER_KUBECONFIG dengan jalur file kubeconfig cluster admin.

    2. Tambahkan nilai dari perintah sebelumnya ke kolom loadBalancer.manualLB.controlPlaneNodePort, misalnya:

      loadBalancer:
        manualLB:
          controlPlaneNodePort: 30968
  5. Jalankan perintah berikut untuk melihat apakah ada nodePort add-on:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        get deploy monitoring-operator -n kube-system -oyaml | grep admin-ingress-nodeport

    Jika perintah sebelumnya menghasilkan nilai, tambahkan ke kolom loadBalancer.manualLB.addonsNodePort, misalnya:

    loadBalancer:
      manualLB:
        addonsNodePort: 31405
  6. Hapus seluruh bagian loadBalancer.f5BigIP.

Memperbarui cluster admin

Jalankan perintah berikut untuk mengupdate cluster:

gkectl update admin \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config ADMIN_CLUSTER_CONFIG

Ganti kode berikut:

  • ADMIN_CLUSTER_KUBECONFIG: jalur file kubeconfig cluster admin.

  • ADMIN_CLUSTER_CONFIG: jalur file konfigurasi cluster admin.

Memastikan bahwa resource F5 lama masih ada

Setelah mengupdate cluster untuk menggunakan load balancing manual, traffic ke cluster tidak akan terganggu karena resource F5 yang ada masih ada, seperti yang dapat Anda lihat dengan menjalankan perintah berikut:

kubectl --kubeconfig CLUSTER_KUBECONFIG \
  api-resources --verbs=list -o name   | xargs -n 1 kubectl --kubeconfig CLUSTER_KUBECONFIG get --show-kind --ignore-not-found --selector=onprem.cluster.gke.io/legacy-f5-resource=true -A

Ganti CLUSTER_KUBECONFIG dengan jalur file kubeconfig cluster admin atau cluster pengguna.

Output yang diharapkan mirip dengan berikut ini:

Cluster admin:

Warning: v1 ComponentStatus is deprecated in v1.19+
NAMESPACE     NAME                        TYPE     DATA   AGE
kube-system   secret/bigip-login-xt697x   Opaque   4      13h
NAMESPACE     NAME                              SECRETS   AGE
kube-system   serviceaccount/bigip-ctlr         0         13h
kube-system   serviceaccount/load-balancer-f5   0         13h
NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/k8s-bigip-ctlr-deployment   1/1     1            1           13h
kube-system   deployment.apps/load-balancer-f5            1/1     1            1           13h
NAME                                                                                ROLE                                       AGE
clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding         ClusterRole/bigip-ctlr-clusterrole         13h
clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding   ClusterRole/load-balancer-f5-clusterrole   13h
NAME                                                                 CREATED AT
clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole         2024-03-25T04:37:34Z
clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole   2024-03-25T04:37:34Z

Cluster pengguna:

Warning: v1 ComponentStatus is deprecated in v1.19+
NAMESPACE     NAME                        TYPE     DATA   AGE
kube-system   secret/bigip-login-sspwrd   Opaque   4      14h
NAMESPACE     NAME                              SECRETS   AGE
kube-system   serviceaccount/bigip-ctlr         0         14h
kube-system   serviceaccount/load-balancer-f5   0         14h
NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/k8s-bigip-ctlr-deployment   1/1     1            1           14h
kube-system   deployment.apps/load-balancer-f5            1/1     1            1           14h
NAME                                                                                ROLE                                       AGE
clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding         ClusterRole/bigip-ctlr-clusterrole         14h
clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding   ClusterRole/load-balancer-f5-clusterrole   14h
NAME                                                                 CREATED AT
clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole         2024-03-25T05:16:40Z
clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole   2024-03-25T05:16:41Z

Memeriksa load balancer

Setelah migrasi, Anda tidak perlu mengubah setelan apa pun di load balancer karena Anda mempertahankan nilai VIP dan nodePort yang sama. Tabel berikut menjelaskan pemetaan dari VIP ke alamat IP node:nodePort.

Cluster admin HA

Traffic ke node bidang kontrol

Google Distributed Cloud secara otomatis menangani load balancing traffic bidang kontrol untuk cluster admin HA. Meskipun Anda tidak perlu mengonfigurasi pemetaan di load balancer, Anda harus menentukan alamat IP di kolom loadBalancer.vips.controlPlaneVIP.

Traffic ke layanan di node add-on

Jika cluster admin Anda memiliki nilai untuk addonsNodePort, Anda akan melihat pemetaan ke alamat IP dan nilai nodePort untuk traffic ke layanan di node add-on:

  • (addonsVIP:8443) -> (NODE_IP_ADDRESSES:addonsNodePort)

Anda harus memiliki pemetaan ini untuk semua node di cluster admin, baik node control plane maupun node add-on.

Cluster admin non-HA

Traffic bidang kontrol

Berikut ini menunjukkan pemetaan ke alamat IP dan nilai nodePort untuk node bidang kontrol:

  • (controlPlaneVIP:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort)

Anda harus memiliki pemetaan ini untuk semua node di cluster admin, baik node control plane maupun node add-on.

Traffic ke layanan di node add-on

Jika cluster admin memiliki nilai untuk addonsNodePort, Anda harus memiliki pemetaan berikut ke alamat IP dan nilai nodePort untuk layanan yang berjalan di node add-on:

  • (addonsVIP:8443) -> (NODE_IP_ADDRESSES:addonsNodePort)

Anda harus memiliki pemetaan ini untuk semua node di cluster admin, baik node control plane maupun node add-on.

Cluster pengguna

Traffic bidang kontrol

Berikut ini menunjukkan pemetaan ke alamat IP dan nilai nodePort untuk traffic bidang kontrol:

  • (controlPlaneVIP:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort)
  • (controlPlaneVIP:8132) -> (NODE_IP_ADDRESSES:konnectivityServerNodePort)

Anda harus memiliki pemetaan ini untuk semua node di cluster admin, baik node bidang kontrol cluster admin maupun cluster pengguna.

Traffic bidang data

Berikut ini menunjukkan pemetaan ke alamat IP dan nilai nodePort untuk traffic bidang data:

  • (ingressVIP:80) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort)
  • (ingressVIP:443) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort)