Azure Arc özellikli Kubernetes kümelerine gizli dizileri getirmek için Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını kullanın
Gizli Dizi Deposu için Azure Key Vault Sağlayıcısı CSI Sürücüsü, Azure Key Vault'un bir CSI birimi aracılığıyla Kubernetes kümesiyle gizli dizi deposu olarak tümleştirilmesine olanak tanır. Azure Arc özellikli Kubernetes kümeleri için, gizli dizileri getirmek için Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını yükleyebilirsiniz.
Azure Key Vault Gizli Dizi Sağlayıcısı uzantısının özellikleri şunlardır:
- CSI Satır içi birimi kullanarak gizli dizileri/anahtarları/sertifikaları pod'a bağlar
- SecretProviderClass CRD ile pod taşınabilirliğini destekler
- Linux ve Windows kapsayıcılarını destekler
- Kubernetes Gizli Dizileri ile eşitlemeyi destekler
- Gizli dizilerin otomatik döndürmesini destekler
- Uzantı bileşenleri kullanılabilirlik alanlarına dağıtılarak alanlar arası yedekli hale gelir
İpucu
Çevrimdışı erişim gerekiyorsa veya gizli dizilerin Kubernetes gizli dizi deposuyla eşitlenmesi gerekiyorsa Arc özellikli Kubernetes kümelerinizde gizli dizi yönetimi için Gizli Dizi Deposu uzantısını kullanın.
Önkoşullar
- Azure Arc'a bağlı desteklenen kubernetes dağıtımına sahip bir küme. Şu anda bu senaryo için aşağıdaki Kubernetes dağıtımları desteklenmektedir:
- Küme API'si Azure
- Azure Stack HCI üzerinde Azure Kubernetes Service (AKS) kümeleri
- Azure Arc tarafından etkinleştirilen AKS
- Google Kubernetes Engine
- OpenShift Kubernetes Dağıtımı
- Kurallı Kubernetes Dağıtımı
- Elastic Kubernetes Service
- Tanzu Kubernetes Grid
- Azure Red Hat OpenShift
- Aşağıdaki uç noktalara giden bağlantı:
linuxgeneva-microsoft.azurecr.io
upstreamarc.azurecr.io
*.blob.core.windows.net
- Küme uzantıları için genel önkoşulları karşıladığınızdan emin olun. Azure CLI uzantısının 0.4.0 veya daha yeni bir
k8s-extension
sürümünü kullanmanız gerekir.
Arc özellikli kubernetes kümesine Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını yükleme
Bağlı kümenize Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını Azure portalda, Azure CLI kullanarak veya bir ARM şablonu dağıtarak yükleyebilirsiniz.
Azure Arc özellikli kubernetes kümelerinde uzantının yalnızca bir örneği dağıtılabilir.
İpucu
Küme giden ara sunucunun arkasındaysa, uzantıyı yüklemeden önce ara sunucu yapılandırma seçeneğini kullanarak Azure Arc'a bağladığınızdan emin olun.
Azure portal
Azure portalında Kubernetes - Azure Arc'a gidin ve kümenizi seçin.
Uzantılar'ı (Ayarlar'ın altında) ve ardından + Ekle'yi seçin.
Kullanılabilir uzantılar listesinden Azure Key Vault Gizli Dizileri Sağlayıcısı'nı seçerek uzantının en son sürümünü dağıtın.
Uzantıyı dağıtmak için istemleri izleyin. Gerekirse, Yapılandırma sekmesindeki varsayılan seçenekleri değiştirerek yüklemeyi özelleştirin.
Azure CLI
Ortam değişkenlerini ayarlayın:
export CLUSTER_NAME=<arc-cluster-name> export RESOURCE_GROUP=<resource-group-name>
Aşağıdaki komutu çalıştırarak Gizli Dizi Deposu CSI Sürücüsünü ve Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını yükleyin:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider
Bu örneğe benzer bir çıktı görmeniz gerekir. Gizli dizi sağlayıcısı Helm grafiğinin kümeye dağıtılma işlemi birkaç dakika sürebilir.
{
"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"
}
ARM şablonu
Aşağıdaki biçimi kullanarak bir .json dosyası oluşturun. Kümenize başvurmak <için küme adı> değerini güncelleştirin.
{ "$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'))]" } ] }
Şimdi aşağıdaki Azure CLI komutunu kullanarak ortam değişkenlerini ayarlayın:
export TEMPLATE_FILE_NAME=<template-file-path> export DEPLOYMENT_NAME=<desired-deployment-name>
Son olarak, Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını yüklemek için şu Azure CLI komutunu çalıştırın:
az deployment group create --name $DEPLOYMENT_NAME --resource-group $RESOURCE_GROUP --template-file $TEMPLATE_FILE_NAME
Artık gizli dizi sağlayıcısı kaynaklarını görüntüleyebilmeniz ve kümenizdeki uzantıyı kullanabilmeniz gerekir.
Uzantı yüklemesini doğrulama
Azure Key Vault Gizli Dizi Sağlayıcısı uzantısının başarıyla yüklenmesini onaylamak için aşağıdaki komutu çalıştırın.
az k8s-extension show --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
Bu örneğe benzer bir çıktı görmeniz gerekir.
{
"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"
}
Azure Key Vault oluşturma veya seçme
Ardından, bağlı kümenizle kullanılacak Azure Key Vault'ı belirtin. Henüz bir anahtar kasanız yoksa aşağıdaki komutları kullanarak yeni bir Key Vault oluşturun. Anahtar kasanızın adının genel olarak benzersiz olması gerektiğini unutmayın.
Aşağıdaki ortam değişkenlerini ayarlayın:
export AKV_RESOURCE_GROUP=<resource-group-name>
export AZUREKEYVAULT_NAME=<AKV-name>
export AZUREKEYVAULT_LOCATION=<AKV-location>
Ardından aşağıdaki komutu çalıştırın:
az keyvault create -n $AZUREKEYVAULT_NAME -g $AKV_RESOURCE_GROUP -l $AZUREKEYVAULT_LOCATION
Azure Key Vault anahtarları, gizli dizileri ve sertifikaları depolayabilir. Bu örnekte, aşağıdaki komutu kullanarak adlı DemoSecret
bir düz metin gizli dizisi ayarlayabilirsiniz:
az keyvault secret set --vault-name $AZUREKEYVAULT_NAME -n DemoSecret --value MyExampleSecret
Sonraki bölüme geçmeden önce aşağıdaki özellikleri not alın:
- Key Vault'taki gizli nesnenin adı
- Nesne türü (gizli dizi, anahtar veya sertifika)
- Key Vault kaynağınızın adı
- Key Vault'un ait olduğu aboneliğin Azure Kiracı Kimliği
Azure Key Vault'a erişmek için kimlik sağlama
Şu anda Arc özellikli kümelerde Gizli Dizi Deposu CSI Sürücüsüne bir hizmet sorumlusu üzerinden erişilebilir. Key Vault'unuza erişebilecek bir kimlik sağlamak için bu adımları izleyin.
Azure'da hizmet sorumlusu oluşturmak için adımları izleyin. Bu adımda oluşturulan İstemci Kimliği ve İstemci Gizli Dizisi'ni not alın.
Ardından Azure Key Vault'un oluşturulan hizmet sorumlusu için GET iznine sahip olduğundan emin olun.
Bağlı kümede kubernetes gizli dizisi oluşturmak için ilk adımdaki istemci kimliğini ve gizli diziyi kullanın:
kubectl create secret generic secrets-store-creds --from-literal clientid="<client-id>" --from-literal clientsecret="<client-secret>"
Oluşturulan gizli diziyi etiketle:
kubectl label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
Anahtar kasası adı, kiracı kimliği ve AKV örneğinizden alınacak nesneler için değerlerinizi doldurarak aşağıdaki YAML ile bir
SecretProviderClass
oluşturun:# 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
Ulusal bulutlarla kullanmak için Azure Kamu için veya
AzureChinaCloud
21Vianet tarafından sağlanan Microsoft Azure için olarak değiştirin.cloudName
AzureUSGovernmentCloud
SecretProviderClass'ı kümenize uygulayın:
kubectl apply -f secretproviderclass.yaml
Kimliğinizin adını doldurarak aşağıdaki YAML ile bir pod oluşturun:
# 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
Podu kümenize uygulayın:
kubectl apply -f pod.yaml
Gizli dizileri doğrulama
Pod başlatıldıktan sonra, dağıtım YAML'nizde belirtilen birim yolundaki bağlı içerik kullanılabilir.
## 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
Ek yapılandırma seçenekleri
Azure Key Vault Gizli Dizi Sağlayıcısı uzantısı Helm grafik yapılandırmalarını destekler.
Aşağıdaki yapılandırma ayarları, Azure Key Vault Gizli Dizi Sağlayıcısı uzantısıyla sık sık kullanılır:
Yapılandırma Ayarı | Varsayılan | Açıklama |
---|---|---|
enableSecretRotation | yanlış | Boole türü. ise true , pod bağlamasını ve Kubernetes Gizli Dizisini düzenli aralıklarla dış gizli dizi deposundaki en son içerikle güncelleştirir |
rotationPollInterval | 2 m | ise enableSecretRotation true , bu ayar gizli dizi döndürme yoklama aralığı süresini belirtir. Bu süre, tüm podlar ve Kubernetes gizli dizileri için bağlı içeriklerin en son sürüme ne sıklıkta yeniden eşitlenmeleri gerektiği temelinde ayarlanabilir. |
syncSecret.enabled | yanlış | Boole girişi. Bazı durumlarda, bağlı içeriği yansıtmak için bir Kubernetes Gizli Dizisi oluşturmak isteyebilirsiniz. ise true , SecretProviderClass alanın eşitlenen Kubernetes Gizli Dizi nesnelerinin istenen durumunu tanımlamasına izin verir secretObjects . |
Uzantı yüklendiğinde bu ayarlar şu komut kullanılarak az k8s-extension create
belirtilebilir:
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
Yüklemeden sonra şu komutu kullanarak az k8s-extension update
da bu ayarları değiştirebilirsiniz:
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
Dağıtımınız için gereken diğer yapılandırma ayarlarını kullanabilirsiniz. Örneğin, küme oluştururken kubelet kök dizinini değiştirmek için komutunu değiştirin 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 linux.kubeletRootDir=/path/to/kubelet secrets-store-csi-driver.linux.kubeletRootDir=/path/to/kubelet
Azure Key Vault Gizli Dizi Sağlayıcısı uzantısını kaldırma
Uzantıyı kaldırmak için aşağıdaki komutu çalıştırın:
az k8s-extension delete --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
Not
Uzantı kaldırıldığında, uzantı yüklendiğinde oluşturulan Özel Kaynak Tanımları (CRD) silinmez.
Uzantı örneğinin silindiğini onaylamak için aşağıdaki komutu çalıştırın:
az k8s-extension list --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Uzantı başarıyla kaldırıldıysa, çıkışta Azure Key Vault Gizli Dizi Sağlayıcısı uzantısının listelendiğini görmezsiniz. Kümenizde yüklü başka uzantı yoksa boş bir dizi görürsünüz.
Artık ihtiyacınız yoksa, aşağıdaki komutu çalıştırarak hizmet sorumlusuyla ilişkili Kubernetes gizli dizisini sildiğinizden emin olun:
kubectl delete secret secrets-store-creds
Mutabakat ve sorun giderme
Azure Key Vault Gizli Dizi Sağlayıcısı uzantısı kendi kendine iyileştiricidir. Birisi uzantı yüklendiğinde dağıtılan bir uzantı bileşenini değiştirmeye veya silmeye çalışırsa, bu bileşen özgün durumuyla mutabıktır. Yalnızca Özel Kaynak Tanımları (CRD) için özel durumlar vardır. CRD'ler silinirse, bunlar uzlaştırılamaz. Silinen CRD'leri geri yüklemek için komutunu mevcut uzantı örneği adıyla yeniden kullanın az k8s-extension create
.
Yaygın sorunları çözme hakkında daha fazla bilgi için Bkz. Gizli Dizi Deposu CSI sürücüsü ve Gizli Dizi Deposu CSI Sürücüsü için Azure Key Vault sağlayıcısı için açık kaynak sorun giderme kılavuzları.
Sonraki adımlar
- Bir şeyler denemek ister misin? Küme API'sini kullanarak Azure Arc Jumpstart senaryosunu kullanmaya hızlı bir şekilde başlayın.
- Azure Key Vault hakkında daha fazla bilgi edinin.