你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:在 Azure Kubernetes 服务 (AKS) 群集中使用适用于机密存储 CSI 驱动程序的 Azure Key Vault 提供程序

了解如何借助服务连接器在 Azure Kubernetes 服务 (AKS) 群集中使用 CSI 驱动程序连接到 Azure Key Vault。 在本教程中,请完成以下任务:

  • 创建 AKS 群集和 Azure Key Vault。
  • 使用服务连接器在 AKS 群集与 Azure Key Vault 之间创建连接。
  • 创建一个 SecretProviderClass CRD 和一个使用 CSI 提供程序的 pod 来测试连接。
  • 清理资源。

重要

AKS 中的服务连接目前为预览版。 有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款

警告

Microsoft 建议使用最安全的可用身份验证流。 本过程中介绍的身份验证流程需要非常高的信任度,并携带其他流中不存在的风险。 请仅在无法使用其他更安全的流(例如托管标识)时才使用此流。

先决条件

创建 Azure 资源

  1. 为本教程创建资源组。

    az group create \
        --name MyResourceGroup \
        --location eastus
    
  2. 使用以下命令或参考教程创建 AKS 群集。 我们将在此群集中创建服务连接、Pod 定义和部署示例应用程序。

    az aks create \
        --resource-group MyResourceGroup \
        --name MyAKSCluster \
        --enable-managed-identity \
        --node-count 1
    
  3. 使用以下命令连接到群集。

    az aks get-credentials \
        --resource-group MyResourceGroup \
        --name MyAKSCluster
    
  4. 使用以下命令或参考教程创建 Azure Key Vault。 这是连接到 AKS 群集以及 CSI 驱动程序从中同步机密的目标服务。

    az keyvault create \
        --resource-group MyResourceGroup \  
        --name MyKeyVault \
        --location EastUS
    
  5. 使用以下命令在 Key Vault 中创建机密。

    az keyvault secret set \
        --vault-name MyKeyVault \
        --name ExampleSecret \
        --value MyAKSExampleSecret
    

使用服务连接器在 AKS 中创建服务连接(预览版)

使用 Azure 门户或 Azure CLI 在 AKS 群集与 Azure Key Vault 之间创建服务连接。

  1. 在 Azure 门户中打开“Kubernetes 服务”,并从左侧菜单中选择“服务连接器”

  2. 选择“创建”并填写设置,如下所示。 将其他设置保留为其默认值。

    设置 选择 说明
    Kubernetes 命名空间 default 群集中需要进行连接的命名空间。
    服务类型 Key Vault(启用 CSI) 选择 Key Vault 作为目标服务类型,并选中启用 CSI 的选项。
    连接名称 keyvault_conn 使用服务连接器提供的连接名称或选择自己的连接名称。
    订阅 <MySubscription> Azure Key Vault 目标服务的订阅。
    密钥保管库 <MyKeyVault> 要连接到的目标密钥保管库。
    客户端类型 Python 用于连接到目标服务的代码语言或框架。
  3. 创建连接后,“服务连接器”页会显示有关新连接的信息。

    Azure 门户的屏幕截图,其中显示了服务连接器创建的 kubernetes 资源。

测试连接

  1. 克隆示例存储库:

    git clone https://github.com/Azure-Samples/serviceconnector-aks-samples.git
    
  2. 转到 Azure Key Vault 的存储库示例文件夹:

    cd serviceconnector-aks-samples/azure-keyvault-csi-provider
    
  3. 替换 azure-keyvault-csi-provider 文件夹中 secret_provider_class.yaml 文件中的占位符。

    • <AZURE_KEYVAULT_NAME> 替换为创建和连接的密钥保管库的名称。 可以从服务连接器的 Azure 门户获取该值。
    • <AZURE_KEYVAULT_TENANTID> 替换为密钥保管库的租户 ID。 可以从服务连接器的 Azure 门户获取该值。
    • <AZURE_KEYVAULT_CLIENTID> 替换为 azureKeyvaultSecretsProvider 加载项的标识客户端 ID。 可以从服务连接器的 Azure 门户获取该值。
    • <KEYVAULT_SECRET_NAME> 替换为创建的密钥保管库机密名称,例如 ExampleSecret
  4. 使用 kubectl apply 命令将 Kubernetes 资源部署到群集。 使用 az aks install-cli 命令在本地安装 kubectl(如果尚未安装)。

    1. 部署 SecretProviderClass CRD。
    kubectl apply -f secret_provider_class.yaml
    
    1. 部署 pod。 该命令在 AKS 群集的默认命名空间中创建名为 sc-demo-keyvault-csi 的 Pod。
    kubectl apply -f pod.yaml
    
  5. 通过使用 kubectl 查看 Pod 来检查部署是否成功。

    kubectl get pod/sc-demo-keyvault-csi
    
  6. Pod 启动后,在部署 YAML 中指定的卷路径上装载的内容便可用了。 使用以下命令验证机密并打印测试机密。

    • 使用以下命令显示机密存储中保存的机密。
    kubectl exec sc-demo-keyvault-csi -- ls /mnt/secrets-store/
    
    • 使用以下命令显示存储中的机密。 此示例命令会显示测试机密 ExampleSecret
    kubectl exec sc-demo-keyvault-csi -- cat /mnt/secrets-store/ExampleSecret
    

清理资源

如果不需要重复使用在本教程中创建的资源,请通过删除资源组来删除创建的所有资源。

az group delete \
    --resource-group MyResourceGroup

后续步骤

阅读以下文章,详细了解服务连接器的概念以及它如何帮助 AKS 连接到服务。