Mengaktifkan Gateway multi-cluster


Halaman ini menunjukkan cara mengaktifkan pengontrol Gateway GKE multi-cluster, pengontrol yang dihosting Google yang menyediakan load balancer eksternal dan internal, untuk cluster GKE Anda. Untuk mempelajari cara menggunakan resource Gateway untuk load balancing container, lihat Men-deploy Gateway atau Men-deploy Gateway multi-cluster.

Pengontrol Gateway GKE multi-cluster menginstal GatewayClasses multi-cluster berikut di cluster Anda:

  • gke-l7-global-external-managed-mc untuk Gateway multi-cluster eksternal global
  • gke-l7-regional-external-managed-mc untuk Gateway multi-cluster eksternal regional
  • gke-l7-rilb-mc untuk Gateway multi-cluster internal regional
  • gke-l7-gxlb-mc untuk Gateway multi-cluster Klasik eksternal global

Pelajari lebih lanjut kemampuan berbagai GatewayClass di GKE.

Harga

Semua resource Compute Engine yang di-deploy melalui Pengontrol Gateway dikenai biaya untuk project tempat cluster GKE Anda berada. Pengontrol Gateway cluster tunggal ditawarkan tanpa biaya tambahan sebagai bagian dari harga GKE Standard dan Autopilot. Harga untuk Gateway multi-cluster dijelaskan di halaman harga Gateway dan Ingress Multi Cluster.

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 initialize gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Persyaratan GKE Gateway Controller

  • Untuk Standard, GKE versi 1.24 atau yang lebih baru.
  • Untuk Autopilot, GKE versi 1.26 atau yang lebih baru.
  • Google Cloud CLI versi 407.0.0 atau yang lebih baru.
  • Gateway API hanya didukung di cluster native VPC.
  • Jika menggunakan GatewayClass internal, Anda harus mengaktifkan subnet khusus proxy.
  • Cluster Anda harus mengaktifkan add-on HttpLoadBalancing.
  • Jika menggunakan Istio, Anda harus mengupgrade Istio ke salah satu versi berikut:
    • 1.15.2 atau yang lebih baru
    • 1.14.5 atau yang lebih baru
    • 1.13.9 atau yang lebih baru.
  • Jika menggunakan VPC Bersama, maka di project host, Anda perlu menetapkan peran Compute Network User ke akun Layanan GKE untuk project layanan tersebut.

Persyaratan Gateway Multi-cluster

Selain persyaratan pengontrol Gateway GKE, untuk deployment Gateway multi-cluster, pastikan Anda telah melakukan tugas-tugas berikut:

  • Aktifkan Gateway API di cluster konfigurasi Anda.
  • Aktifkan Workload Identity Federation for GKE di cluster Anda.
  • Lengkapi prasyarat umum perangkat untuk mendaftarkan cluster Anda.
  • Aktifkan Gateway multi-cluster berikut yang diperlukan API dalam project Anda:

    • Traffic Director API
    • Multi-cluster Services API
    • API Multi Cluster Ingress

    Jalankan perintah ini untuk mengaktifkan API yang diperlukan jika belum diaktifkan:

    gcloud services enable \
      trafficdirector.googleapis.com \
      multiclusterservicediscovery.googleapis.com \
      multiclusteringress.googleapis.com \
      --project=PROJECT_ID
    

    Ganti PROJECT_ID dengan project ID tempat cluster GKE Anda berjalan.

Batasan dan Batasan

Batasan dan masalah umum yang sama untuk Gateway cluster tunggal juga berlaku untuk Gateway multi-cluster.

Selain batasan Gateway cluster tunggal, batasan berikut juga berlaku untuk Gateway multi-cluster:

  • Load balancing ke backend di region yang berbeda tidak didukung dengan gke-l7-rilb-mc GatewayClass internal regional. Untuk mempelajari lebih lanjut berbagai fitur yang didukung oleh setiap GatewayClass, lihat Kemampuan GatewayClass.

  • Service tidak didukung sebagai backendRefs dengan Gateway multi-cluster. Gateway Multi-cluster hanya mendukung ServiceImport sebagai backendRefs yang valid.

  • Load balancing lintas project tidak didukung. Semua cluster (cluster konfigurasi dan cluster target) yang dihubungkan ke Gateway multi-cluster yang sama harus di-deploy dalam project host atau project layanan VPC Bersama yang sama. Untuk mengetahui informasi selengkapnya tentang topologi VPC Bersama yang didukung dengan Gateway multi-cluster, lihat Menggunakan Gateway multi-cluster dengan VPC Bersama.

  • Gateway Multi-Cluster bergantung pada MCS untuk menangani penemuan layanan lintas-cluster. Dengan demikian, eksposur Gateway Multi-Cluster layanan tunduk pada semua Persyaratan Layanan Multi-Cluster.

