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.
Kemampuan ekstensi Penyedia Rahasia Azure Key Vault meliputi:
- 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
Tip
Jika akses offline diperlukan, atau jika Anda memerlukan rahasia yang disinkronkan ke penyimpanan rahasia Kubernetes, gunakan ekstensi Secret Store untuk manajemen rahasia di kluster Kubernetes yang didukung Arc.
Prasyarat
- Kluster dengan distribusi Kubernetes yang didukung yang terhubung ke Azure Arc. Distribusi Kubernetes berikut saat ini didukung untuk skenario ini:
- API Azure Kluster
- Kluster Azure Kubernetes Service (AKS) di Azure Stack HCI
- AKS diaktifkan oleh Azure Arc
- Google Kubernetes Engine
- Distribusi OpenShift Kubernetes
- Distribusi Kubernetes Kanonis
- Layanan Kubernetes Elastis
- Kisi Kube Tanzu
- Azure Red Hat OpenShift
- Konektivitas keluar ke titik akhir berikut:
linuxgeneva-microsoft.azurecr.io
upstreamarc.azurecr.io
*.blob.core.windows.net
- Pastikan Anda telah memenuhi prasyarat umum untuk ekstensi kluster. Anda harus menggunakan versi 0.4.0 atau ekstensi
k8s-extension
Azure CLI yang lebih baru.
Menginstal ekstensi Azure Key Vault Secrets Provider pada kluster Kubernetes berbasis Arc
Anda dapat menginstal ekstensi Penyedia Rahasia Azure Key Vault pada kluster yang terhubung di portal Azure, dengan menggunakan Azure CLI, atau dengan menyebarkan templat ARM.
Hanya satu instans ekstensi yang bisa disebarkan pada setiap kluster Kubernetes berbasis Azure Arc.
Tip
Jika kluster berada di belakang server proksi keluar, pastikan Anda menyambungkannya ke Azure Arc menggunakan opsi konfigurasi proksi sebelum menginstal ekstensi.
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, sesuaikan penginstalan dengan 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 akan melihat output yang mirip dengan contoh ini. Mungkin perlu 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')]", "identity": { "type": "SystemAssigned" }, "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 akan melihat output yang mirip dengan contoh 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. Perlu diingat bahwa nama brankas kunci Anda harus unik secara global.
Atur variabel lingkungan berikut:
export AKV_RESOURCE_GROUP=<resource-group-name>
export AZUREKEYVAULT_NAME=<AKV-name>
export AZUREKEYVAULT_LOCATION=<AKV-location>
Kemudian, 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-langkah ini untuk memberikan identitas yang dapat mengakses Key Vault Anda.
Ikuti langkah-langkah untuk membuat perwakilan layanan di Azure. Perhatikan ID Klien serta Rahasia Klien yang dihasilkan dalam langkah ini.
Selanjutnya, pastikan Azure Key Vault memiliki izin GET ke perwakilan layanan yang dibuat.
Gunakan ID klien dan Rahasia Klien dari langkah pertama untuk membuat rahasia Kubernetes pada kluster yang terhubung:
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=true
SecretProviderClass
Buat dengan YAML berikut, isi nilai Anda untuk nama brankas kunci, ID penyewa, dan objek yang akan 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> cloudName: # Defaults to AzurePublicCloud 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 instance
Untuk digunakan dengan cloud nasional, ubah
cloudName
keAzureUSGovernmentCloud
untuk Azure Government, atau keAzureChinaCloud
untuk Microsoft Azure yang dioperasikan oleh 21Vianet.Terapkan SecretProviderClass ke kluster Anda:
kubectl apply -f secretproviderclass.yaml
Buat 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-creds
Terapkan 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.
Ekstensi Penyedia Rahasia Azure Key Vault mendukung konfigurasi bagan Helm.
Pengaturan konfigurasi berikut sering digunakan dengan 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 | 2 m | Jika enableSecretRotation adalah true , pengaturan ini menentukan durasi interval polling rotasi rahasia. 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 ini setelah penginstalan dengan menggunakan az k8s-extension update
perintah :
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
Anda dapat menggunakan pengaturan konfigurasi lain sesuai kebutuhan untuk penyebaran Anda. Misalnya, untuk mengubah direktori akar kubelet saat membuat kluster, ubah az k8s-extension create
perintah :
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider --configuration-settings linux.kubeletRootDir=/path/to/kubelet secrets-store-csi-driver.linux.kubeletRootDir=/path/to/kubelet
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 dalam output. Jika Anda tidak memiliki ekstensi lain yang terinstal pada kluster Anda, ekstensi ini akan menjadi array kosong.
Jika Anda tidak lagi membutuhkannya, pastikan untuk menghapus rahasia Kubernetes yang terkait dengan perwakilan layanan dengan menjalankan perintah berikut:
kubectl delete secret secrets-store-creds
Rekonsiliasi serta pemecahan masalah
Ekstensi Penyedia Rahasia Azure Key Vault bersifat pemulihan mandiri. Jika seseorang mencoba mengubah atau menghapus komponen ekstensi yang disebarkan ketika ekstensi diinstal, komponen tersebut direkonsiliasi ke status aslinya. 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-extension 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.