Mengaktifkan Gateway multi-cluster


Halaman ini menunjukkan cara mengaktifkan Gateway GKE Controller multi-cluster, yakni 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.

GKE Gateway Controller multi-cluster menginstal GatewayClass 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 akan dikenai biaya sesuai 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 Multi Cluster Ingress.

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.

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, di project host, Anda harus menetapkan peran Compute Network User ke Akun Layanan GKE untuk project layanan.

Persyaratan Gateway multi-cluster

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

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

    • Cloud Service Mesh 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 Pembatasan

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

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

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

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

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

  • Load balancing lintas-VPC tidak didukung. Semua cluster (cluster konfigurasi dan cluster target) yang dilampirkan ke Gateway multi-cluster yang sama harus di-deploy di VPC yang sama.

  • Multi-cluster Gateway bergantung pada MCS untuk menangani penemuan layanan lintas cluster. Dengan demikian, layanan yang diekspos oleh Gateway multi-cluster tunduk pada semua persyaratan Layanan Multi-cluster.

Kuota

GKE Gateway 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 Anda 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.

Cluster akan terdaftar ke fleet project Anda. Dengan mengelompokkan cluster GKE Anda dalam satu fleet, cluster tersebut dapat ditarget oleh Gateway multi-cluster.

  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 \
        --enable-fleet \
        --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 \
        --enable-fleet \
        --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 \
        --enable-fleet \
        --project=PROJECT_ID
    
  4. 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
    

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.

Mengaktifkan Layanan multi-cluster di 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 hingga semua cluster ditampilkan.

    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'
    

Mengaktifkan Gateway multi-cluster di 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, Policies) di-deploy. Ini adalah tempat terpusat yang mengontrol pemilihan rute di seluruh cluster Anda. Lihat Desain cluster konfigurasi untuk membantu Anda menentukan cluster mana yang akan dipilih sebagai cluster konfigurasi.

  1. Aktifkan Gateway multi-cluster dan tentukan cluster konfigurasi Anda di fleet. Perlu diperhatikan bahwa Anda selalu dapat memperbarui cluster konfigurasi di lain waktu. Contoh ini menetapkan 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/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 GKE Gateway telah diaktifkan untuk fleet 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. Pastikan GatewayClass 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 pada pengontrol Gateway multi-cluster yang mungkin gagal dimulai. Untuk menghindari masalah ini, aktifkan Gateway API di cluster konfigurasi dan sertakan CRD sebelum fitur ingress Arah diaktifkan.
  • Gateway Multi-cluster dapat membocorkan resource load balancer dalam skenario berikut:
    • Fitur ingress Fleet diupdate dengan cluster konfigurasi baru yang tidak memiliki semua resource Gateway yang ada di cluster konfigurasi saat ini.
    • Fitur ingress Fleet dinonaktifkan saat resource Gateway yang mereferensikan GatewayClass multi-cluster ada di cluster konfigurasi.
  • Multi-cluster Gateway berjalan sebagai layanan global. Jika pengontrol Gateway multi-cluster mengalami kegagalan bidang kontrol regional Fleet (Hub), pengontrol tersebut akan merespons dengan kegagalan statis dan tidak membuat perubahan load balancer lebih lanjut hingga region tersebut dikembalikan ke layanan.

Langkah selanjutnya