Bersiap untuk menyiapkan dengan GKE Gateway API

Konfigurasi yang dijelaskan dalam dokumen ini didukung untuk pelanggan Pratinjau, tetapi kami tidak merekomendasikannya untuk pengguna Cloud Service Mesh baru. Untuk mengetahui informasi selengkapnya, lihat ringkasan Cloud Service Mesh.

Panduan ini menjelaskan cara menyiapkan lingkungan untuk penggunaan Google Kubernetes Engine Gateway API dengan Cloud Service Mesh. Pada level yang tinggi, Anda harus melakukan langkah-langkah berikut:

  1. Aktifkan layanan Google Cloud API yang diperlukan.
  2. Men-deploy cluster GKE.
  3. Mengonfigurasi izin IAM.
  4. Instal definisi resource kustom (CRD) yang diperlukan.
  5. Mendaftarkan cluster ke fleet.
  6. [Opsional] Mengaktifkan Layanan multi-cluster (Penemuan Layanan Multi-Cluster).
  7. Aktifkan mesh layanan.

Jika Anda tidak menggunakan GKE, gunakan API perutean layanan dan buat resource Mesh.

Sebelum memulai

Pastikan komponen deployment Anda memenuhi persyaratan berikut:

  • GKE harus versi 1.20 atau yang lebih baru.
  • Hanya paket data dengan xDS versi 3 API dan yang lebih baru yang didukung.
    • Minimum Envoy versi 1.20.0
    • Versi generator bootstrap gRPC minimum v0.14.0
  • Cluster GKE harus dalam mode native VPC (IP Alias).
  • Cluster Kubernetes yang dikelola sendiri di Compute Engine, berbeda dengan GKE, tidak didukung.
  • Semua batasan tambahan yang tercantum untuk fungsi Gateway di GKE berlaku untuk integrasi Cloud Service Mesh dengan GKE Gateway API.
  • Akun layanan untuk node GKE dan Pod Anda harus memiliki izin untuk mengakses Traffic Director API. Untuk informasi selengkapnya tentang izin yang diperlukan, lihat Mengaktifkan akun layanan untuk mengakses Traffic Director API.
  • Penggunaan resource per project dan batasan kuota layanan backend berlaku.

Mengaktifkan layanan Google Cloud API yang diperlukan

  1. Jalankan perintah berikut untuk mengaktifkan API yang diperlukan, jika API tersebut belum diaktifkan di project Anda:

    gcloud services enable --project=PROJECT_ID \
      container.googleapis.com \
      gkehub.googleapis.com \
      multiclusteringress.googleapis.com \
      trafficdirector.googleapis.com \
      networkservices.googleapis.com
    
  2. Jika Anda berencana untuk menyertakan lebih dari satu cluster di fleet Anda, aktifkan multiclusterservicediscovery API:

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

Menerapkan cluster GKE

Gunakan petunjuk ini untuk men-deploy cluster GKE.

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

    gcloud container clusters create gke-1 \
      --zone=us-west1-a \
      --enable-ip-alias \
      --workload-pool=PROJECT_ID.svc.id.goog \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --enable-mesh-certificates \
      --release-channel=regular \
      --project=PROJECT_ID
    
    • --enable-ip-alias: Flag ini membuat cluster native VPC dan membuat alamat IP Pod dapat dirutekan dalam jaringan VPC.
    • --workload-pool: Flag ini memungkinkan cluster Anda berpartisipasi dalam kumpulan identitas workload project.
    • --scopes: Flag ini menentukan cakupan OAuth yang ditetapkan ke node cluster.
    • --release-channel: Flag ini menunjukkan saluran regular.
    • --enable-mesh-certificates: Tanda ini mengaktifkan fitur mTLS otomatis Cloud Service Mesh jika berpotensi tersedia di masa mendatang.
  2. Dapatkan kredensial cluster:

    gcloud container clusters get-credentials gke-1 --zone=us-west1-a
    
  3. Ganti nama konteks cluster:

    kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-1 gke-1
    

Mengonfigurasi izin IAM untuk bidang data

Untuk deployment demonstrasi ini, Anda memberikan peran klien Cloud Service Mesh roles/trafficdirector.client kepada semua pengguna yang terautentikasi, termasuk semua akun layanan, di cluster GKE. Peran IAM ini diperlukan untuk memberikan otorisasi kepada klien Cloud Service Mesh di bidang data, seperti Envoys, untuk menerima konfigurasi dari Cloud Service Mesh.

Jika Anda tidak ingin memberikan peran klien kepada semua pengguna terautentikasi dan lebih memilih untuk membatasi peran ke akun layanan, lihat panduan identitas workload GKE untuk menyiapkan akun layanan Kubernetes khusus dengan peran roles/trafficdirector.client untuk layanan Anda.

  1. Berikan peran client ke akun layanan tersebut:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \
      --role "roles/trafficdirector.client"
    

