Menyiapkan Layanan multi-cluster dengan VPC Bersama


Halaman ini berisi penjelasan mengenai skenario Multi-cluster Services (MCS) umum. Skenario yang ditampilkan pada halaman ini memiliki karakteristik berikut:

  • Dua cluster GKE: Cluster GKE pertama terdaftar ke fleet project miliknya sendiri. Ini adalah project host fleet. Cluster GKE kedua didaftarkan ke fleet yang sama, meskipun pada skenario tertentu cluster tersebut tidak akan berada dalam project yang sama. Kedua cluster GKE tersebut adalah cluster VPC native.
  • Jaringan VPC yang sama: Kedua cluster GKE menggunakan subnet di jaringan VPC Bersama yang sama.
  • Workload Identity Federation for GKE diaktifkan di kedua cluster.

Terminologi

Istilah project host VPC Bersama dan project host fleet GKE memiliki arti yang berbeda.

  • Project host VPC Bersama adalah project yang berisi jaringan VPC Bersama.
  • Project host fleet GKE adalah project yang berisi fleet, sebagai tempat Anda mendaftarkan cluster.

Skenario

Tabel berikut menjelaskan skenario MCS umum:

Skenario Project host fleet (project yang berisi cluster pertama) Lokasi cluster kedua
Cluster di project layanan VPC Bersama yang sama Project layanan VPC Bersama Project layanan VPC Bersama yang sama seperti pada cluster pertama
Project host VPC Bersama sebagai project host fleet (Satu cluster di project host VPC Bersama, cluster kedua di project layanan VPC Bersama) Project host VPC Bersama Project layanan VPC Bersama
Cluster di project layanan VPC Bersama yang berbeda Project layanan VPC Bersama Project layanan VPC Bersama yang berbeda

Prasyarat

Sebelum menyiapkan konfigurasi lintas project MCS, pastikan Anda sudah terbiasa dengan:

Cluster di project layanan VPC Bersama yang sama

Bagian ini memberikan contoh konfigurasi MCS yang melibatkan dua cluster GKE yang ada di project layanan VPC Bersama yang sama:

  • Kedua cluster tersebut menggunakan jaringan VPC Bersama yang sama di SHARED_VPC_HOST_PROJ.
  • Cluster GKE native VPC pertama FIRST_CLUSTER_NAME, dengan Workload Identity Federation untuk GKE diaktifkan, dibuat di FLEET_HOST_PROJ. Project host fleet adalah project layanan yang terhubung ke SHARED_VPC_HOST_PROJ dalam skenario ini.
  • Cluster GKE native VPC kedua SECOND_CLUSTER_NAME, dengan Workload Identity Federation untuk GKE diaktifkan, juga dibuat di FLEET_HOST_PROJ.

Mengaktifkan API yang diperlukan

Mengaktifkan API yang diperlukan. Output Google Cloud CLI akan menunjukkan apakah API sudah diaktifkan atau belum.

  1. Aktifkan Cloud DNS API:

    gcloud services enable dns.googleapis.com \
        --project SHARED_VPC_HOST_PROJ
    

    Dalam skenario ini, project host fleet adalah project layanan yang terhubung ke project host VPC Bersama. Cloud DNS API harus diaktifkan di project host VPC Bersama sebagai tempat jaringan VPC Bersama berada. GKE membuat zona pribadi yang dikelola Cloud DNS di project host dan memberikan otorisasi untuk mengakses jaringan VPC Bersama.

  2. Mengaktifkan GKE Hub (fleet) API. GKE Hub API harus diaktifkan hanya di project host fleet.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    Dengan mengaktifkan API ini di project host fleet, Anda akan membuat atau memastikan akun layanan berikut ada: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub..

  3. Mengaktifkan Cloud Service Mesh, Resource Manager, dan Layanan Multi-cluster Discovery API dalam project host fleet:

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project FLEET_HOST_PROJ
    