Kuota

Gateway GKE menggunakan kuota Cloud Load Balancing untuk membatasi jumlah resource yang dapat dibuat oleh pengontrol Gateway untuk mengelola traffic masuk yang dirutekan ke cluster GKE.

Menyiapkan lingkungan untuk Gateway multi-cluster

Perlu beberapa cluster GKE untuk menyelesaikan contoh dalam Men-deploy Gateway multi-cluster. Semua cluster terdaftar ke armada yang sama sehingga Gateway dan Layanan multi-cluster dapat beroperasi di semua cluster tersebut.

Langkah-langkah berikut akan men-deploy tiga cluster GKE di dua region berbeda dalam project Anda:

  • us-west1-a/gke-west-1
  • us-west1-a/gke-west-2
  • us-east1-b/gke-east-1

Tindakan ini akan membuat topologi cluster berikut:

Topologi cluster yang menunjukkan hubungan antara region, fleet, dan project.

Cluster GKE ini digunakan untuk mendemonstrasikan load balancing multi-region dan pemisahan traffic multi-cluster berwarna biru-hijau menggunakan Gateway eksternal dan internal.

Men-deploy cluster

Pada langkah ini, Anda akan men-deploy tiga cluster GKE ke region us-east1 dan us-west1.

  1. Buat cluster GKE di us-west1 bernama gke-west-1:

    gcloud container clusters create gke-west-1 \
        --gateway-api=standard \
        --zone=us-west1-a \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --project=PROJECT_ID
    

    Ganti kode berikut:

    • PROJECT_ID: project ID tempat cluster GKE Anda berjalan.
    • VERSION: versi GKE, 1.24 atau yang lebih baru.
  2. Buat cluster GKE lain di us-west1 (atau region yang sama dengan cluster sebelumnya) bernama gke-west-2:

    gcloud container clusters create gke-west-2 \
        --gateway-api=standard \
        --zone=us-west1-a \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --project=PROJECT_ID
    
  3. Buat cluster GKE di us-east1 (atau region yang berbeda dengan yang sebelumnya) bernama gke-east-1

    gcloud container clusters create gke-east-1 \
        --gateway-api=standard \
        --zone=us-east1-b \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --cluster-version=VERSION \
        --project=PROJECT_ID
    

Mengonfigurasi kredensial cluster

Langkah ini akan mengonfigurasi kredensial cluster dengan nama yang mudah diingat. Hal ini mempermudah beralih antar-cluster saat men-deploy resource di beberapa cluster.

  1. Ambil kredensial untuk cluster gke-west-1, gke-west-2, dan gke-east-1:

    gcloud container clusters get-credentials gke-west-1 --zone=us-west1-a --project=PROJECT_ID
    gcloud container clusters get-credentials gke-west-2 --zone=us-west1-a --project=PROJECT_ID
    gcloud container clusters get-credentials gke-east-1 --zone=us-east1-b --project=PROJECT_ID
    

    Tindakan ini akan menyimpan kredensial secara lokal sehingga Anda dapat menggunakan klien kubectl untuk mengakses server API cluster. Secara default, nama yang dibuat secara otomatis dibuat untuk kredensial.

  2. Ganti nama konteks cluster agar lebih mudah dirujuk di lain waktu:

    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-1 gke-west-1
    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-2 gke-west-2
    kubectl config rename-context gke_PROJECT_ID_us-east1-b_gke-east-1 gke-east-1
    

    Ganti PROJECT_ID dengan project ID tempat cluster Anda di-deploy.

Mendaftarkan cluster ke fleet

  1. Setelah ketiga cluster berhasil dibuat, Anda harus mendaftarkan cluster ini ke fleet project Anda. Dengan mengelompokkan cluster GKE Anda dalam satu fleet, cluster tersebut dapat ditarget oleh Gateway multi-cluster.

    gcloud container fleet memberships register gke-west-1 \
         --gke-cluster us-west1-a/gke-west-1 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud container fleet memberships register gke-west-2 \
         --gke-cluster us-west1-a/gke-west-2 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
    gcloud container fleet memberships register gke-east-1 \
         --gke-cluster us-east1-b/gke-east-1 \
         --enable-workload-identity \
         --project=PROJECT_ID
    
  2. Konfirmasi bahwa cluster telah berhasil didaftarkan ke fleet:

    gcloud container fleet memberships list --project=PROJECT_ID
    

    Outputnya akan mirip dengan berikut ini:

    NAME        EXTERNAL_ID                           LOCATION
    gke-east-1  45a80b37-4b00-49aa-a68b-b430fce1e3f0  us-east1
    gke-west-2  ac7087a5-f5ee-401e-b430-57f3af141239  us-west1
    gke-west-1  549efe3a-b18e-4eb9-8796-e50b7967cde2  us-west1
    

Mengaktifkan Layanan multi-cluster dalam fleet

  1. Aktifkan Layanan multi-cluster di fleet Anda untuk cluster yang terdaftar. Langkah ini memungkinkan pengontrol MCS untuk tiga cluster yang terdaftar ke fleet Anda, sehingga pengontrol tersebut dapat mulai memproses dan mengekspor Layanan.

    gcloud container fleet multi-cluster-services enable \
        --project PROJECT_ID
    
  2. Berikan izin Identity and Access Management (IAM) yang diperlukan oleh pengontrol MCS:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \
        --role "roles/compute.networkViewer" \
        --project=PROJECT_ID
    

    Ganti PROJECT_ID dengan project ID tempat cluster Anda di-deploy.

  3. Pastikan MCS sudah diaktifkan untuk cluster yang terdaftar. Anda akan melihat keanggotaan untuk tiga cluster yang terdaftar. Mungkin perlu waktu beberapa menit untuk menampilkan semua cluster.

    gcloud container fleet multi-cluster-services describe --project=PROJECT_ID
    

    Outputnya mirip dengan hal berikut ini:

    createTime: '2023-10-12T06:14:33.466903587Z'
    membershipStates:
      projects/441323991697/locations/us-east1/memberships/gke-east-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:28.395318091Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:30.534594027Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-2:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2023-10-12T06:15:29.110582109Z'
    name: projects/pierre-louis-playground/locations/global/features/multiclusterservicediscovery
    resourceState:
      state: ACTIVE
    spec: {}
    updateTime: '2023-10-12T06:15:31.027276757Z'
    

Aktifkan Gateway multi-cluster dalam fleet

Pengontrol Gateway GKE multi-cluster mengatur deployment Gateway multi-cluster.

