Halaman ini menjelaskan cara menggunakan External Secrets Operator (ESO) untuk menyelaraskan secret dari Secret Manager ke cluster yang terhubung ke Google Distributed Cloud.
External Secrets Operator adalah operator Kubernetes open source yang mengintegrasikan sistem pengelolaan secret eksternal. Operator membaca informasi dari API eksternal dan otomatis menyuntikkan nilai ke dalam secret Kubernetes.
Prasyarat
Sebelum dapat menggunakan External Secrets Operator, Anda harus melakukan hal berikut:
- Buat cluster yang terhubung ke Distributed Cloud yang berfungsi.
- Pastikan API berikut diaktifkan di project Google Cloud Anda.
Untuk mengetahui informasi tentang cara mengaktifkan API, lihat
Mengaktifkan layanan:
secretmanager.googleapis.comiamcredentials.googleapis.com
Pastikan Anda telah menginstal alat command line berikut:
- Versi terbaru Google Cloud CLI, yang mencakup
gcloud, alat command line untuk berinteraksi dengan Google Cloud. kubectl
Jika Anda menggunakan Cloud Shell sebagai lingkungan shell untuk berinteraksi dengan Google Cloud, alat ini akan diinstal untuk Anda.
- Versi terbaru Google Cloud CLI, yang mencakup
Pastikan Anda telah menginisialisasi gcloud CLI untuk digunakan dengan project Anda.
Aktifkan Workload Identity Federation di cluster. Workload Identity Pool otomatis tersedia dan mengikuti format
PROJECT_ID.svc.id.goog.Instal External Secrets Operator di cluster Anda. Untuk petunjuk penginstalan, lihat dokumentasi External Secrets Operator. Sebaiknya instal operator di namespace khusus, seperti
external-secrets. Jangan menginstalnya di namespace yang dikelola sistem sepertikube-systemataugke-system.
Cluster yang terhubung Distributed Cloud otomatis terdaftar ke Fleet dalam project tempat cluster tersebut dibuat.
Autentikasi
External Secrets Operator memerlukan autentikasi untuk mengakses Secret Manager. Distributed Cloud Connected menggunakan Fleet Workload Identity Federation untuk mengizinkan workload melakukan autentikasi keGoogle Cloud API.
Untuk mengonfigurasi autentikasi untuk External Secrets Operator:
- Siapkan hubungan tepercaya antara cluster Anda dan Google Cloud dengan mengikuti petunjuk di Autentikasi Cluster Workload Identity.
- Pastikan akun layanan Google yang digunakan External Secrets Operator memiliki peran Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor) pada secret yang ingin Anda akses. Konfigurasi Pod External Secrets Operator untuk menggunakan Workload Identity Federation dengan mengikuti petunjuk Mengonfigurasi workload.
Sebagian besar pelanggan menggunakan Workload Identity Federation untuk autentikasi. Untuk mengonfigurasi Workload Identity Federation, Anda harus memberikan anotasi pada ServiceAccount Kubernetes yang digunakan oleh operator dengan akun layanan Google. Untuk menambahkan anotasi ini, jalankan perintah kubectl annotate:
kubectl annotate serviceaccount KSA_NAME \ --namespace OPERATOR_NAMESPACE \ iam.gke.io/gcp-service-account=GSA_EMAILAtau, Anda dapat menambahkan anotasi ke YAML ServiceAccount:
apiVersion: v1 kind: ServiceAccount metadata: annotations: iam.gke.io/gcp-service-account: GSA_EMAIL name: KSA_NAME namespace: OPERATOR_NAMESPACEGanti nilai berikut:
KSA_NAME: nama ServiceAccount Kubernetes yang digunakan oleh operatorOPERATOR_NAMESPACE: namespace tempat Anda menginstal operatorGSA_EMAIL: alamat email akun layanan Google
Berikan file konfigurasi kredensial ke Pod operator. Untuk informasi selengkapnya, lihat Mengonfigurasi beban kerja.
Membuat resource ESO untuk menyinkronkan secret
Setelah mengonfigurasi autentikasi, Anda dapat membuat resource External Secrets Operator untuk menyinkronkan secret.
Membuat SecretStore
SecretStore menentukan cara mengakses sistem pengelolaan secret eksternal.
Anda dapat membuat resource SecretStore di namespace yang sama dengan External
Secrets Operator atau di namespace aplikasi. Untuk mengetahui informasi selengkapnya, lihat
SecretStore di
dokumentasi Kubernetes.
Buat file bernama
secret-store.yamldengan konten berikut:apiVersion: external-secrets.io/v1 kind: SecretStore metadata: name: gcp-store namespace: NAMESPACE spec: provider: gcpsm: projectID: PROJECT_IDGanti nilai berikut:
NAMESPACE: namespace tempat Anda ingin membuatSecretStorePROJECT_ID: Project ID Google Cloud Anda tempat rahasia disimpan
Gunakan perintah kubectl apply untuk menerapkan manifes:
kubectl apply -f secret-store.yaml
Membuat ClusterSecretStore
ClusterSecretStore adalah resource cakupan cluster yang dapat digunakan oleh resource ExternalSecret di namespace mana pun. Untuk mengetahui informasi selengkapnya, lihat
ClusterSecretStore
dalam dokumentasi Kubernetes.
Buat file bernama
cluster-secret-store.yamldengan konten berikut:apiVersion: external-secrets.io/v1 kind: ClusterSecretStore metadata: name: gcp-cluster-store spec: provider: gcpsm: projectID: PROJECT_IDGanti
PROJECT_IDdengan project ID Google Cloud Anda tempat rahasia disimpan.Terapkan manifes:
kubectl apply -f cluster-secret-store.yaml
Membuat ExternalSecret
ExternalSecret mendeklarasikan data yang akan diambil dan tempat menyimpannya di
cluster. Buat resource ExternalSecret di namespace tempat Pod aplikasi menggunakan Secret Kubernetes yang dihasilkan. Untuk mengetahui informasi selengkapnya, lihat ExternalSecret dalam dokumentasi Kubernetes.
Buat file bernama
external-secret.yamldengan konten berikut:apiVersion: external-secrets.io/v1 kind: ExternalSecret metadata: name: EXTERNAL_SECRET namespace: NAMESPACE spec: refreshInterval: 1h secretStoreRef: kind: SecretStore name: gcp-store target: name: K8S_SECRET_NAME creationPolicy: Owner data: - secretKey: K8S_SECRET_KEY remoteRef: key: SECRET_NAMEGanti nilai berikut:
EXTERNAL_SECRET: nama resourceExternalSecret.NAMESPACE: namespace tempat Anda membuatSecretStore.K8S_SECRET_NAME: nama Secret Kubernetes yang akan dibuat oleh ESO.K8S_SECRET_KEY: kunci dalam data Secret Kubernetes.SECRET_NAME: nama secret di Google Cloud Secret Manager.
Jika Anda menggunakan
ClusterSecretStore, tetapkankind: ClusterSecretStore, dan perbaruinamedisecretStoreRef.Terapkan manifes:
kubectl apply -f external-secret.yaml
Menyinkronkan beberapa kunci dari secret JSON
Jika secret Anda di Secret Manager berisi string JSON, Anda dapat mengekstrak semua kunci sebagai entri individual di secret Kubernetes.
Buat file bernama
external-secret-json.yamldengan konten berikut:apiVersion: external-secrets.io/v1 kind: ExternalSecret metadata: name: EXTERNAL_SECRET namespace: NAMESPACE spec: refreshInterval: 1h secretStoreRef: kind: SecretStore name: gcp-store target: name: K8S_SECRET_NAME creationPolicy: Owner dataFrom: - extract: key: SECRET_NAMETerapkan manifes:
kubectl apply -f external-secret-json.yaml
Setiap key-value pair dalam secret JSON dipetakan ke key-value pair dalam secret Kubernetes yang dihasilkan.
Pemecahan masalah
Jika rahasia Anda tidak disinkronkan, gunakan langkah-langkah berikut untuk memecahkan masalah:
Gunakan perintah kubectl get untuk memeriksa status resource
ExternalSecret:kubectl get externalsecret EXTERNAL_SECRET -n NAMESPACE -o yamlPeriksa bagian
statusuntuk melihat apakah ada pesan error atau kondisi yang gagal.Gunakan perintah kubectl logs untuk memeriksa log Pod pengontrol External Secrets Operator:
kubectl logs -l app.kubernetes.io/name=external-secrets -n OPERATOR_NAMESPACEPastikan bahwa ServiceAccount Kubernetes yang digunakan oleh operator dianotasi dengan benar menggunakan email akun layanan Google. Untuk mengetahui informasi selengkapnya, lihat Workload Identity Federation di cluster.
Pastikan akun layanan Google memiliki izin yang diperlukan dan Workload Identity Federation dikonfigurasi dengan benar. Untuk mengetahui informasi selengkapnya, lihat Workload Identity Federation di cluster.