Mengaktifkan layanan Multi-cluster di project host fleet

  1. Aktifkan layanan multi-cluster di project host fleet:

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    Dengan mengaktifkan layanan multi-cluster di project host fleet, Anda akan membuat atau memastikan akun layanan berikut ada: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd..

Membuat binding IAM

  1. Buat binding IAM yang memberikan peran MCS Service Agent kepada akun layanan MCS project host fleet pada project host VPC Bersama:

    gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd." \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  2. Buat binding IAM yang memberikan peran Network User kepada akun layanan MCS project host fleet pada project miliknya sendiri:

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

    Karena skenario ini menggunakan Workload Identity Federation for GKE, fleet situs web menghosting Akun layanan GKE Pengimpor MCS memerlukan peran Pengguna Jaringan untuk proyeknya sendiri.

    Ganti kode berikut:

    • SHARED_VPC_HOST_PROJ: adalah ID project dari project host VPC Bersama
    • FLEET_HOST_PROJ_NUMBER: nomor project pada project host fleet, yang merupakan project layanan VPC Bersama untuk skenario ini
    • FLEET_HOST_PROJ: project ID dari project cluster pertama.

Mendaftarkan cluster ke fleet

  1. Mendaftarkan cluster pertama ke fleet. Flag --gke-cluster dapat digunakan untuk perintah ini karena cluster pertama terletak di project yang sama dengan fleet tempat pendaftaran cluster tersebut.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Ganti kode berikut:

    • MEMBERSHIP_NAME_1: ID unik untuk cluster ini dalam fleet ini. Misalnya, Anda dapat menggunakan nama cluster GKE pertama.
    • FLEET_HOST_PROJ: project ID untuk project host fleet, yang identik dengan project host VPC Bersama dalam skenario ini.
    • LOCATION: untuk cluster zona, ditetapkan zona Compute Engine yang berisi cluster; untuk cluster regional, ditetapkan region Compute Engine yang berisi cluster.
    • FIRST_CLUSTER_NAME: nama cluster pertama.
  2. Mendaftarkan cluster kedua ke project host fleet. Flag --gke-cluster dapat digunakan untuk perintah ini karena cluster kedua juga berada di project host fleet.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/SECOND_CLUSTER_NAME
    

    Ganti kode berikut:

    • MEMBERSHIP_NAME_2: ID unik untuk cluster ini dalam fleet ini. Misalnya, Anda dapat menggunakan nama cluster GKE kedua.
    • FLEET_HOST_PROJ: project ID untuk project host fleet, yang identik dengan project host VPC Bersama dalam skenario ini.
    • LOCATION: untuk cluster zona, ditetapkan zona Compute Engine yang berisi cluster; untuk cluster regional, ditetapkan region Compute Engine yang berisi cluster.
    • SECOND_CLUSTER_NAME: nama cluster kedua.

Membuat namespace umum untuk cluster

  1. Pastikan setiap cluster memiliki namespace untuk berbagi Layanan. Jika perlu, buat namespace menggunakan perintah berikut di setiap cluster:

    kubectl create ns NAMESPACE
    

    Mengganti NAMESPACE dengan nama untuk namespace.

Project host VPC bersama sebagai project host fleet

Bagian ini memberikan contoh konfigurasi MCS yang melibatkan dua cluster GKE yang ada:

  • Cluster GKE native VPC pertama FIRST_CLUSTER_NAME, dengan Workload Identity Federation for GKE diaktifkan, dibuat di FLEET_HOST_PROJ. Project host fleet juga merupakan project host VPC Bersama dalam skenario ini.
  • Cluster GKE native VPC kedua SECOND_CLUSTER_NAME, dengan Workload Identity Federation untuk GKE diaktifkan, telah dibuat di SECOND_CLUSTER_PROJ.

Mengaktifkan API yang diperlukan

