Mengaktifkan Gateway multi-cluster


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

Pengontrol Gateway GKE multi-cluster menginstal GatewayClass multi-cluster 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 dengan 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 dalam Halaman harga Multi Cluster Ingress dan Gateway.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Mengaktifkan 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 Anda menggunakan VPC Bersama, maka dalam project host, Anda perlu menetapkan peran Compute Network User ke akun Layanan GKE untuk project layanan.

Persyaratan Gateway Multi-cluster

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

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

    • API Mesh Layanan Cloud
    • 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 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 selengkapnya tentang fitur berbeda 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 target cluster) yang terpasang ke Gateway multi-cluster yang sama harus di-deploy dalam project host VPC Bersama atau project layanan yang sama. Untuk selengkapnya informasi tentang topologi VPC Bersama yang didukung dengan Gateway, lihat Menggunakan Gateway multi-cluster dengan VPC Bersama.

  • Gateway Multi-Cluster bergantung pada MCS untuk menangani layanan lintas cluster penemuan. Dengan demikian, layanan yang diekspos ke Gateway Multi-Cluster tunduk pada semua layanan Multi Cluster Service Persyaratan.

Kuota

Gateway GKE menggunakan kuota Cloud Load Balancing untuk membatasi jumlah sumber daya yang dapat dibuat {i>Gateway controller<i} 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.

  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. Memberikan 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 agar semua klaster dapat 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, Rute, 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 dapat mengupdate cluster konfigurasi kapan saja. 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. Memberikan izin Identity and Access Management (IAM) yang diperlukan oleh multi-cluster Pengontrol gateway:

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

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

  3. Pastikan bahwa pengontrol Gateway GKE diaktifkan untuk perangkat 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 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 multi-cluster eksternal Gateway 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 menampilkan cara menyelesaikan masalah yang terkait dengan multi-cluster Pengaktifan pengontrol gateway.

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 yang telah diketahui pada {i>controller<i} Gateway multi-cluster, yang mungkin gagal dimulai. Untuk menghindari masalah ini, aktifkan Gateway API di cluster konfigurasi dan menyertakan CRD sebelum traffic masuk Armada diaktifkan.
  • Gateway Multi-cluster dapat membocorkan resource load balancer dalam skenario berikut:
    • Fitur masuk Armada diperbarui dengan cluster konfigurasi baru yang tidak memiliki semua resource Gateway yang ada di cluster konfigurasi.
    • Fitur masuk Armada dinonaktifkan saat resource Gateway yang mereferensikan GatewayClass multi-cluster yang ada pada konfigurasi .
  • Multi-cluster Gateway berjalan sebagai layanan global. Jika Gateway multi-cluster mengalami kegagalan bidang kontrol Armada (Hub) regional, merespons dengan kegagalan statis dan tidak membuat perubahan load balancer lebih lanjut region telah dikembalikan ke layanan.

Langkah selanjutnya