Gunakan ekstensi Penyedia Rahasia Azure Key Vault untuk mengambil rahasia ke dalam kluster Kubernetes berbasis Azure Arc
Penyedia Azure Key Vault untuk Driver Secrets Store CSI memungkinkan integrasi Azure Key Vault sebagai penyimpanan rhaasia dengan kluster Kuber melalui volume CSI. Untuk kluster Kubernetes berbasis Azure Arc, Anda dapat menginstal ekstensi Penyedia Rahasia Azure Key Vault untuk mengambil rahasia.
Manfaat ekstensi Azure Key Vault Secrets Provider meliputi hal berikut ini:
- Memasang secrets/keys/certs pada pod menggunakan volume CSI Inline
- Mendukung portabilitas pod dengan SecretProviderClass CRD
- Mendukung kontainer Linux serta Windows
- Mendukung proses sinkronisasi dengan Rahasia Kubernetes
- Mendukung rotasi rahasia otomatis
- Komponen ekstensi disebarkan pada zona ketersediaan, sehingga menjadikannya zona redundan
Prasyarat
- Kluster dengan distribusi Kubernetes yang didukung dan telah terhubung ke Azure Arc. Distribusi Kubernetes berikut saat ini didukung untuk skenario ini:
- API Azure Kluster
- Azure Kubernetes Service on Azure Stack HCI (AKS-HCI)
- Google Kubernetes Engine
- Distribusi OpenShift Kubernetes
- Distribusi Kubernetes Kanonis
- Layanan Kubernetes Elastis
- Kisi Kube Tanzu
- Pastikan Anda sudah memenuhi prasyarat umum untuk ekstensi kluster. Anda harus menggunakan versi 0.4.0 atau ekstensi
k8s-extensionAzure CLI yang lebih baru.
Menginstal ekstensi Azure Key Vault Secrets Provider pada kluster Kubernetes berbasis Arc
Anda bisa menginstal ekstensi Penyedia Rahasia Azure Key Vault pada kluster yang terhubung di portal Azure, dengan menggunakan Azure CLI, atau dengan menyebarkan template ARM.
Tip
Hanya satu instans ekstensi yang bisa disebarkan pada setiap kluster Kubernetes berbasis Azure Arc.
Portal Azure
Di portal Microsoft Azure, navigasikan ke Kubernetes - Azure Arc serta pilih kluster Anda.
Pilih Ekstensi (di bawah Pengaturan), kemudian pilih + Tambahkan.
Dari daftar ekstensi yang tersedia, pilih Azure Key Vault Secrets Provider guna menyebarkan versi terbaru ekstensi.
Ikuti perintah guna menyebarkan ekstensi. Jika diperlukan, Anda bisa menyesuaikan penginstalan dengan cara mengubah opsi default pada tab Konfigurasi.
Azure CLI
Atur variabel lingkungan:
export CLUSTER_NAME=<arc-cluster-name> export RESOURCE_GROUP=<resource-group-name>Menginstal Driver Secrets Store CSI serta ekstensi Azure Key Vault Secrets Provider dengan menjalankan perintah berikut:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider
Anda seharusnya melihat output yang mirip dengan berikut ini. Perhatikan bahwa mungkin dibutuhkan waktu beberapa menit sebelum bagan Helm penyedia rahasia disebarkan ke kluster.
{
"aksAssignedIdentity": null,
"autoUpgradeMinorVersion": true,
"configurationProtectedSettings": {},
"configurationSettings": {},
"customLocationSettings": null,
"errorInfo": null,
"extensionType": "microsoft.azurekeyvaultsecretsprovider",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/akvsecretsprovider",
"identity": {
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": null,
"type": "SystemAssigned"
},
"location": null,
"name": "akvsecretsprovider",
"packageUri": null,
"provisioningState": "Succeeded",
"releaseTrain": "Stable",
"resourceGroup": "$RESOURCE_GROUP",
"scope": {
"cluster": {
"releaseNamespace": "kube-system"
},
"namespace": null
},
"statuses": [],
"systemData": {
"createdAt": "2022-05-12T18:35:56.552889+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2022-05-12T18:35:56.552889+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/extensions",
"version": "1.1.3"
}
Templat ARM
Buat file .json dengan format berikut. Pastikan untuk memperbarui <nilai nama> kluster agar merujuk ke kluster Anda.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "ConnectedClusterName": { "defaultValue": "<cluster-name>", "type": "String", "metadata": { "description": "The Connected Cluster name." } }, "ExtensionInstanceName": { "defaultValue": "akvsecretsprovider", "type": "String", "metadata": { "description": "The extension instance name." } }, "ExtensionVersion": { "defaultValue": "", "type": "String", "metadata": { "description": "The version of the extension type." } }, "ExtensionType": { "defaultValue": "Microsoft.AzureKeyVaultSecretsProvider", "type": "String", "metadata": { "description": "The extension type." } }, "ReleaseTrain": { "defaultValue": "stable", "type": "String", "metadata": { "description": "The release train." } } }, "functions": [], "resources": [ { "type": "Microsoft.KubernetesConfiguration/extensions", "apiVersion": "2021-09-01", "name": "[parameters('ExtensionInstanceName')]", "properties": { "extensionType": "[parameters('ExtensionType')]", "releaseTrain": "[parameters('ReleaseTrain')]", "version": "[parameters('ExtensionVersion')]" }, "scope": "[concat('Microsoft.Kubernetes/connectedClusters/', parameters('ConnectedClusterName'))]" } ] }Selanjutnya atur variabel lingkungan dengan menggunakan perintah Azure CLI berikut ini:
export TEMPLATE_FILE_NAME=<template-file-path> export DEPLOYMENT_NAME=<desired-deployment-name>Terakhir, jalankan perintah Azure CLI ini guna menginstal ekstensi Penyedia Rahasia Azure Key Vault:
az deployment group create --name $DEPLOYMENT_NAME --resource-group $RESOURCE_GROUP --template-file $TEMPLATE_FILE_NAME
Kini Anda seharusnya dapat melihat sumber daya OSM dan menggunakan ekstensi OSM di kluster Anda.
Memvalidasi penginstalan ekstensi
Guna mengonfirmasi keberhasilan penginstalan ekstensi Penyedia Rahasia Azure Key Vault, jalankan perintah berikut.
az k8s-extension show --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
Anda seharusnya melihat output yang mirip dengan berikut ini.
{
"aksAssignedIdentity": null,
"autoUpgradeMinorVersion": true,
"configurationProtectedSettings": {},
"configurationSettings": {},
"customLocationSettings": null,
"errorInfo": null,
"extensionType": "microsoft.azurekeyvaultsecretsprovider",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Kubernetes/connectedClusters/$CLUSTER_NAME/providers/Microsoft.KubernetesConfiguration/extensions/akvsecretsprovider",
"identity": {
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": null,
"type": "SystemAssigned"
},
"location": null,
"name": "akvsecretsprovider",
"packageUri": null,
"provisioningState": "Succeeded",
"releaseTrain": "Stable",
"resourceGroup": "$RESOURCE_GROUP",
"scope": {
"cluster": {
"releaseNamespace": "kube-system"
},
"namespace": null
},
"statuses": [],
"systemData": {
"createdAt": "2022-05-12T18:35:56.552889+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2022-05-12T18:35:56.552889+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/extensions",
"version": "1.1.3"
}
Membuat ataupun memilih Azure Key Vault
Selanjutnya, tentukan Azure Key Vault untuk digunakan bersama kluster yang terhubung. Jika Anda belum memilikinya, buatlah Key Vault baru dengan menggunakan perintah berikut. Ingatlah bahwa nama Key Vault harus unik secara keseluruhan.
Atur variabel lingkungan berikut:
export AKV_RESOURCE_GROUP=<resource-group-name>
export AZUREKEYVAULT_NAME=<AKV-name>
export AZUREKEYVAULT_LOCATION=<AKV-location>
Selanjutnya, jalankan perintah berikut
az keyvault create -n $AZUREKEYVAULT_NAME -g $AKV_RESOURCE_GROUP -l $AZUREKEYVAULT_LOCATION
Azure Key Vault dapat menyimpan kunci, rahasia, dan sertifikat. Untuk contoh ini, Anda dapat mengatur rahasia teks biasa yang disebut juga sebagai DemoSecret dengan menggunakan perintah berikut:
az keyvault secret set --vault-name $AZUREKEYVAULT_NAME -n DemoSecret --value MyExampleSecret
Sebelum Anda melanjutkan ke bagian berikutnya, harap perhatikan properti berikut ini:
- Nama objek rahasia pada Azure Key Vault
- Tipe objek (rahasia, kunci, atau sertifikat)
- Nama sumber daya dari Azure Key Vault Anda
- ID Penyewa Azure untuk langganan di mana Key Vault berada
Menyediakan identitas untuk mengakses Azure Key Vault
Saat ini, Driver Secrets Store CSI pada kluster berbasis Arc dapat diakses melalui perwakilan layanan. Ikuti langkah berikut ini untuk memberikan identitas yang dapat mengakses Key Vault Anda.
Ikuti langkah di sini untuk membuat perwakilan layanan pada Azure. Perhatikan ID Klien serta Rahasia Klien yang dihasilkan dalam langkah ini.
Berikan izin GET Azure Key Vault ke perwakilan layanan yang dibuat dengan mengikuti langkah di sini.
Gunakan ID klien serta Rahasia Klien dari langkah 1 untuk membuat rahasia Kubernetes pada kluster yang terhubung dengan Arc:
kubectl create secret generic secrets-store-creds --from-literal clientid="<client-id>" --from-literal clientsecret="<client-secret>"Beri label pada rahasia yang telah dibuat:
kubectl label secret secrets-store-creds secrets-store.csi.k8s.io/used=trueBuat SecretProviderClass dengan YAML berikut ini, yang mengisi nilai Anda untuk nama, ID penyewa, dan objek key vault untuk diambil dari instans AKV Anda:
# This is a SecretProviderClass example using service principal to access Keyvault apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: akvprovider-demo spec: provider: azure parameters: usePodIdentity: "false" keyvaultName: <key-vault-name> objects: | array: - | objectName: DemoSecret objectType: secret # object types: secret, key or cert objectVersion: "" # [OPTIONAL] object versions, default to latest if empty tenantId: <tenant-Id> # The tenant ID of the Azure Key Vault instanceTerapkan SecretProviderClass ke kluster Anda:
kubectl apply -f secretproviderclass.yamlBuat pod dengan YAML berikut, yang mengisi nama identitas Anda:
# This is a sample pod definition for using SecretProviderClass and service principal to access Keyvault kind: Pod apiVersion: v1 metadata: name: busybox-secrets-store-inline spec: containers: - name: busybox image: k8s.gcr.io/e2e-test-images/busybox:1.29 command: - "/bin/sleep" - "10000" volumeMounts: - name: secrets-store-inline mountPath: "/mnt/secrets-store" readOnly: true volumes: - name: secrets-store-inline csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "akvprovider-demo" nodePublishSecretRef: name: secrets-store-credsTerapkan pod ke kluster Anda:
kubectl apply -f pod.yaml
Validasi rahasia
Setelah pod dimulai, tersedia konten yang dipasang pada jalur volume yang ditentukan dalam penyebaran YAML Anda.
## show secrets held in secrets-store
kubectl exec busybox-secrets-store-inline -- ls /mnt/secrets-store/
## print a test secret 'DemoSecret' held in secrets-store
kubectl exec busybox-secrets-store-inline -- cat /mnt/secrets-store/DemoSecret
Opsi konfigurasi tambahan.
Pengaturan konfigurasi berikut ini tersedia untuk ekstensi Penyedia Rahasia Azure Key Vault:
| Pengaturan Konfigurasi | Default | Deskripsi |
|---|---|---|
| enableSecretRotation | salah | Jenis Boolean. Jika true, ia akan memperbarui pemasangan pod dan Rahasia Kubernetes secara berkala dengan konten terbaru dari penyimpanan rahasia eksternal |
| rotationPollInterval | 2m | Menentukan durasi interval polling rotasi rahasia apabila enableSecretRotation adalah true. Durasi tersebut dapat disesuaikan berdasarkan seberapa sering konten yang dipasang untuk semua pod dan rahasia Kubernetes perlu disinkronkan ulang ke yang terbaru. |
| syncSecret.enabled | salah | Input boolean. Dalam beberapa kasus, Anda mungkin ingin membuat Rahasia Kube untuk mencerminkan konten yang dipasang. Jika true, SecretProviderClass akan memungkinkan secretObjects bidang untuk menentukan status objek Rahasia Kubernetes yang disinkronkan serta diinginkan. |
Pengaturan ini dapat ditentukan ketika ekstensi diinstal dengan menggunakan perintah az k8s-extension create:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider --configuration-settings secrets-store-csi-driver.enableSecretRotation=true secrets-store-csi-driver.rotationPollInterval=3m secrets-store-csi-driver.syncSecret.enabled=true
Anda juga dapat mengubah pengaturan setelah penginstalan dengan menggunakan perintah az k8s-extension update:
az k8s-extension update --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --name akvsecretsprovider --configuration-settings secrets-store-csi-driver.enableSecretRotation=true secrets-store-csi-driver.rotationPollInterval=3m secrets-store-csi-driver.syncSecret.enabled=true
Menghapus instalan untuk ekstensi Penyedia Rahasia Azure Key Vault
Untuk memasang ekstensi, harap jalankan perintah berikut:
az k8s-extension delete --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
Catatan
Menghapus instalan ekstensi tidak menghapus Definisi Sumber Daya Kustom (CRD) yang dibuat ketika ekstensi diinstal.
Untuk mengonfirmasi bahwa instans ekstensi telah dihapus, harap jalankan perintah berikut:
az k8s-extension list --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Jika ekstensi berhasil dihapus, Anda tidak akan melihat ekstensi Penyedia Rahasia Azure Key Vault yang tercantum pada output. Jika Anda tidak memiliki ekstensi lain yang terinstal pada kluster Anda, ekstensi ini akan menjadi array kosong.
Rekonsiliasi serta pemecahan masalah
Ekstensi Penyedia Rahasia Azure Key Vault bersifat pemulihan mandiri. Jika seseorang mencoba mengubah atau menghapus komponen ekstensi yang disebarkan saat ekstensi diinstal, komponen tersebut akan direkonsiliasi ke keadaan semula. Satu-satunya pengecualian adalah bagi Definisi Sumber Daya Kustom (CRD). Jika CRD dihapus, CRD tidak akan mengalami rekonsiliasi. Untuk memulihkan CRD yang dihapus, harap gunakan az k8s-exstension create perintah lagi dengan nama instans ekstensi yang ada.
Untuk informasi selengkapnya tentang mengatasi masalah umum, lihat panduan pemecahan masalah sumber terbuka untuk penyedia Azure Key Vault untuk driver Secrets Store CSI serta Driver Secrets Store CSI.
Langkah berikutnya
- Tertarik mencoba? Mulai cepat menggunakan skenario Azure Arc Jumpstart dengan Kluster API.
- Pelajari lebih lanjut tentang Azure Key Vault.