Mengaktifkan API yang diperlukan. Output Google Cloud CLI akan menunjukkan apakah API sudah diaktifkan atau belum.

  1. Aktifkan Cloud DNS API:

    gcloud services enable dns.googleapis.com \
        --project FLEET_HOST_PROJ
    

    Dalam skenario ini, project host fleet juga menjadi project host VPC Bersama. Cloud DNS API harus diaktifkan di project host VPC Bersama sebagai tempat jaringan VPC Bersama berada. GKE membuat zona pribadi yang dikelola Cloud DNS di project host dan memberikan otorisasi untuk mengakses jaringan VPC Bersama.

  2. Mengaktifkan GKE Hub (fleet) API. GKE Hub API harus diaktifkan hanya di project host fleet.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    Dengan mengaktifkan GKE Hub API di project host fleet, Anda akan membuat atau memastikan akun layanan berikut ada: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub..

  3. Mengaktifkan Cloud Service Mesh, Resource Manager, dan Layanan Multi-cluster Discovery API, baik di project host fleet maupun di cluster kedua proyek:

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project FLEET_HOST_PROJ
    
    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project SECOND_CLUSTER_PROJ
    

Mengaktifkan layanan Multi-cluster di project host fleet

  1. Aktifkan layanan multi-cluster di project host fleet:

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    Dengan mengaktifkan layanan multi-cluster di project host fleet, Anda akan membuat atau memastikan akun layanan berikut ada: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd..

Membuat binding IAM

  1. Buat binding IAM yang memberikan peran GKE Service Agent kepada akun layanan fleet GKE project host fleet pada project cluster kedua:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub." \
        --role roles/gkehub.serviceAgent
    
  2. Buat binding IAM yang memberikan peran MCS Service Agent kepada akun layanan MCS project host fleet pada project cluster kedua:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd." \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  3. Buat binding IAM yang memberikan peran Network User ke setiap akun layanan MCS project untuk project-nya sendiri:

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

    Karena skenario ini menggunakan Workload Identity Federation for GKE, setiap project MCS Importer Akun layanan GKE memerlukan peran Pengguna Jaringan untuk proyek.

    Ganti kode berikut:

    • SECOND_CLUSTER_PROJ: project ID dari project cluster kedua
    • FLEET_HOST_PROJ: project ID dari project cluster pertama.
    • FLEET_HOST_PROJ_NUMBER: nomor project dari project host fleet, yang sama dengan project host VPC Bersama untuk skenario ini

Mendaftarkan cluster ke fleet

  1. Mendaftarkan cluster pertama ke fleet. Flag --gke-cluster dapat digunakan untuk perintah ini karena cluster pertama terletak di project yang sama dengan fleet tempat pendaftaran cluster tersebut.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Ganti kode berikut:

    • MEMBERSHIP_NAME_1: ID unik untuk cluster ini dalam fleet ini. Misalnya, Anda dapat menggunakan nama cluster GKE pertama.
    • FLEET_HOST_PROJ: project ID untuk project host fleet, yang identik dengan project host VPC Bersama dalam skenario ini.
    • LOCATION: untuk cluster zona, ditetapkan zona Compute Engine yang berisi cluster; untuk cluster regional, ditetapkan region Compute Engine yang berisi cluster.
    • FIRST_CLUSTER_NAME: nama cluster pertama.
  2. Mendaftarkan cluster kedua ke fleet. Flag --gke-uri harus digunakan untuk perintah ini karena cluster kedua tidak berada di project yang sama dengan fleet. Anda bisa mendapatkan seluruh URI cluster dengan menjalankan gcloud container clusters list --uri.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-uri https://container.googleapis.com/v1/projects/SECOND_CLUSTER_PROJ/locations/LOCATION/clusters/SECOND_CLUSTER_NAME
    

    Ganti kode berikut:

    • MEMBERSHIP_NAME_2: ID unik untuk cluster ini dalam fleet ini. Misalnya, Anda dapat menggunakan nama cluster GKE kedua.
    • FLEET_HOST_PROJ: project ID untuk project host fleet, yang identik dengan project host VPC Bersama dalam skenario ini.
    • LOCATION: mengganti LOCATION dengan:
      • zona Compute Engine cluster, jika cluster yang ada berupa cluster zona
      • region Compute Engine cluster, jika cluster yang ada berupa cluster regional
    • SECOND_CLUSTER_PROJECT: project yang berisi cluster kedua.
    • SECOND_CLUSTER_NAME: nama cluster kedua.

