Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
使用适用于机密存储 CSI 驱动程序的 Azure Key Vault 提供程序,可以通过 CSI 卷将 Azure Key Vault 作为机密存储与 Azure Kubernetes 服务 (AKS) 群集集成。
功能
- 使用 CSI 卷将机密、密钥和证书装载到 Pod。
- 支持 CSI 内联卷。
- 支持将多个机密存储对象装载为单个卷。
- 通过
SecretProviderClassCRD 支持 Pod 可移植性。 - 支持 Windows 容器。
- 与 Kubernetes 机密同步。
- 支持自动轮换已装载内容和已同步的 Kubernetes 机密。
限制
- 当机密轮换时,使用
ConfigMap或Secret作为subPath卷装载的容器不会接收到自动更新。 这是 Kubernetes 限制。 若要使更改生效,应用程序需要通过监视文件系统中的更改或通过重启 Pod 来重新加载更改的文件。 有关详细信息,请参阅机密存储 CSI 驱动程序已知限制。 - 加载项会创建一个在节点资源组中命名
azurekeyvaultsecretsprovider-xxx的托管标识,并自动将其分配给虚拟机规模集(VMSS)。 可使用此托管标识或自己的托管标识访问密钥保管库。 不支持阻止创建标识。
先决条件
网络
- 如果使用网络隔离群集,建议 设置专用终结点以访问 Azure Key Vault。
- 如果群集具有出站类型
userDefinedRouting并使用可基于域名(如 Azure 防火墙)控制出站流量的防火墙设备,请确保 允许所需的出站网络规则和 FQDN。 - 如果将 Ingress 限制在群集中,请确保端口 9808 和 8095 处于打开状态。
角色
- 用于与
SecretProviderClass一起使用的标识需要具备访问key或certificate对象类型的权限。 - 要与
SecretProviderClass一起使用的标识必须具有Key Vault Secrets User权限,以访问secret对象类型。
使用用于机密存储 CSI 驱动程序支持的 Azure Key Vault 提供程序创建 AKS 群集
使用
az group create命令创建 Azure 资源组。az group create --name myResourceGroup --location chinanorth2使用带有
az aks create参数的--enable-addons azure-keyvault-secrets-provider命令创建具有适用于机密存储 CSI 驱动程序的 Azure 密钥保管库提供程序功能的 AKS 群集。 加载项会创建用户分配的托管标识,你可以使用该标识向密钥保管库进行身份验证。 下例创建了一个 AKS 群集并启用了适用于机密存储 CSI 驱动程序的 Azure 密钥保管库提供程序。注意
如果要使用 Microsoft Entra 工作负载 ID,还必须使用
--enable-oidc-issuer和--enable-workload-identity参数,如以下示例所示:az aks create --name myAKSCluster --resource-group myResourceGroup --enable-addons azure-keyvault-secrets-provider --enable-oidc-issuer --enable-workload-identity --generate-ssh-keysaz aks create \ --name myAKSCluster \ --resource-group myResourceGroup \ --enable-addons azure-keyvault-secrets-provider \ --generate-ssh-keys上一个命令创建用户分配的托管标识 (
azureKeyvaultSecretsProvider) 以访问 Azure 资源。 以下示例使用此标识连接到存储机密的密钥保管库,但也可以使用其他标识访问方法。 请记下输出中该标识的clientId。..., "addonProfiles": { "azureKeyvaultSecretsProvider": { ..., "identity": { "clientId": "<client-id>", ... } }
注意
启用此功能后,AKS 在节点资源组中创建名为 azurekeyvaultsecretsprovider-xxx 的托管标识,并自动将其分配给虚拟机规模集 (VMSS)。 可使用此托管标识或自己的托管标识访问密钥保管库。 不支持阻止创建标识。
支持使用适用于机密存储 CSI 驱动程序的 Azure Key Vault 提供程序升级现有 AKS 群集
使用
az aks enable-addons命令通过适用于机密存储 CSI 驱动程序的 Azure Key Vault 提供程序功能更新现有 AKS 群集,并启用azure-keyvault-secrets-provider加载项。 加载项会创建用户分配的托管标识,你可以使用该标识向密钥保管库进行身份验证。az aks enable-addons --addons azure-keyvault-secrets-provider --name myAKSCluster --resource-group myResourceGroup
注意
启用此功能后,AKS 在节点资源组中创建名为 azurekeyvaultsecretsprovider-xxx 的托管标识,并自动将其分配给虚拟机规模集 (VMSS)。 可使用此托管标识或自己的托管标识访问密钥保管库。 不支持阻止创建标识。
验证适用于机密存储 CSI 驱动程序的 Azure Key Vault 提供程序安装
使用
az aks get-credentials命令获取 AKS 群集凭据。az aks get-credentials --name myAKSCluster --resource-group myResourceGroup使用
kubectl get pods命令验证安装是否已完成,该命令可在 kube-system 命名空间中列出具有secrets-store-csi-driver和secrets-store-provider-azure标签的所有 Pod。kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver,secrets-store-provider-azure)'输出应类似于以下示例输出:
NAME READY STATUS RESTARTS AGE aks-secrets-store-csi-driver-4vpkj 3/3 Running 2 4m25s aks-secrets-store-csi-driver-ctjq6 3/3 Running 2 4m21s aks-secrets-store-csi-driver-tlvlq 3/3 Running 2 4m24s aks-secrets-store-provider-azure-5p4nb 1/1 Running 0 4m21s aks-secrets-store-provider-azure-6pqmv 1/1 Running 0 4m24s aks-secrets-store-provider-azure-f5qlm 1/1 Running 0 4m25s验证群集节点池中的每个节点上是否正在运行机密存储 CSI 驱动程序 Pod 和机密存储提供程序 Azure Pod。
创建或使用现有的 Azure Key Vault
使用
az keyvault create命令或具有az keyvault update标志的--enable-rbac-authorization命令创建或更新启用了 Azure 基于角色的访问控制 (Azure RBAC) 的密钥保管库。 密钥保管库的名称必须是全局唯一的。 有关密钥保管库权限模型和 Azure RBAC 的更多详细信息,请参阅使用 Azure 基于角色的访问控制提供对密钥保管库密钥、证书和机密的访问权限## Create a new Azure key vault az keyvault create --name <keyvault-name> --resource-group myResourceGroup --location chinanorth2 --enable-rbac-authorization ## Update an existing Azure key vault az keyvault update --name <keyvault-name> --resource-group myResourceGroup --enable-rbac-authorization密钥保管库可以存储密钥、机密和证书。 在此示例中,使用
az keyvault secret set命令设置名为ExampleSecret的纯文本机密。az keyvault secret set --vault-name <keyvault-name> --name ExampleSecret --value MyAKSExampleSecret记下以下属性以供将来使用:
- 密钥保管库中机密对象的名称
- 对象类型(机密、密钥或证书)
- 密钥保管库资源的名称
- 订阅的 Azure 租户 ID
后续步骤
本文介绍了如何将适用于机密存储 CSI 驱动程序的 Azure Key Vault 提供程序用于 AKS 群集。 现在需要提供一个标识来访问 Azure Key Vault。 若要了解如何操作,请继续阅读下一篇文章。