在 Azure Kubernetes 服务 (AKS) 群集中使用适用于机密存储 CSI 驱动程序的 Azure Key Vault 提供程序
使用适用于机密存储 CSI 驱动程序的 Azure Key Vault 提供程序,可以通过 CSI 卷将 Azure Key Vault 作为机密存储与 Azure Kubernetes 服务 (AKS) 群集集成。
功能
- 使用 CSI 卷将机密、密钥和证书装载到 Pod。
- 支持 CSI 内联卷。
- 支持将多个机密存储对象装载为单个卷。
- 通过
SecretProviderClass
CRD 支持 Pod 可移植性。 - 支持 Windows 容器。
- 与 Kubernetes 机密同步。
- 支持自动轮换已装载内容和已同步的 Kubernetes 机密。
限制
使用 subPath 卷装载的容器在轮换时不会接收机密更新。 有关详细信息,请参阅机密存储 CSI 驱动程序已知限制。
先决条件
- 如果没有 Azure 订阅,可在开始前创建一个试用帐户。
- 检查 Azure CLI 的版本是否为 2.30.0 或更高版本。 如果它是更早的版本,请安装最新版本。
- 如果将 Ingress 限制在群集中,请确保端口 9808 和 8095 处于打开状态。
- 建议的最低 Kubernetes 版本取决于 Kubernetes 版本支持滚动窗口。 确保运行的是 N-2 版本或更高版本。
使用用于机密存储 CSI 驱动程序支持的 Azure Key Vault 提供程序创建 AKS 群集
使用
az group create
命令创建 Azure 资源组。az group create --name myResourceGroup --location chinanorth2
使用带有
--enable-addons azure-keyvault-secrets-provider
参数的az aks create
命令创建具有适用于机密存储 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-keys
az 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
][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
命令或具有--enable-rbac-authorization
标志的az keyvault update
命令创建或更新启用了 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 --location chinanorth2 --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。 若要了解如何操作,请继续阅读下一篇文章。