Membuat namespace umum untuk cluster

  1. Pastikan setiap cluster memiliki namespace untuk berbagi Layanan. Jika perlu, buat namespace menggunakan perintah berikut di setiap cluster:

    kubectl create ns NAMESPACE
    

    Mengganti NAMESPACE dengan nama untuk namespace.

Cluster di project layanan VPC Bersama yang berbeda

Bagian ini memberikan contoh konfigurasi MCS yang melibatkan dua cluster GKE yang ada, dan masing-masing dalam project layanan VPC Bersama yang berbeda.

  • Kedua cluster tersebut menggunakan jaringan VPC Bersama yang sama di SHARED_VPC_HOST_PROJ.
  • Cluster GKE native VPC pertama FIRST_CLUSTER_NAME, dengan Workload Identity Federation for GKE diaktifkan, dibuat di FLEET_HOST_PROJ. Project host fleet adalah project layanan yang terhubung ke SHARED_VPC_HOST_PROJ dalam skenario ini.
  • Cluster GKE native VPC kedua SECOND_CLUSTER_NAME, dengan Workload Identity Federation for GKE diaktifkan, dibuat di SECOND_CLUSTER_PROJ. SECOND_CLUSTER_PROJ juga merupakan project layanan yang terhubung ke SHARED_VPC_HOST_PROJ dalam skenario ini.

Mengaktifkan API yang diperlukan

Mengaktifkan API yang diperlukan. Output Google Cloud CLI akan menunjukkan apakah API sudah diaktifkan atau belum.

  1. Aktifkan Cloud DNS API:

    gcloud services enable dns.googleapis.com \
        --project SHARED_VPC_HOST_PROJ
    

    Dalam skenario ini, project host fleet adalah project layanan yang terhubung ke project host VPC Bersama. Cloud DNS API harus diaktifkan di project host VPC Bersama sebagai tempat jaringan VPC Bersama berada. GKE membuat zona pribadi yang dikelola Cloud DNS di project host dan memberikan otorisasi untuk mengakses jaringan VPC Bersama.

  2. GKE Hub (fleet) API. GKE Hub API hanya boleh diaktifkan di project host fleet FLEET_HOST_PROJ.

    gcloud services enable gkehub.googleapis.com \
        --project FLEET_HOST_PROJ
    

    Dengan mengaktifkan API ini di project host fleet, Anda akan membuat atau memastikan akun layanan berikut ada: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub..

  3. Mengaktifkan Cloud Service Mesh, Resource Manager, dan Layanan Multi-cluster Discovery API, baik di project host fleet maupun di cluster kedua proyek:

    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project=FLEET_HOST_PROJ
    
    gcloud services enable trafficdirector.googleapis.com \
        cloudresourcemanager.googleapis.com \
        multiclusterservicediscovery.googleapis.com \
        --project SECOND_CLUSTER_PROJ
    

Mengaktifkan layanan Multi-cluster di project host fleet

  1. Aktifkan layanan multi-cluster di project host fleet:

    gcloud container fleet multi-cluster-services enable \
        --project FLEET_HOST_PROJ
    

    Dengan mengaktifkan layanan multi-cluster di project host fleet, Anda akan membuat atau memastikan akun layanan berikut ada: service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd..

