Mengaktifkan Workload Identity di GKE

Topik ini menjelaskan cara mengaktifkan Workload Identity untuk Apigee Hybrid di GKE.

Jika Anda menggunakan AKS atau EKS hybrid Apigee, ikuti petunjuk dalam Mengaktifkan Workload Identity Federation di AKS dan EKS.

Ringkasan

Workload Identity adalah cara agar aplikasi yang berjalan dalam GKE (Google Kubernetes Engine) dapat mengakses layanan Google Cloud. Untuk mengetahui ringkasan Workload Identity, lihat:

Akun layanan IAM Google Cloud adalah identitas yang dapat digunakan aplikasi untuk membuat permintaan ke Google API. Akun layanan ini disebut sebagai GSA (Akun Layanan Google) dalam dokumen tersebut. Untuk informasi lebih lanjut tentang GSA, lihat Akun layanan.

Secara terpisah, Kubernetes juga memiliki konsep akun layanan. Akun layanan memberikan identitas untuk proses yang berjalan di dalam Pod. Akun layanan Kubernetes adalah resource Kubernetes, sedangkan akun layanan Google khusus untuk Google Cloud. Untuk mengetahui informasi tentang akun layanan Kubernetes, lihat Mengonfigurasi Akun Layanan untuk Pod dalam dokumentasi Kubernetes.

Apigee membuat dan menggunakan akun layanan Kubernetes untuk setiap jenis komponen saat Anda pertama kali menginstal chart Helm untuk komponen tersebut. Dengan mengaktifkan Workload Identity, komponen hybrid dapat berinteraksi dengan akun layanan Kubernetes.

Variabel lingkungan yang digunakan dalam prosedur ini

Prosedur ini menggunakan variabel lingkungan berikut. Tetapkan string ini di command shell atau ganti dalam contoh kode dengan nilai sebenarnya:

  • CLUSTER_LOCATION: Region atau zona cluster Kubernetes Anda, misalnya: us-west1.
  • CLUSTER_NAME: Nama cluster Anda.
  • ENV_NAME: Lalu, nama lingkungan Apigee.
  • ORG_NAME: Nama organisasi Apigee Anda.
  • PROJECT_ID: ID project Google Cloud Anda.
  • NAMESPACE: Namespace Apigee Anda (biasanya "apigee").

Verifikasi variabel lingkungan:

echo $PROJECT_ID
echo $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $CLUSTER_NAME
CLUSTER_NAME

Lakukan inisialisasi variabel apa pun yang Anda perlukan:

export PROJECT_ID=my-project-id
export ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_LOCATION=my-cluster-location
export CLUSTER_NAME=hybrid-base-directory/apigeectl

File kunci Workload Identity dan akun layanan

Saat menjalankan Apigee Hybrid di GKE, praktik standarnya adalah membuat dan mendownload kunci pribadi (file .json) untuk setiap akun layanan. Saat menggunakan Workload Identity, Anda tidak perlu mendownload kunci pribadi akun layanan dan menambahkannya ke cluster GKE.

Jika telah mendownload file kunci akun layanan sebagai bagian dari penginstalan hybrid Apigee, Anda dapat menghapusnya setelah mengaktifkan Workload Identity. Pada sebagian besar penginstalan, keduanya berada dalam direktori untuk setiap karakter komponen.

Mengaktifkan Workload Identity untuk Apigee Hybrid

Ikuti petunjuk ini untuk mengonfigurasi Workload Identity untuk project Anda.

Penginstalan yang dimigrasikan dan Workload Identity

Jika Anda memigrasikan cluster dari pengelolaan apigeectl dengan alat migrasi Helm hybrid Apigee, sintaksis penggantian untuk Workload Identity akan berubah. Anda harus memeriksa properti berikut dalam file penggantian:

  • namespace wajib diisi. Contoh:
    instanceID: "hybrid-instance-1"
    namespace: "apigee"
    
  • Properti gcp.workloadIdentity.enabled menggantikan properti gcp.workloadIdentityEnabled. Contoh:
    gcp:
      workloadIdentity:
        enabled: true
  • Untuk penginstalan produksi, setiap komponen memiliki properti gsa. Nilai untuk properti ini adalah alamat email untuk akun layanan IAM Google untuk komponen yang sesuai. Contoh:
    watcher
      gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
    
  • Untuk penginstalan nonproduksi, Anda dapat menyediakan satu GSA di properti gcp.workloadIdentity.gsa.
    gcp
      workloadIdentity
        gsa: apigee-watcher@my-hybrid-project.iam.gserviceaccount.com
    
  • Dengan chart Helm untuk Apigee Hybrid, gabung GSA prod dan non-prod untuk Workload Identity. Anda dapat menentukan satu untuk properti gcp.workloadIdentity.gsa dan menentukan GSA individual untuk komponen tertentu. Nilai yang Anda berikan untuk masing-masing komponen akan menggantikan nilai yang Anda berikan untuk gcp.workloadIdentity.gsa hanya untuk komponen tersebut.

