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

教程:使用具有工作负荷标识的服务连接器连接到 AKS 中的Azure 存储

本教程介绍如何使用服务连接器,通过工作负载身份将 Azure 存储 帐户连接到 Azure Kubernetes 服务 (AKS) 群集中的 Pod。 你将完成以下任务:

  • 创建 AKS 群集和Azure 存储帐户。
  • 使用服务连接器在 AKS 群集与 Azure 存储 帐户之间创建连接。
  • 克隆从 AKS 群集连接到 Azure 存储 帐户的示例应用程序。
  • 将应用程序部署到 AKS 群集中的 Pod 并测试连接。
  • 清理资源。

先决条件

  • 基本了解容器、 工作负荷标识和 AKS。 有关详细信息,请参阅 Tutorial:为 Azure Kubernetes 服务 (AKS)0 准备应用程序。
  • 在其中您拥有 Azure 资源写入权限的 Azure 订阅,位于支持服务连接器的 Azure 区域中,并且有足够的 AKS 支持和计算配额来运行本教程。 免费创建帐户
  • 在 Azure 订阅中注册的 Microsoft.ServiceLinkerMicrosoft.ContainerServiceMicrosoft.ContainerRegistryMicrosoft.ManagedIdentity 资源提供程序。 可以运行 az provider register -n Microsoft.[service] 来注册提供程序。
  • Git 访问和克隆示例存储库。
  • 已安装 Dockerkubectl 来管理容器映像和 Kubernetes 资源。 在本地安装kubectl,通过运行az aks install-cli
  • Azure CLI已安装。

创建 Azure 资源

  1. 通过运行 az login 并按照提示登录Azure。

  2. 创建用于本教程的 Azure 资源组,将 <region> 占位符替换为有效值。 location必须是一个Azure区域,其中订阅有足够的计算配额用于Azure资源,并且对任何服务没有限制。

    az group create \
        --name MyResourceGroup \
        --location <region>
    
  3. 运行以下命令,创建 AKS 群集以包含服务连接、Pod 定义和示例应用程序。 有关详细信息,请参阅 Quickstart:使用 Azure CLI

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

    az aks get-credentials \
        --resource-group MyResourceGroup \
        --name MyAKSCluster
    
  5. 创建一个Azure 存储帐户,作为 AKS 群集连接到的目标服务,以及示例应用程序与之交互。 有关详细信息,请参阅 创建 Azure 存储帐户。 运行下列命令,将 <storageaccountname> 替换为 3-24 个小写或数字字符的名称,并在 Azure 中是唯一的。

    az storage account create \
        --resource-group MyResourceGroup \
        --name <storageaccountname> \
        --sku Standard_LRS
    
  6. 创建一个 Azure 容器注册表,以托管 AKS pod 定义中所使用的应用程序容器镜像。 有关详细信息,请参阅 Quickstart:使用 Azure 门户创建Azure容器注册表。 运行以下命令,将 <registryname> 替换为包括 5 到 50 个小写字母或数字字符的唯一名称,并且在 Azure 中必须是唯一的。

    az acr create \
        --resource-group MyResourceGroup \
        --name <registryname> \
        --sku Standard
    
  7. 启用匿名拉取,以便 AKS 群集可以拉取注册表镜像。 将 <registryname> 占位符替换为注册表名称。

    az acr update \
        --resource-group MyResourceGroup \
        --name <registryname> \
        --anonymous-pull-enabled
    
  8. 运行以下命令以创建用户分配的托管身份,该身份可用于服务连接以启用 AKS 工作负载的工作负荷身份。 有关详细信息,请参阅使用 Azure 门户管理用户分配的托管标识

    az identity create \
        --resource-group MyResourceGroup \
        --name MyIdentity
    

使用服务连接器创建服务连接

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

运行以下Azure CLI命令,创建与Azure存储帐户的服务连接。 将 <storageaccountname> 替换为您的存储帐户名称,<user-identity-resource-id> 替换为您用户分配的托管标识资源 ID。

可以从上述 az identity create 命令的输出中获取用户分配的托管标识资源 ID,或使用 /subscriptions/<subscription-id>/resourceGroups/MyResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MyIdentity 格式。

az aks connection create storage-blob \
  --resource-group MyResourceGroup \
  --name MyAKSCluster \
  --target-resource-group MyResourceGroup \
  --account <storageaccountname> \
  --workload-identity <user-identity-resource-id>

创建连接后,Azure门户服务连接器页会显示有关新连接的信息。 在本教程的后面部分编辑 pod.yaml 文件时,可以使用此信息。

Azure 门户的 截图,查看由 Service Connector 创建的 Kubernetes 资源。

创建示例应用程序

  1. 克隆示例存储库,然后更改为包含示例应用的目录。 从此文件夹中运行剩余的命令。

    git clone https://github.com/Azure-Samples/serviceconnector-aks-samples.git
    cd serviceconnector-aks-samples/azure-storage-workload-identity
    
  2. 使用 az acr build 命令生成映像并将其推送到容器注册表。 将 <registryname> 占位符替换为注册表名称。

    az acr build --registry <registryname> --image sc-demo-storage-identity:latest ./
    
  3. 使用 az acr repository list 命令查看容器注册表中的映像。 将 <registryname> 占位符替换为注册表名称。

    az acr repository list --name <registryname> --output table
    

运行应用程序并测试连接

  1. 替换本地应用文件夹中 pod.yaml 文件中的以下占位符:

    • <YourContainerImage>:替换为容器注册表中的映像名称,例如 <registryname>.azurecr.io/sc-demo-storage-identity:latest
    • <ServiceAccountCreatedByServiceConnector>:替换为在创建连接后创建的服务帐户服务连接器。 可以在 Azure 门户中的 AKS 群集服务连接器页上检查服务帐户名称。
    • <SecretCreatedByServiceConnector>:替换为在创建连接后创建的机密服务连接器。 可以在 Azure 门户中的 AKS 群集服务连接器页上检查服务帐户名称。
  2. 使用 kubectl apply.. 将 Pod 部署到群集。 该命令在 AKS 群集的默认命名空间中创建名为 sc-demo-storage-identity 的 Pod。

    kubectl apply -f pod.yaml
    
  3. 使用 kubectl查看 Pod 来检查部署是否成功。

    kubectl get pod/sc-demo-storage-identity
    
  4. 使用 kubectl 查看日志来检查是否已建立连接。

    kubectl logs pod/sc-demo-storage-identity
    

清理资源

如果不再需要为本教程创建的Azure资源,可以通过删除 MyResourceGroup 资源组来删除它们。

az group delete \
  --resource-group MyResourceGroup