Saat mengaktifkan pengontrol Gateway multi-cluster, Anda harus memilih cluster konfigurasi. Cluster konfigurasi adalah cluster GKE tempat resource Gateway (Gateway, Routes, Kebijakan) di-deploy. Ini adalah tempat terpusat yang mengontrol perutean di seluruh cluster Anda. Lihat Desain cluster konfigurasi untuk membantu Anda memutuskan cluster mana yang akan dipilih sebagai cluster konfigurasi.

  1. Aktifkan Gateway multi-cluster dan tentukan cluster konfigurasi di fleet Anda. Perhatikan bahwa Anda selalu dapat memperbarui cluster konfigurasi di lain waktu. Contoh ini menentukan gke-west-1 sebagai cluster konfigurasi yang akan menghosting resource untuk Gateway multi-cluster.

    gcloud container fleet ingress enable \
        --config-membership=projects/PROJECT_ID/locations/us-west1-a/memberships/gke-west-1 \
        --project=PROJECT_ID
    
  2. Berikan izin Identity and Access Management (IAM) yang diperlukan oleh pengontrol Gateway multi-cluster:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
        --role "roles/container.admin" \
        --project=PROJECT_ID
    

    Ganti PROJECT_ID dan PROJECT_NUMBER dengan project ID dan nomor project tempat cluster Anda di-deploy.

  3. Pastikan pengontrol Gateway GKE telah diaktifkan untuk armada Anda:

    gcloud container fleet ingress describe --project=PROJECT_ID
    

    Outputnya mirip dengan hal berikut ini:

    createTime: '2023-10-12T06:23:06.732858524Z'
    membershipStates:
      projects/441323991697/locations/us-east1/memberships/gke-east-1:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815839024Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-1:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815837031Z'
      projects/441323991697/locations/us-west1/memberships/gke-west-2:
        state:
          code: OK
          updateTime: '2023-10-12T06:30:08.815840985Z'
    name: projects/pierre-louis-playground/locations/global/features/multiclusteringress
    resourceState:
      state: ACTIVE
    spec:
      multiclusteringress:
        configMembership: projects/pierre-louis-playground/locations/us-west1/memberships/gke-west-1
    state:
      state:
        code: OK
        description: Ready to use
        updateTime: '2023-10-12T06:23:51.317464415Z'
    updateTime: '2023-10-12T06:30:09.439319551Z'
    
  4. Konfirmasi bahwa GatewayClasses ada di cluster konfigurasi Anda:

    kubectl get gatewayclasses --context=gke-west-1
    

    Outputnya mirip dengan hal berikut ini:

    NAME                                  CONTROLLER                  ACCEPTED   AGE
    gke-l7-global-external-managed        networking.gke.io/gateway   True       78m
    gke-l7-global-external-managed-mc     networking.gke.io/gateway   True       4m22s
    gke-l7-gxlb                           networking.gke.io/gateway   True       78m
    gke-l7-gxlb-mc                        networking.gke.io/gateway   True       4m23s
    gke-l7-regional-external-managed      networking.gke.io/gateway   True       78m
    gke-l7-regional-external-managed-mc   networking.gke.io/gateway   True       4m22s
    gke-l7-rilb                           networking.gke.io/gateway   True       78m
    gke-l7-rilb-mc                        networking.gke.io/gateway   True       4m22s
    

    Output ini mencakup GatewayClass gke-l7-global-external-managed-mc, gke-l7-regional-external-managed-mc, gke-l7-gxlb-mc untuk Gateway multi-cluster eksternal, dan GatewayClass gke-l7-rilb-mc untuk Gateway multi-cluster internal.

  5. Alihkan konteks kubectl ke cluster konfigurasi:

    kubectl config use-context gke-west-1
    

Sekarang Anda siap untuk mulai men-deploy Gateway multi-cluster di cluster konfigurasi.

Pemecahan masalah

Bagian ini menunjukkan cara menyelesaikan masalah terkait pengaktifan pengontrol Gateway multi-cluster.

GatewayClass tidak tersedia di cluster konfigurasi

Error berikut mungkin terjadi saat Anda menjalankan perintah kubectl get gatewayclasses:

error: the server doesn't have a resource type "gatewayclasses"

Untuk mengatasi masalah ini, instal Gateway API di cluster Anda:

gcloud container clusters update CLUSTER_NAME \
    --gateway-api=standard \
    --region=COMPUTE_REGION

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster Anda.
  • COMPUTE_REGION: region Compute Engine Anda. Untuk cluster zona, gunakan --zone=COMPUTE_ZONE.

Masalah Umum

  • Ada masalah umum terkait pengontrol Gateway multi-cluster yang mungkin gagal dimulai. Untuk menghindari masalah ini, aktifkan Gateway API di cluster konfigurasi dan sertakan CRD sebelum fitur traffic masuk Armada diaktifkan.
  • Gateway Multi-cluster dapat membocorkan resource load balancer dalam skenario berikut:
    • Fitur traffic masuk Armada diupdate dengan cluster konfigurasi baru yang tidak memiliki semua resource Gateway yang ada di cluster konfigurasi saat ini.
    • Fitur Fleet ingress dinonaktifkan saat resource Gateway yang merujuk ke GatewayClass multi-cluster ada di cluster konfigurasi.
  • Multi-cluster Gateway berjalan sebagai layanan global. Jika pengontrol Gateway multi-cluster mengalami kegagalan bidang kontrol Armada (Hub) regional, pengontrol tersebut akan merespons dengan kegagalan statis dan tidak membuat perubahan load balancer lebih lanjut hingga region telah dikembalikan ke layanan.

Langkah selanjutnya