Menyiapkan Multi Cluster Ingress


Halaman ini menunjukkan cara merutekan traffic ke beberapa cluster Google Kubernetes Engine (GKE) di berbagai region menggunakan Multi Cluster Ingress, dengan contoh menggunakan dua cluster.

Untuk mengetahui perbandingan mendetail antara Multi Cluster Ingress (MCI), Gateway Multi-cluster (MCG), dan load balancer dengan Grup Endpoint Jaringan Mandiri (LB dan NEG Mandiri, lihat Memilih API load balancing multi-cluster untuk GKE.

Untuk mempelajari lebih lanjut cara men-deploy Multi Cluster Ingress, lihat Men-deploy Ingress di seluruh cluster.

Langkah-langkah ini memerlukan izin yang ditingkatkan dan harus dilakukan oleh administrator GKE.

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 dan batasan

Multi Cluster Ingress memiliki persyaratan berikut:

  • Google Cloud CLI versi 290.0.0 dan yang lebih baru.

Jika Anda menggunakan cluster mode Standar, pastikan Anda memenuhi persyaratan berikut. Cluster Autopilot sudah memenuhi persyaratan ini.

Multi Cluster Ingress memiliki batasan berikut:

  • Hanya didukung dengan Load Balancer Aplikasi eksternal.
  • Jangan membuat load balancer Compute Engine dalam project yang sama dengan awalan mci- yang tidak dikelola oleh Multi Cluster Ingress, atau load balancer tersebut akan dihapus. Google Cloud menggunakan awalan mci-[6 char hash] untuk mengelola resource Compute Engine yang di-deploy oleh Multi Cluster Ingress.
  • Konfigurasi HTTPS memerlukan alamat IP statis yang telah dialokasikan sebelumnya. HTTPS tidak didukung dengan alamat IP ephemeral.

Ringkasan

Dalam latihan ini, Anda melakukan langkah-langkah berikut:

  1. Pilih harga yang ingin Anda gunakan.
  2. Deploy cluster.
  3. Mengonfigurasi kredensial cluster.
  4. Daftarkan cluster ke fleet.
  5. Menentukan cluster konfigurasi. Klaster ini dapat berupa control plane khusus, atau dapat menjalankan beban kerja lain.

Diagram berikut menunjukkan tampilan lingkungan Anda setelah menyelesaikan latihan:

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

Dalam diagram, ada dua cluster GKE bernama gke-us dan gke-eu di region europe-west1 dan us-central1. Cluster terdaftar ke fleet sehingga pengontrol Multi Cluster Ingress dapat mengenalinya. Dengan fleet, Anda dapat mengelompokkan dan menormalisasi cluster GKE secara logis, sehingga mempermudah administrasi infrastruktur dan memungkinkan penggunaan fitur multi-cluster seperti Multi Cluster Ingress. Anda dapat mempelajari lebih lanjut manfaat fleet dan cara membuatnya di dokumentasi pengelolaan fleet.

Pilih harga

Jika Multi Cluster Ingress adalah satu-satunya kemampuan GKE Enterprise yang Anda gunakan, sebaiknya gunakan harga mandiri. Jika project Anda menggunakan komponen atau kemampuan GKE Enterprise lain di Google Cloud, Anda harus mengaktifkan seluruh platform GKE Enterprise. Dengan begitu, Anda dapat menggunakan semua fitur GKE Enterprise untuk satu biaya per vCPU.

API yang harus Anda aktifkan bergantung pada harga Multi Cluster Ingress yang Anda gunakan.

  • Jika GKE Enterprise API (anthos.googleapis.com) diaktifkan, project Anda akan ditagih sesuai dengan jumlah vCPU cluster dan harga GKE Enterprise.
  • Jika GKE Enterprise API dinonaktifkan, project Anda akan ditagih sesuai dengan jumlah pod backend Multi Cluster Ingress dalam project Anda.

Anda dapat mengubah model penagihan Multi Cluster Ingress dari mandiri ke GKE Enterprise, atau dari GKE Enterprise ke mandiri kapan saja tanpa memengaruhi traffic atau resource Multi Cluster Ingress.

Harga mandiri

Untuk mengaktifkan harga mandiri, lakukan langkah-langkah berikut:

  1. Pastikan GKE Enterprise API dinonaktifkan di project Anda:

    gcloud services list --project=PROJECT_ID | grep anthos.googleapis.com
    

    Ganti PROJECT_ID dengan project ID tempat cluster GKE Anda berjalan.

    Jika output-nya berupa respons kosong, GKE Enterprise API akan dinonaktifkan di project Anda dan semua resource Multi Cluster Ingress akan ditagih menggunakan harga mandiri.

  2. Aktifkan API yang diperlukan di dalam project Anda

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

Harga GKE Enterprise

Untuk mengaktifkan harga GKE Enterprise, aktifkan API yang diperlukan dalam project Anda:

gcloud services enable \
    anthos.googleapis.com \
    multiclusteringress.googleapis.com \
    gkehub.googleapis.com \
    container.googleapis.com \
    multiclusterservicediscovery.googleapis.com \
    --project=PROJECT_ID

Setelah anthos.googleapis.com diaktifkan di project Anda, semua cluster yang terdaftar ke Connect akan ditagih sesuai dengan harga GKE Enterprise.

Men-deploy cluster

Buat dua cluster GKE bernama gke-us dan gke-eu di region europe-west1 dan us-central1.

Autopilot

  1. Buat cluster gke-us di region us-central1:

    gcloud container clusters create-auto gke-us \
        --region=us-central1 \
        --release-channel=stable \
        --project=PROJECT_ID
    

    PROJECT_ID dengan project ID Google Cloud Anda

  2. Buat cluster gke-eu di region europe-west1:

    gcloud container clusters create-auto gke-eu \
        --region=europe-west1 \
        --release-channel=stable \
        --project=PROJECT_ID
    

Standar

Buat dua cluster dengan Workload Identity Federation for GKE diaktifkan.

  1. Buat cluster gke-us di region us-central1:

    gcloud container clusters create gke-us \
        --region=us-central1 \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=stable \
        --project=PROJECT_ID
    

    PROJECT_ID dengan project ID Google Cloud Anda

  2. Buat cluster gke-eu di region europe-west1:

    gcloud container clusters create gke-eu \
        --region=europe-west1 \
        --enable-ip-alias \
        --workload-pool=PROJECT_ID.svc.id.goog \
        --release-channel=stable \
        --project=PROJECT_ID
    

Mengonfigurasi kredensial cluster

Konfigurasikan kredensial untuk cluster Anda dan ganti nama konteks cluster untuk mempermudah beralih antar-cluster saat men-deploy resource.

  1. Ambil kredensial untuk cluster Anda:

    gcloud container clusters get-credentials gke-us \
        --region=us-central1 \
        --project=PROJECT_ID
    
    gcloud container clusters get-credentials gke-eu \
        --region=europe-west1 \
        --project=PROJECT_ID
    

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

  2. Ganti nama konteks cluster:

    kubectl config rename-context gke_PROJECT_ID_us-central1_gke-us gke-us
    kubectl config rename-context gke_PROJECT_ID_europe-west1_gke-eu gke-eu
    

Mendaftarkan cluster ke fleet

Daftarkan cluster Anda ke fleet project Anda sebagai berikut.

  1. Daftarkan cluster Anda:

    gcloud container fleet memberships register gke-us \
        --gke-cluster us-central1/gke-us \
        --enable-workload-identity \
        --project=PROJECT_ID
    
    gcloud container fleet memberships register gke-eu \
        --gke-cluster europe-west1/gke-eu \
        --enable-workload-identity \
        --project=PROJECT_ID
    
  2. Konfirmasi bahwa cluster Anda telah berhasil didaftarkan ke fleet:

    gcloud container fleet memberships list --project=PROJECT_ID
    

    Outputnya mirip dengan hal berikut ini:

    NAME                                  EXTERNAL_ID
    gke-us                                0375c958-38af-11ea-abe9-42010a800191
    gke-eu                                d3278b78-38ad-11ea-a846-42010a840114
    

Setelah mendaftarkan cluster, GKE akan men-deploy Pod gke-mcs-importer ke cluster Anda.

Anda dapat mempelajari lebih lanjut cara mendaftarkan cluster di artikel Mendaftarkan cluster GKE ke fleet Anda.

Menentukan cluster konfigurasi

Cluster konfigurasi adalah cluster GKE yang Anda pilih untuk menjadi titik kontrol pusat Ingress di seluruh cluster anggota. Cluster ini harus sudah terdaftar untuk fleet. Untuk mengetahui informasi selengkapnya, lihat Desain cluster konfigurasi.

Aktifkan Multi Cluster Ingress dan pilih gke-us sebagai cluster konfigurasi:

gcloud container fleet ingress enable \
    --config-membership=gke-us \
    --location=us-central1 \
    --project=PROJECT_ID

Cluster konfigurasi memerlukan waktu hingga 15 menit untuk mendaftar. Output yang berhasil mirip dengan hal berikut ini:

Waiting for Feature to be created...done.
Waiting for controller to start...done.

Output yang tidak berhasil mirip dengan hal berikut ini:

Waiting for controller to start...failed.
ERROR: (gcloud.container.fleet.ingress.enable) Controller did not start in 2 minutes. Please use the `describe` command to check Feature state for debugging information.

Jika kegagalan terjadi di langkah sebelumnya, periksa status fitur:

gcloud container fleet ingress describe \
    --project=PROJECT_ID

Output yang berhasil mirip dengan hal berikut ini:

createTime: '2021-02-04T14:10:25.102919191Z'
membershipStates:
 projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
 state:
   code: ERROR
   description: '...is not a VPC-native GKE Cluster.'
   updateTime: '2021-08-10T13:58:50.298191306Z'
 projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
 state:
   code: OK
   updateTime: '2021-08-10T13:58:08.499505813Z'

Untuk mempelajari lebih lanjut cara memecahkan masalah error dengan Multi Cluster Ingress, lihat Pemecahan masalah dan operasi.

VPC Bersama

Anda dapat men-deploy resource MultiClusterIngress untuk cluster di jaringan VPC Bersama, tetapi semua cluster GKE backend yang berpartisipasi harus berada dalam project yang sama. Memiliki cluster GKE di project yang berbeda menggunakan VIP Cloud Load Balancing yang sama tidak didukung.

Dalam jaringan VPC non-Berbagi, pengontrol Multi Cluster Ingress mengelola aturan firewall agar health check dapat diteruskan dari load balancer ke beban kerja container.

Di jaringan VPC Bersama, administrator project host harus secara manual membuat aturan firewall untuk traffic load balancer mewakili pengontrol Ingress Multi Cluster.

Perintah berikut menunjukkan aturan firewall yang harus Anda buat jika cluster berada di jaringan VPC Bersama. Rentang sumber adalah rentang yang digunakan load balancer untuk mengirim traffic ke backend. Aturan ini harus ada selama masa aktif operasional resource MultiClusterIngress.

Jika cluster berada di jaringan VPC Bersama, buat aturan firewall:

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
    --project=HOST_PROJECT \
    --network=SHARED_VPC \
    --direction=INGRESS \
    --allow=tcp:0-65535 \
    --source-ranges=130.211.0.0/22,35.191.0.0/16

Ganti kode berikut:

  • FIREWALL_RULE_NAME: nama aturan firewall baru yang Anda pilih.
  • HOST_PROJECT: ID project host VPC Bersama.
  • SHARED_VPC: nama jaringan VPC bersama.

Masalah umum

Bagian ini menjelaskan masalah umum Multi Cluster Ingress

InvalidValueError untuk kolom config_membership

Masalah umum mencegah Google Cloud CLI berinteraksi dengan Multi Cluster Ingress. Masalah ini diperkenalkan di versi 346.0.0 dan telah diperbaiki dalam versi 348.0.0. Sebaiknya jangan gunakan gcloud CLI versi 346.0.0 dan 347.0.0 dengan Multi Cluster Ingress.

Nilai tidak valid untuk kolom 'resource'

Google Cloud Armor tidak dapat berkomunikasi dengan cluster konfigurasi Multi Cluster Ingress yang berjalan pada versi GKE berikut:

  • 1.18.19-gke.1400 dan yang lebih baru
  • 1.19.10-gke.700 dan yang lebih baru
  • 1.20.6-gke.700 dan yang lebih baru

Saat Anda mengonfigurasi kebijakan keamanan Google Cloud Armor, pesan berikut akan muncul:

Invalid value for field 'resource': '{"securityPolicy": "global/securityPolicies/"}': The given policy does not exist

Untuk menghindari masalah ini, upgrade cluster konfigurasi ke versi 1.21 atau yang lebih baru, atau gunakan perintah berikut untuk mengupdate BackendConfig CustomResourceDefinition:

kubectl patch crd backendconfigs.cloud.google.com --type='json' -p='[{"op": "replace", "path": "/spec/versions/1/schema/openAPIV3Schema/properties/spec/properties/securityPolicy", "value":{"properties": {"name": {"type": "string"}}, "required": ["name" ],"type": "object"}}]'

Langkah selanjutnya