教程:从托管在 Azure Kubernetes 服务上的应用程序连接到 Azure Cache for Redis

在本教程中,将使用此示例与 Azure Cache for Redis 实例连接。

先决条件

重要

本教程假定你熟悉基本的 Kubernetes 概念,如容器、Pod 和服务等。

设置 Azure Cache for Redis 实例

  1. 使用 Azure 门户或首选 CLI 工具创建新的 Azure Cache for Redis 实例。 使用快速入门指南来开始使用。

    对于本教程,请使用标准 C1 缓存。 在 Azure 门户中创建标准 C1 缓存的屏幕截图

  2. 按照步骤创建缓存。

  3. 创建 Redis 缓存实例后,导航到“身份验证”选项卡。选择要用于连接到 Redis 缓存实例的用户分配的托管标识,然后选择“保存”

  4. 或者,可以导航到“资源”菜单上的“数据访问配置”,以使用用户分配的托管标识创建新的 Redis 用户,以连接到缓存。

  5. 记下门户中 Redis 用户的用户名。 将此用户名用于 AKS 工作负荷。

在本地运行示例

若要在本地运行此示例,请在 Redis 实例上将用户主体配置为 Redis 用户。 此代码示例通过 DefaultAzureCredential 使用用户主体连接到 Redis 实例。

配置 AKS 群集

执行以下步骤为 AKS 群集配置工作负荷标识。

然后完成以下步骤:

  • 启用 OIDC 颁发者和工作负荷标识
  • 如果已创建托管标识,请跳过创建用户分配的托管标识的步骤。 如果创建新的托管标识,请确保为托管标识创建新的 Redis 用户,并分配适当的数据访问权限。
  • 创建使用用户分配的托管标识的客户端 ID 批注的 Kubernetes 服务帐户
  • 为 AKS 群集创建联合标识凭据。

配置连接到 Azure Cache for Redis 的工作负荷

接下来,设置 AKS 工作负荷,以便在配置 AKS 群集后连接到 Azure Cache for Redis。

  1. 下载示例应用的代码。

  2. 使用 az acr build 命令生成 docker 映像并将其推送到 Azure 容器注册表。

     az acr build --image sample/connect-from-aks-sample:1.0 --registry yourcontainerregistry --file Dockerfile .
    
  3. 使用以下命令将容器注册表附加到 AKS 群集:

    az aks update --name clustername --resource-group mygroup --attach-acr youracrname
    

部署工作负荷

在本部分中,首先安装 Kubernetes CLI,然后连接到 AKS 群集。

安装 Kubernetes CLI

使用 Kubernetes CLI kubectl 从本地计算机连接到 Kubernetes 群集。 如果在本地运行,则可以使用以下命令安装 kubectl。

az aks install-cli

连接到 AKS 群集

  1. 使用门户复制 AKS 群集的资源组和群集名称。 若要配置 kubectl 以连接到 AKS 群集,请将以下命令用于资源组和群集名称:

    az aks get-credentials --resource-group myResourceGroup --name myClusterName
    
  2. 运行以下命令,验证是否能够连接到群集:

    kubectl get nodes
    

    应会看到类似的输出,其中显示了群集节点的列表。

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-agentpool-21274953-vmss000001   Ready    agent   1d    v1.29.7
    aks-agentpool-21274953-vmss000003   Ready    agent   1d    v1.29.7
    aks-agentpool-21274953-vmss000006   Ready    agent   1d    v1.29.7
    

运行工作负荷

  1. 以下代码介绍了用于运行工作负荷的 Pod 规范文件。 请注意,Pod 具有标签 azure.workloadidentity/use: "true",并使用 AKS 工作负荷标识所需的 serviceAccountName 进行批注。 使用访问密钥身份验证时,请替换 AUTHENTICATION_TYPE、REDIS_HOSTNAME、REDIS_ACCESSKEY 和 REDIS_PORT 环境变量的值。

     apiVersion: v1
     kind: Pod
     metadata:
       name: entrademo-pod
       labels:
         azure.workload.identity/use: "true"  # Required. Only pods with this label can use workload identity.
     spec:
       serviceAccountName: workload-identity-sa
       containers:
       - name: entrademo-container
         image: youracr.azurecr.io/connect-from-aks-sample:1.0
         imagePullPolicy: Always
         command: ["dotnet", "ConnectFromAKS.dll"] 
         resources:
           limits:
             memory: "256Mi"
             cpu: "500m"
           requests:
             memory: "128Mi"
             cpu: "250m"
         env:
              - name: AUTHENTICATION_TYPE
                value: "MANAGED_IDENTITY" # change to ACCESS_KEY to authenticate using access key
              - name: REDIS_HOSTNAME
                value: "your redis hostname"
              - name: REDIS_ACCESSKEY
                value: "your access key" 
              - name: REDIS_PORT
                value: "6380" 
       restartPolicy: Never
    
    
  2. 将此文件另存为 podspec.yaml,然后通过运行以下命令将其应用到 AKS 群集:

    kubectl apply -f podspec.yaml
    

    将收到一个响应,指示 Pod 已创建:

    pod/entrademo-pod created
    
  3. 若要测试应用程序,请运行以下命令以检查 pod 是否正在运行:

    kubectl get pods
    

    你会看到 Pod 成功运行,如下所示:

    NAME                       READY   STATUS      RESTARTS       AGE
    entrademo-pod              0/1     Completed   0              42s
    
  4. 由于本教程是控制台应用,因此需要使用此命令检查 Pod 的日志,以验证是否按预期运行。

    kubectl logs entrademo-app
    

    可查看以下日志,这些日志指示 Pod 使用用户分配的托管标识成功连接到 Redis 实例

    Connecting with managed identity..
    Retrieved value from Redis: Hello, Redis!
    Success! Previous value: Hello, Redis!
    

清理群集

若要清理群集,请运行以下命令:

kubectl delete pod entrademo-pod

清理资源

要继续使用在本文中创建的资源,请保留资源组。

否则,如果已完成资源,可以删除创建的 Azure 资源组以避免产生费用。

重要

删除资源组的操作不可逆。 删除资源组时,包含在其中的所有资源会被永久删除。 请确保不会意外删除错误的资源组或资源。 如果在现有资源组(其中包含要保留的资源)内创建了此资源,可以逐个删除这些资源,而不是删除资源组。

删除资源组的步骤

  1. 登录到 Azure 门户,然后选择“资源组”。

  2. 选择要删除的资源组。

    如果有多个资源组,请使用“筛选任何字段...”框,键入为本文创建的资源组的名称。 在结果列表中选择资源组。

    在工作窗格中显示要删除的资源组列表的屏幕截图。

  3. 选择“删除资源组”。

  4. 系统会要求确认是否删除资源组。 键入资源组的名称进行确认,然后选择“删除”。

    显示需要资源名称才能确认删除的表单的屏幕截图。

片刻之后,将会删除该资源组及其所有资源。