Menginstal definisi resource kustom yang diperlukan

  1. Instal definisi resource kustom (CRD) yang diperlukan untuk menggunakan Gateway API dengan Cloud Service Mesh:

    kubectl apply -k "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v0.6.0"
    
    kubectl kustomize "https://github.com/GoogleCloudPlatform/gke-networking-recipes.git/gateway-api/config/mesh/crd" \
    | kubectl apply -f -
    
  2. Pastikan CRD yang diperlukan terinstal secara otomatis di cluster dengan menjalankan perintah berikut:

    kubectl get crds
    

    Outputnya mencantumkan CRD berikut dan lainnya yang tidak terkait dengan Gateway API, semuanya dengan tanggal pembuatan yang berbeda:

    NAME                                             CREATED AT
    gatewayclasses.gateway.networking.k8s.io                           2023-08-08T05:29:03Z
    gateways.gateway.networking.k8s.io                                 2023-08-08T05:29:03Z
    grpcroutes.gateway.networking.k8s.io                               2023-08-08T05:29:03Z
    httproutes.gateway.networking.k8s.io                               2023-08-08T05:29:03Z
    referencegrants.gateway.networking.k8s.io                          2023-08-08T05:29:04Z
    tcproutes.gateway.networking.k8s.io                                2023-08-08T05:29:04Z
    tdgrpcroutes.net.gke.io                                            2023-08-08T05:29:23Z
    tdmeshes.net.gke.io                                                2023-08-08T05:29:23Z
    tlsroutes.gateway.networking.k8s.io                                2023-08-08T05:29:05Z
    udproutes.gateway.networking.k8s.io                                2023-08-08T05:29:05Z
    

Resource kustom tdmeshes.net.gke.io dan tdgrpcroutes.net.gke.io diinstal di langkah sebelumnya.

CRD yang merupakan bagian dari grup API net.gke.io bersifat khusus untuk GKE. Resource ini bukan bagian dari implementasi OSS Gateway API, yang berada dalam grup API networking.k8s.io.

Mendaftarkan cluster ke fleet

Setelah cluster berhasil dibuat, Anda harus mendaftarkan cluster tersebut ke fleet. Dengan mendaftarkan cluster ke fleet, Anda dapat mengaktifkan fitur secara selektif di cluster yang terdaftar.

  1. Daftarkan cluster ke fleet:

    gcloud container hub memberships register gke-1 \
      --gke-cluster us-west1-a/gke-1 \
      --location global \
      --project=PROJECT_ID
    
  2. Pastikan cluster terdaftar dengan fleet:

    gcloud container hub memberships list --project=PROJECT_ID
    

    Outputnya mirip dengan hal berikut ini:

    NAME   EXTERNAL_ID
    gke-1  657e835d-3b6b-4bc5-9283-99d2da8c2e1b
    

(Opsional) Mengaktifkan Penemuan Layanan Multi-Cluster

Dengan fitur Penemuan Layanan Multi-Cluster, Anda dapat mengekspor layanan lokal cluster ke semua cluster yang terdaftar ke fleet. Langkah ini bersifat opsional jika Anda tidak berencana untuk menyertakan lebih dari satu cluster di fleet Anda.

  1. Mengaktifkan Penemuan Layanan Multi-Cluster:

    gcloud container hub multi-cluster-services enable \
      --project PROJECT_ID
    
  2. Berikan peran Identity and Access Management (IAM) yang diperlukan untuk Penemuan Layanan Multi-Cluster:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \
      --role "roles/compute.networkViewer"
    
  3. Pastikan bahwa Penemuan Layanan Multi-Cluster diaktifkan untuk cluster yang terdaftar. Mungkin perlu waktu beberapa menit untuk menampilkan semua cluster:

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

    Anda akan melihat keanggotaan untuk gke-1, yang serupa dengan berikut:

    createTime: '2021-04-02T19:34:57.832055223Z'
    membershipStates
      projects/PROJECT_NUM/locations/global/memberships/gke-1:
        state:
          code: OK
          description: Firewall successfully updated
          updateTime: '2021-05-27T11:03:07.770208064Z'
    name: projects/PROJECT_NUM/locations/global/features/multiclusterservicediscovery
    resourceState:
      state: ACTIVE
    spec: {}
    updateTime: '2021-04-02T19:34:58.983512446Z'
    

Mengaktifkan mesh layanan GKE Cloud Service Mesh

Di bagian ini, Anda akan mengaktifkan mesh layanan.

  1. Aktifkan mesh layanan GKE Cloud Service Mesh di cluster yang didaftarkan dengan fleet Anda:

    gcloud container hub ingress enable \
    --config-membership=projects/PROJECT_ID/locations/global/memberships/gke-1 \
      --project=PROJECT_ID
    
  2. Pastikan fitur tersebut telah diaktifkan:

    gcloud container hub ingress describe --project=PROJECT_ID
    

    Anda akan melihat output yang mirip dengan berikut ini:

    createTime: '2021-05-26T13:27:37.460383111Z'
    membershipStates:
      projects/PROJECT_NUM/locations/global/memberships/gke-1:
        state:
          code: OK
          updateTime: '2021-05-27T15:08:19.397896080Z'
    resourceState:
     state: ACTIVE
    spec:
      multiclusteringress:
        configMembership: projects/PROJECT_ID/locations/global/memberships/gke-1
    state:
      state:
        code: OK
        description: Ready to use
        updateTime: '2021-05-26T13:27:37.899549111Z'
    updateTime: '2021-05-27T15:08:19.397895711Z'
    
  3. Berikan peran Identity and Access Management (IAM) berikut, yang diperlukan oleh pengontrol Gateway API:

    export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value (projectNumber)")
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
      --role "roles/container.developer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \
      --role "roles/compute.networkAdmin"
    

Langkah selanjutnya

Untuk menyiapkan contoh deployment, baca panduan berikut: