Použití rozšíření zprostředkovatele tajných kódů služby Azure Key Vault k načtení tajných kódů do clusterů Kubernetes s podporou Azure Arc
Zprostředkovatel služby Azure Key Vault pro ovladač CSI úložiště tajných kódů umožňuje integraci služby Azure Key Vault jako úložiště tajných kódů s clusterem Kubernetes prostřednictvím svazku CSI. Pro clustery Kubernetes s podporou Služby Azure Arc můžete nainstalovat rozšíření zprostředkovatele tajných kódů služby Azure Key Vault a načíst tajné kódy.
Mezi možnosti rozšíření zprostředkovatele tajných kódů služby Azure Key Vault patří:
- Připojí tajné kódy, klíče nebo certifikáty k podu pomocí vloženého svazku CSI.
- Podporuje přenositelnost podů pomocí Třídy SecretProviderClass CRD.
- Podporuje kontejnery Linuxu a Windows.
- Podporuje synchronizaci s tajnými kódy Kubernetes.
- Podporuje automatickou obměnu tajných kódů.
- Komponenty rozšíření se nasazují do zón dostupnosti, takže jsou zónově redundantní.
Tip
Pokud je potřeba offline přístup nebo pokud potřebujete tajné kódy synchronizované do úložiště tajných kódů Kubernetes, použijte rozšíření Secret Store pro správu tajných kódů v clusterech Kubernetes s podporou Arc.
Požadavky
- Cluster s podporovanou distribucí Kubernetes, která je připojená k Azure Arc. Pro tento scénář se v současné době podporují následující distribuce Kubernetes:
- Rozhraní API clusteru Azure
- Clustery Azure Kubernetes Service (AKS) v Azure Stack HCI
- Služba AKS povolená službou Azure Arc
- Google Kubernetes Engine
- Distribuce OpenShift Kubernetes
- Canonical Kubernetes Distribution
- Elastic Kubernetes Service
- Tanzu Kubernetes Grid
- Azure Red Hat OpenShift
- Odchozí připojení k následujícím koncovým bodům:
linuxgeneva-microsoft.azurecr.io
upstreamarc.azurecr.io
*.blob.core.windows.net
- Ujistěte se, že jste splnili obecné požadavky pro rozšíření clusteru. Musíte použít verzi 0.4.0 nebo novější rozšíření
k8s-extension
Azure CLI.
Instalace rozšíření zprostředkovatele tajných kódů služby Azure Key Vault v clusteru Kubernetes s podporou Arc
Rozšíření zprostředkovatele tajných kódů služby Azure Key Vault můžete nainstalovat na připojený cluster na webu Azure Portal, pomocí Azure CLI nebo nasazením šablony ARM.
V každém clusteru Kubernetes s podporou Azure Arc je možné nasadit pouze jednu instanci rozšíření.
Tip
Pokud je cluster za odchozím proxy serverem, před instalací rozšíření se ujistěte, že ho připojíte ke službě Azure Arc pomocí možnosti konfigurace proxy serveru.
portál Azure
Na webu Azure Portal přejděte na Kubernetes – Azure Arc a vyberte cluster.
Vyberte Rozšíření (v části Nastavení) a pak vyberte + Přidat.
V seznamu dostupných rozšíření vyberte zprostředkovatele tajných kódů služby Azure Key Vault a nasaďte nejnovější verzi rozšíření.
Postupujte podle pokynů k nasazení rozšíření. V případě potřeby upravte instalaci změnou výchozích možností na kartě Konfigurace .
Azure CLI
Nastavte proměnné prostředí:
export CLUSTER_NAME=<arc-cluster-name> export RESOURCE_GROUP=<resource-group-name>
Spuštěním následujícího příkazu nainstalujte ovladač CSI úložiště tajných kódů a rozšíření zprostředkovatele tajných kódů služby Azure Key Vault:
az k8s-extension create --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --cluster-type connectedClusters --extension-type Microsoft.AzureKeyVaultSecretsProvider --name akvsecretsprovider
Měl by se zobrazit výstup podobný tomuto příkladu. Než se chart Helm zprostředkovatele tajných kódů nasadí do clusteru, může to trvat několik minut.
{
"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"
}
Šablona ARM
Vytvořte soubor .json pomocí následujícího formátu. Nezapomeňte aktualizovat hodnotu názvu> clusteru <tak, aby odkazovat na váš cluster.
{ "$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'))]" } ] }
Teď nastavte proměnné prostředí pomocí následujícího příkazu Azure CLI:
export TEMPLATE_FILE_NAME=<template-file-path> export DEPLOYMENT_NAME=<desired-deployment-name>
Nakonec spuštěním tohoto příkazu Azure CLI nainstalujte rozšíření zprostředkovatele tajných kódů služby Azure Key Vault:
az deployment group create --name $DEPLOYMENT_NAME --resource-group $RESOURCE_GROUP --template-file $TEMPLATE_FILE_NAME
Teď byste měli být schopni zobrazit prostředky zprostředkovatele tajných kódů a použít rozšíření ve vašem clusteru.
Ověření instalace rozšíření
Pokud chcete potvrdit úspěšnou instalaci rozšíření zprostředkovatele tajných kódů služby Azure Key Vault, spusťte následující příkaz.
az k8s-extension show --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
Měl by se zobrazit výstup podobný tomuto příkladu.
{
"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"
}
Vytvoření nebo výběr služby Azure Key Vault
Dále zadejte službu Azure Key Vault, která se má použít s připojeným clusterem. Pokud ho ještě nemáte, vytvořte novou službu Key Vault pomocí následujících příkazů. Mějte na paměti, že název trezoru klíčů musí být globálně jedinečný.
Nastavte následující proměnné prostředí:
export AKV_RESOURCE_GROUP=<resource-group-name>
export AZUREKEYVAULT_NAME=<AKV-name>
export AZUREKEYVAULT_LOCATION=<AKV-location>
Potom spusťte následující příkaz:
az keyvault create -n $AZUREKEYVAULT_NAME -g $AKV_RESOURCE_GROUP -l $AZUREKEYVAULT_LOCATION
Azure Key Vault může ukládat klíče, tajné kódy a certifikáty. V tomto příkladu můžete nastavit tajný kód prostého textu volaný DemoSecret
pomocí následujícího příkazu:
az keyvault secret set --vault-name $AZUREKEYVAULT_NAME -n DemoSecret --value MyExampleSecret
Než přejdete k další části, poznamenejte si následující vlastnosti:
- Název tajného objektu ve službě Key Vault
- Typ objektu (tajný klíč, klíč nebo certifikát)
- Název prostředku služby Key Vault
- ID tenanta Azure pro předplatné, ke kterému služba Key Vault patří
Poskytnutí identity pro přístup ke službě Azure Key Vault
Ovladač CSI úložiště tajných kódů v clusterech s podporou arc je v současné době přístupný prostřednictvím instančního objektu. Podle těchto kroků zadejte identitu, která má přístup ke službě Key Vault.
Podle pokynů vytvořte instanční objekt v Azure. Poznamenejte si ID klienta a tajný klíč klienta vygenerovaný v tomto kroku.
Dále se ujistěte, že azure Key Vault má oprávnění GET k vytvořenému instančnímu objektu.
Pomocí ID klienta a tajného klíče klienta z prvního kroku vytvořte tajný klíč Kubernetes v připojeném clusteru:
kubectl create secret generic secrets-store-creds --from-literal clientid="<client-id>" --from-literal clientsecret="<client-secret>"
Označení vytvořeného tajného kódu:
kubectl label secret secrets-store-creds secrets-store.csi.k8s.io/used=true
Vytvořte
SecretProviderClass
následující YAML a vyplňte hodnoty pro název trezoru klíčů, ID tenanta a objekty, které se mají načíst z instance AKV:# 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
Pro použití s národními cloudy přejděte
cloudName
naAzureUSGovernmentCloud
Azure Government nebo naAzureChinaCloud
Microsoft Azure provozovanou společností 21Vianet.Použijte secretProviderClass pro váš cluster:
kubectl apply -f secretproviderclass.yaml
Vytvořte pod s následujícím YAML a vyplňte název vaší identity:
# 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
Použití podu v clusteru:
kubectl apply -f pod.yaml
Ověření tajných kódů
Po spuštění podu je k dispozici připojený obsah v cestě svazku zadané v YAML nasazení.
## 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
Další možnosti konfigurace
Rozšíření zprostředkovatele tajných kódů služby Azure Key Vault podporuje konfigurace chartů Helm.
Následující nastavení konfigurace se často používají s rozšířením zprostředkovatele tajných kódů služby Azure Key Vault:
Nastavení konfigurace | Výchozí | Popis |
---|---|---|
enableSecretRotation | false (nepravda) | Logický typ. Pokud true , pravidelně aktualizuje pod mount a Kubernetes Secret s nejnovějším obsahem z externího úložiště tajných kódů. |
rotationPollInterval | 2 m | Pokud enableSecretRotation ano true , toto nastavení určuje dobu trvání intervalu hlasování o obměně tajných kódů. Tato doba trvání se dá upravit na základě toho, jak často se připojený obsah všech podů a tajných kódů Kubernetes musí znovu synchronizovat na nejnovější verzi. |
syncSecret.enabled | false (nepravda) | Logický vstup. V některých případech můžete chtít vytvořit tajný kód Kubernetes pro zrcadlení připojeného obsahu. Pokud true umožňuje SecretProviderClass secretObjects poli definovat požadovaný stav synchronizovaných objektů tajných kódů Kubernetes. |
Tato nastavení je možné zadat při instalaci rozšíření pomocí az k8s-extension create
příkazu:
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
Tato nastavení můžete po instalaci také změnit pomocí az k8s-extension update
příkazu:
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
Podle potřeby můžete pro nasazení použít další nastavení konfigurace. Pokud chcete například změnit kořenový adresář kubelet při vytváření clusteru, upravte az k8s-extension create
příkaz:
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
Odinstalace rozšíření zprostředkovatele tajných kódů služby Azure Key Vault
Pokud chcete rozšíření odinstalovat, spusťte následující příkaz:
az k8s-extension delete --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --name akvsecretsprovider
Poznámka:
Odinstalace rozšíření neodstraní definice vlastních prostředků (CRD), které byly vytvořeny při instalaci rozšíření.
Pokud chcete ověřit, že se instance rozšíření odstranila, spusťte následující příkaz:
az k8s-extension list --cluster-type connectedClusters --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Pokud se rozšíření úspěšně odebralo, ve výstupu se nezobrazí rozšíření zprostředkovatele tajných kódů služby Azure Key Vault. Pokud v clusteru nemáte nainstalovaná žádná další rozšíření, zobrazí se prázdné pole.
Pokud už ho nepotřebujete, nezapomeňte odstranit tajný kód Kubernetes přidružený k instančnímu objektu spuštěním následujícího příkazu:
kubectl delete secret secrets-store-creds
Odsouhlasení a řešení potíží
Rozšíření zprostředkovatele tajných kódů služby Azure Key Vault je samoopravené. Pokud se někdo pokusí změnit nebo odstranit komponentu rozšíření, která byla nasazena při instalaci rozšíření, bude tato komponenta odsouhlasována s původním stavem. Jediné výjimky jsou pro vlastní definice prostředků (CRD). Pokud dojde k odstranění identifikátorů CRD, nebudou odsouhlasené. Pokud chcete obnovit odstraněné identifikátory CRD, použijte az k8s-extension create
příkaz znovu s názvem existující instance rozšíření.
Další informace o řešení běžných problémů najdete v průvodcích odstraňováním potíží s open source pro poskytovatele služby Azure Key Vault pro ovladač CSI úložiště tajných kódů a ovladač CSI úložiště tajných kódů.
Další kroky
- Chcete si něco vyzkoušet? Začněte rychle se scénářem jumpstartu Azure Arc pomocí rozhraní API clusteru.
- Přečtěte si další informace o službě Azure Key Vault.