Titkos kulcsok lekérése az Azure Arc-kompatibilis Kubernetes-fürtökbe az Azure Key Vault Titkos kódok szolgáltató bővítményével
Az Azure Key Vault titkos kulcstároló-szolgáltatójának CSI-illesztőprogramja lehetővé teszi az Azure Key Vault titkos kulcstárként való integrálását egy Kubernetes-fürttel egy CSI-köteten keresztül. Az Azure Arc-kompatibilis Kubernetes-fürtök esetében az Azure Key Vault titkos kulcsszolgáltató bővítményét is telepítheti a titkos kódok lekéréséhez.
Az Azure Key Vault titkos kódok szolgáltatói bővítményének képességei a következők:
- Titkos kulcsok/kulcsok/tanúsítványok csatlakoztatása podhoz a CSI beágyazott kötet használatával
- Támogatja a pod hordozhatóságát a SecretProviderClass CRD-vel
- Linux- és Windows-tárolók támogatása
- Támogatja a Kubernetes Titkos kulcsokkal való szinkronizálást
- Támogatja a titkos kódok automatikus elforgatását
- A bővítményösszetevők a rendelkezésre állási zónákban vannak üzembe helyezve, így zónaredundánssá válnak
Előfeltételek
- Az Azure Archoz már csatlakoztatott, támogatott Kubernetes-disztribúcióval rendelkező fürt. Ebben a forgatókönyvben jelenleg a következő Kubernetes-disztribúciók támogatottak:
- Fürt API Azure
- Azure Kubernetes Service- (AKS-) fürtök az Azure Stack HCI-n
- Az Azure Arc által engedélyezett AKS
- Google Kubernetes Engine
- OpenShift Kubernetes-disztribúció
- Canonical Kubernetes Distribution
- Rugalmas Kubernetes-szolgáltatás
- Tanzu Kubernetes Grid
- Azure Red Hat OpenShift
- Győződjön meg arról, hogy megfelelt a fürtbővítmények általános előfeltételeinek. Az Azure CLI-bővítmény 0.4.0-s vagy újabb verzióját kell használnia
k8s-extension
.
Az Azure Key Vault titkos kulcsszolgáltatói bővítményének telepítése Arc-kompatibilis Kubernetes-fürtön
Az Azure Key Vault titkos kódszolgáltató bővítményét az Azure Portalon, az Azure CLI használatával vagy arm-sablon üzembe helyezésével telepítheti a csatlakoztatott fürtre.
A bővítménynek csak egy példánya telepíthető minden Azure Arc-kompatibilis Kubernetes-fürtön.
Tipp.
Ha a fürt egy kimenő proxykiszolgáló mögött található, a bővítmény telepítése előtt győződjön meg arról, hogy a proxykonfigurációs beállítással csatlakozik az Azure Archoz.
Azure Portalra
Az Azure Portalon lépjen a Kubernetes – Azure Arc webhelyre, és válassza ki a fürtöt.
Válassza a Bővítmények lehetőséget (a Gépház alatt), majd a + Hozzáadás lehetőséget.
Az elérhető bővítmények listájában válassza az Azure Key Vault titkos kulcsszolgáltatóját a bővítmény legújabb verziójának üzembe helyezéséhez.
Kövesse az utasításokat a bővítmény üzembe helyezéséhez. Szükség esetén testre szabhatja a telepítést a Konfiguráció lap alapértelmezett beállításainak módosításával.
Azure CLI
A környezeti változók beállítása:
export CLUSTER_NAME=<arc-cluster-name> export RESOURCE_GROUP=<resource-group-name>
Telepítse a Titkos kulcstár CSI-illesztőprogramot és az Azure Key Vault titkos kulcsszolgáltatói bővítményét az alábbi parancs futtatásával:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider
A példához hasonló kimenetnek kell megjelennie. Eltarthat néhány percig, amíg a titkos kulcsszolgáltató Helm-diagramja üzembe lesz helyezve a fürtön.
{
"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-sablon
Hozzon létre egy .json fájlt a következő formátumban. Ügyeljen arra, hogy frissítse a <fürtnév> értékét, hogy a fürtre hivatkozzon.
{ "$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'))]" } ] }
Most állítsa be a környezeti változókat az alábbi Azure CLI-paranccsal:
export TEMPLATE_FILE_NAME=<template-file-path> export DEPLOYMENT_NAME=<desired-deployment-name>
Végül futtassa ezt az Azure CLI-parancsot az Azure Key Vault titkos kulcsszolgáltató bővítményének telepítéséhez:
az deployment group create --name $DEPLOYMENT_NAME --resource-group $RESOURCE_GROUP --template-file $TEMPLATE_FILE_NAME
Most már megtekintheti a titkos kódszolgáltató erőforrásait, és használhatja a bővítményt a fürtben.
A bővítmény telepítésének ellenőrzése
Az Azure Key Vault Titkos kulcstár-szolgáltató bővítmény sikeres telepítésének megerősítéséhez futtassa a következő parancsot.
az k8s-extension show --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
A példához hasonló kimenetnek kell megjelennie.
{
"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 létrehozása vagy kiválasztása
Ezután adja meg a csatlakoztatott fürthöz használni kívánt Azure Key Vaultot. Ha még nincs ilyenje, hozzon létre egy új Key Vaultot az alábbi parancsokkal. Ne feledje, hogy a kulcstartó nevének globálisan egyedinek kell lennie.
Állítsa be a következő környezeti változókat:
export AKV_RESOURCE_GROUP=<resource-group-name>
export AZUREKEYVAULT_NAME=<AKV-name>
export AZUREKEYVAULT_LOCATION=<AKV-location>
Ezután futtassa a következő parancsot:
az keyvault create -n $AZUREKEYVAULT_NAME -g $AKV_RESOURCE_GROUP -l $AZUREKEYVAULT_LOCATION
Az Azure Key Vault képes kulcsokat, titkos kulcsokat és tanúsítványokat tárolni. Ebben a példában a következő paranccsal állíthat be egyszerű szöveges titkos kódokat DemoSecret
:
az keyvault secret set --vault-name $AZUREKEYVAULT_NAME -n DemoSecret --value MyExampleSecret
Mielőtt továbblép a következő szakaszra, jegyezze fel a következő tulajdonságokat:
- A Key Vault titkos objektumának neve
- Objektum típusa (titkos kód, kulcs vagy tanúsítvány)
- A Key Vault-erőforrás neve
- Annak az előfizetésnek az Azure-bérlőazonosítója, amelyhez a Key Vault tartozik
Identitás biztosítása az Azure Key Vault eléréséhez
Jelenleg az Arc-kompatibilis fürtök Titkos kulcstár CSI-illesztőprogramja egy szolgáltatásnéven keresztül érhető el. Az alábbi lépéseket követve adjon meg egy identitást, amely hozzáfér a Key Vaulthoz.
Kövesse az azure-beli szolgáltatásnév létrehozásához szükséges lépéseket. Jegyezze fel az ebben a lépésben létrehozott ügyfél-azonosítót és ügyféltitkot.
Ezután győződjön meg arról, hogy az Azure Key Vault rendelkezik GET engedéllyel a létrehozott szolgáltatásnévhez.
Az első lépésben az ügyfélazonosítót és az ügyfélkulcsot használva hozzon létre egy Kubernetes-titkos kulcsot a csatlakoztatott fürtön:
kubectl create secret generic secrets-store-creds --from-literal clientid="<client-id>" --from-literal clientsecret="<client-secret>"
A létrehozott titkos kód címkézése:
kubectl label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
Hozzon létre egy
SecretProviderClass
következő YAML-t, és töltse ki a kulcstartó nevét, a bérlőazonosítót és az AKV-példányból lekérendő objektumokat:# 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
A nemzeti felhőkkel való használathoz váltson
cloudName
azAzureUSGovernmentCloud
Azure Governmentre vagy a 21Vianet által üzemeltetett Microsoft Azure-raAzureChinaCloud
.A SecretProviderClass alkalmazása a fürtre:
kubectl apply -f secretproviderclass.yaml
Hozzon létre egy podot az alábbi YAML-lel, és adja meg az identitás nevét:
# 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
A pod alkalmazása a fürtre:
kubectl apply -f pod.yaml
A titkos kódok ellenőrzése
A pod elindítása után a csatlakoztatott tartalom az üzembe helyezési YAML-ben megadott kötetútvonalon érhető el.
## 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
További konfigurációs beállítások
Az Azure Key Vault titkos kulcsszolgáltató bővítménye támogatja a Helm-diagramkonfigurációkat.
Az Azure Key Vault titkos kulcsszolgáltató bővítménye gyakran használja az alábbi konfigurációs beállításokat:
Konfigurációs beállítás | Alapértelmezett | Leírás |
---|---|---|
enableSecretRotation | false | Logikai típus. Ha true , rendszeresen frissíti a pod csatlakoztatását és a Kubernetes Secretet a külső titkos kódok tárolójának legújabb tartalmával |
rotationPollInterval | 2 m | Ha enableSecretRotation igen true , ez a beállítás határozza meg a titkos kulcs rotálásának lekérdezési időközét. Ez az időtartam attól függően módosítható, hogy milyen gyakran kell újraszinkronizálni az összes pod és Kubernetes titkos kulcs csatlakoztatott tartalmát a legújabbra. |
syncSecret.enabled | false | Logikai bemenet. Bizonyos esetekben érdemes lehet létrehozni egy Kubernetes-titkos kulcsot a csatlakoztatott tartalom tükrözéséhez. Ha true , SecretProviderClass a secretObjects mező lehetővé teszi a szinkronizált Kubernetes Titkos objektumok kívánt állapotának meghatározását. |
Ezek a beállítások a bővítmény telepítésekor az k8s-extension create
a következő paranccsal adhatók meg:
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
Ezeket a beállításokat a telepítés után a következő paranccsal is módosíthatja 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
Az üzembe helyezéshez szükség szerint más konfigurációs beállításokat is használhat. Ha például módosítani szeretné a kubelet gyökérkönyvtárát fürt létrehozásakor, módosítsa a az k8s-extension create
következő parancsot:
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
Az Azure Key Vault titkos kulcstár-szolgáltatói bővítményének eltávolítása
A bővítmény eltávolításához futtassa a következő parancsot:
az k8s-extension delete --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
Feljegyzés
A bővítmény eltávolítása nem törli a bővítmény telepítésekor létrehozott egyéni erőforrás-definíciókat (CRD-ket).
A bővítménypéldány törlésének ellenőrzéséhez futtassa a következő parancsot:
az k8s-extension list --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Ha a bővítményt sikeresen eltávolították, a kimenetben nem jelenik meg az Azure Key Vault titkos kulcsszolgáltató bővítménye. Ha nincs más bővítmény telepítve a fürtön, egy üres tömb jelenik meg.
Ha már nincs rá szüksége, törölje a szolgáltatásnévhez társított Kubernetes-titkos kódot az alábbi parancs futtatásával:
kubectl delete secret secrets-store-creds
Egyeztetés és hibaelhárítás
Az Azure Key Vault titkos kódok szolgáltatójának bővítménye öngyógyító. Ha valaki megpróbál módosítani vagy törölni egy bővítményösszetevőt, amely a bővítmény telepítésekor lett üzembe helyezve, a rendszer egyezteti az összetevőt az eredeti állapotával. Az egyetlen kivétel az egyéni erőforrás-definíciók (CRD-k) esetében van. Ha a CRD-k törlődnek, azok nem lesznek egyeztetve. A törölt CRD-k visszaállításához használja újra a az k8s-extension create
parancsot a meglévő bővítménypéldány nevével.
A gyakori problémák megoldásával kapcsolatos további információkért tekintse meg az nyílt forráskód Azure Key Vault-szolgáltató hibaelhárítási útmutatóit a Secrets Store CSI-illesztőprogramhoz és a Titkos kulcstár CSI-illesztőprogramhoz.
Következő lépések
- Kipróbálná a dolgokat? Ismerkedjen meg gyorsan egy Azure Arc Jumpstart-forgatókönyvvel a Cluster API használatával.
- További információ az Azure Key Vaultról.