Persiapan untuk mengonfigurasi Workload Identity

  1. Pastikan Workload Identity diaktifkan di file penggantian Anda. Opsi ini harus diaktifkan di file pengganti dan Anda akan memiliki nilai untuk properti konfigurasi berikut:
  2. Pastikan konfigurasi gcloud saat ini sudah disetel ke project ID Google Cloud Anda dengan perintah berikut:
    gcloud config get project
  3. Jika perlu, setel konfigurasi gcloud saat ini:

    gcloud config set project $PROJECT_ID
  4. Pastikan Workload Identity sudah aktif untuk Cluster GKE Anda. Saat membuat cluster di Langkah 1: Membuat cluster, langkah 6 adalah Mengaktifkan Workload Identity. Anda dapat mengonfirmasi apakah Workload Identity sudah aktif dengan menjalankan perintah berikut:

    Cluster regional

    gcloud container clusters describe $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Cluster zona

    gcloud container clusters describe $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Output Anda akan terlihat seperti berikut:

      ---
    workloadPool: PROJECT_ID.svc.id.goog

    Jika Anda melihat null dalam hasil Anda, jalankan perintah berikut untuk mengaktifkan Workload Identity untuk cluster Anda:

    Cluster regional

    gcloud container clusters update $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --project $PROJECT_ID \
      --region $CLUSTER_LOCATION

    Cluster zona

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. Aktifkan Workload Identity untuk setiap node pool dengan perintah berikut. Operasi ini dapat memerlukan waktu hingga 30 menit untuk setiap node:

    Cluster regional

    gcloud container node-pools update NODE_POOL_NAME \
      -cluster=$CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Cluster zona

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Dengan NODE_POOL_NAME adalah nama setiap kumpulan node. Pada sebagian besar penginstalan hybrid Apigee, dua kumpulan node default diberi nama apigee-data dan apigee-runtime.

  6. Pastikan Workload Identity diaktifkan di kumpulan node Anda dengan perintah berikut:

    Cluster regional

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Cluster zona

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Output Anda akan terlihat seperti:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
    mode: GKE_METADATA
      

Mengonfigurasi Workload Identity

Gunakan prosedur berikut untuk mengaktifkan Workload Identity untuk komponen Hybrid berikut:

  • apigee-telemetry
  • apigee-org
  • apigee-env

Saat Anda menjalankan helm upgrade dengan flag --dry-run untuk diagram apigee-datastore, apigee-env, apigee-org, dan apigee-telemetry, outputnya akan menyertakan perintah yang diperlukan untuk mengonfigurasi Workload Identity dengan nama GSA dan KSA yang benar.

Contoh:

helm upgrade datastore apigee-datastore/ \
  --namespace $NAMESPACE \
  -f overrides.yaml \
  --dry-run
NAME: datastore
...
For C* backup GKE Workload Identity, please make sure to add the below membership to the IAM policy binding using the respective kubernetes SA (KSA).
gcloud iam service-accounts add-iam-policy-binding  \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:my-project.svc.id.goog[apigee/apigee-cassandra-backup-sa]" \
      --project :my-project
  1. Dapatkan perintah guna menyiapkan Workload Identity untuk apigee-datastore dan jalankan perintah tersebut di bagian NOTES: pada output.
    helm upgrade datastore apigee-datastore/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  2. Dapatkan perintah guna menyiapkan Workload Identity untuk apigee-telemetry dan jalankan perintah di bagian NOTES: pada output.
    helm upgrade telemetry apigee-telemetry/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  3. Dapatkan perintah guna menyiapkan Workload Identity untuk apigee-org dan jalankan perintah di bagian NOTES: pada output.
    helm upgrade $ORG_NAME apigee-org/ \
      --namespace $NAMESPACE \
      -f overrides.yaml \
      --dry-run
  4. Dapatkan perintah guna menyiapkan Workload Identity untuk apigee-env dan jalankan perintah di bagian NOTES: pada output.
    helm upgrade $ENV_NAME apigee-env/ \
      --namespace $NAMESPACE \
      --set env=ENV_NAME \
      -f overrides.yaml \
      --dry-run

    Ulangi langkah ini untuk setiap lingkungan dalam penginstalan Anda.

Memverifikasi Workload Identity

  1. Validasi apakah langkah-langkah tersebut berhasil:
    gcloud config set project $PROJECT_ID
    
    kubectl run --rm -it --image google/cloud-sdk:slim \
      --namespace $NAMESPACE workload-identity-test\
      -- gcloud auth list

    Jika Anda tidak melihat command prompt, coba tekan Enter.

    Jika langkah-langkah tersebut dijalankan dengan benar, Anda akan melihat respons seperti berikut:

                       Credentialed Accounts
    ACTIVE  ACCOUNT
    *       GSA@PROJECT_ID.iam.gserviceaccount.com
    
  2. Jika mengupgrade dari penginstalan sebelumnya, bersihkan rahasia yang berisi kunci pribadi akun layanan:
    kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
    
  3. Periksa log:
    kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
    
  4. (Opsional) Anda dapat melihat status akun layanan Kubernetes di halaman Kubernetes: Workloads Overview di Google Cloud Console.

    Buka Workloads