在 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 群集

  1. 使用 az group create 命令创建 Azure 资源组。

    az group create --name myResourceGroup --location chinanorth2
    
  2. 使用带有 --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
    
  3. 上一个命令创建用户分配的托管标识 (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 提供程序安装

  1. 使用 [az aks get-credentials][az-aks-get-credentials] 命令获取 AKS 群集凭据。

    az aks get-credentials --name myAKSCluster --resource-group myResourceGroup
    
  2. 使用 kubectl get pods 命令验证安装是否已完成,该命令可在 kube-system 命名空间中列出具有 secrets-store-csi-driversecrets-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
    
  3. 验证群集节点池中的每个节点上是否正在运行机密存储 CSI 驱动程序 Pod 和机密存储提供程序 Azure Pod。

创建或使用现有的 Azure Key Vault

  1. 使用 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
    
  2. 密钥保管库可以存储密钥、机密和证书。 在此示例中,使用 az keyvault secret set 命令设置名为 ExampleSecret 的纯文本机密。

    az keyvault secret set --vault-name <keyvault-name> --name ExampleSecret --value MyAKSExampleSecret
    
  3. 记下以下属性以供将来使用:

    • 密钥保管库中机密对象的名称
    • 对象类型(机密、密钥或证书)
    • 密钥保管库资源的名称
    • 订阅的 Azure 租户 ID

后续步骤

本文介绍了如何将适用于机密存储 CSI 驱动程序的 Azure Key Vault 提供程序用于 AKS 群集。 现在需要提供一个标识来访问 Azure Key Vault。 若要了解如何操作,请继续阅读下一篇文章。