Membuat binding IAM

  1. Buat binding IAM yang memberikan peran GKE Service Agent kepada akun layanan Hub GKE project host fleet pada project cluster kedua:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-gkehub." \
        --role roles/gkehub.serviceAgent
    
  2. Buat binding IAM yang memberikan peran MCS Service Agent kepada akun layanan MCS project host fleet pada project cluster kedua:

    gcloud projects add-iam-policy-binding SECOND_CLUSTER_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd." \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  3. Buat binding IAM yang memberikan peran MCS Service Agent kepada akun layanan MCS project host fleet pada project host VPC Bersama:

    gcloud projects add-iam-policy-binding SHARED_VPC_HOST_PROJ \
        --member "serviceAccount:service-FLEET_HOST_PROJ_NUMBER@gcp-sa-mcsd." \
        --role roles/multiclusterservicediscovery.serviceAgent
    
  4. Buat binding IAM yang memberikan peran Network User ke setiap akun layanan MCS project untuk project-nya sendiri:

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

    Karena skenario ini menggunakan Workload Identity Federation for GKE, setiap project MCS Importer Akun layanan GKE memerlukan peran Pengguna Jaringan untuk proyek.

    Ganti baris berikut sesuai kebutuhan pada perintah sebelumnya:

    • SECOND_CLUSTER_PROJ: project ID dari project cluster kedua.
    • SHARED_VPC_HOST_PROJ adalah project ID dari project host VPC Bersama. Pada contoh ini, kedua cluster menggunakan jaringan VPC Bersama yang sama, tetapi keduanya tidak berada di project host VPC Bersama.
    • FLEET_HOST_PROJ: project ID dari project cluster pertama.
    • FLEET_HOST_PROJ_NUMBER: nomor project dari project host fleet.

Mendaftarkan cluster ke fleet

  1. Mendaftarkan cluster pertama ke fleet. Flag --gke-cluster dapat digunakan untuk perintah ini karena cluster pertama terletak di project yang sama dengan fleet tempat pendaftaran cluster tersebut.

    gcloud container fleet memberships register MEMBERSHIP_NAME_1 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-cluster=LOCATION/FIRST_CLUSTER_NAME
    

    Ganti kode berikut:

    • MEMBERSHIP_NAME_1: ID unik untuk cluster ini dalam fleet ini. Misalnya, Anda dapat menggunakan nama cluster GKE pertama.
    • FLEET_HOST_PROJ: project ID untuk project host fleet, yang identik dengan project host VPC Bersama dalam skenario ini.
    • LOCATION: untuk cluster zona, ditetapkan zona Compute Engine yang berisi cluster; untuk cluster regional, ditetapkan region Compute Engine yang berisi cluster.
    • FIRST_CLUSTER_NAME: nama cluster pertama.
  2. Mendaftarkan cluster kedua ke fleet. Flag --gke-uri harus digunakan untuk perintah ini karena cluster kedua tidak berada di project yang sama dengan fleet. Anda bisa mendapatkan seluruh URI cluster dengan menjalankan gcloud container clusters list --uri.

    gcloud container fleet memberships register MEMBERSHIP_NAME_2 \
        --project FLEET_HOST_PROJ \
        --enable-workload-identity \
        --gke-uri https://container.googleapis.com/v1/projects/SECOND_CLUSTER_PROJ/locations/LOCATION/clusters/SECOND_CLUSTER_NAME
    

    Ganti kode berikut:

    • MEMBERSHIP_NAME_2: ID unik untuk cluster ini dalam fleet ini. Misalnya, Anda dapat menggunakan nama cluster GKE kedua.
    • FLEET_HOST_PROJ: project ID untuk project host fleet, yang identik dengan project host VPC Bersama dalam skenario ini.
    • LOCATION: mengganti LOCATION dengan:
      • zona Compute Engine cluster, jika cluster yang ada berupa cluster zona
      • region Compute Engine cluster, jika cluster yang ada berupa cluster regional
    • SECOND_CLUSTER_PROJECT: project yang berisi cluster kedua.
    • SECOND_CLUSTER_NAME: nama cluster kedua.

Membuat namespace umum untuk cluster

  1. Pastikan setiap cluster memiliki namespace untuk berbagi Layanan. Jika perlu, buat namespace menggunakan perintah berikut di setiap cluster:

    kubectl create ns NAMESPACE
    

    Mengganti NAMESPACE dengan nama untuk namespace.

Langkah berikutnya