教程:从托管在 Azure Kubernetes 服务上的应用程序连接到 Azure Cache for Redis
在本教程中,将使用此示例与 Azure Cache for Redis 实例连接。
- Azure 订阅。 如果没有 Azure 订阅,请创建一个试用帐户。
- Azure Kubernetes 服务群集 - 有关创建群集的详细信息,请参阅快速入门:使用 Azure 门户部署 Azure Kubernetes 服务 (AKS) 群集。
- 要用于连接到 Azure Cache for Redis 实例的用户分配的托管标识。
重要
本教程假定你熟悉基本的 Kubernetes 概念,如容器、Pod 和服务等。
使用 Azure 门户或首选 CLI 工具创建新的 Azure Cache for Redis 实例。 使用快速入门指南来开始使用。
对于本教程,请使用标准 C1 缓存。
按照步骤创建缓存。
创建 Redis 缓存实例后,导航到“身份验证”选项卡。选择要用于连接到 Redis 缓存实例的用户分配的托管标识,然后选择“保存”。
或者,可以导航到“资源”菜单上的“数据访问配置”,以使用用户分配的托管标识创建新的 Redis 用户,以连接到缓存。
记下门户中 Redis 用户的用户名。 将此用户名用于 AKS 工作负荷。
若要在本地运行此示例,请在 Redis 实例上将用户主体配置为 Redis 用户。 此代码示例通过 DefaultAzureCredential 使用用户主体连接到 Redis 实例。
执行以下步骤为 AKS 群集配置工作负荷标识。
然后完成以下步骤:
- 启用 OIDC 颁发者和工作负荷标识
- 如果已创建托管标识,请跳过创建用户分配的托管标识的步骤。 如果创建新的托管标识,请确保为托管标识创建新的 Redis 用户,并分配适当的数据访问权限。
- 创建使用用户分配的托管标识的客户端 ID 批注的 Kubernetes 服务帐户
- 为 AKS 群集创建联合标识凭据。
接下来,设置 AKS 工作负荷,以便在配置 AKS 群集后连接到 Azure Cache for Redis。
下载示例应用的代码。
使用 az acr build 命令生成 docker 映像并将其推送到 Azure 容器注册表。
az acr build --image sample/connect-from-aks-sample:1.0 --registry yourcontainerregistry --file Dockerfile .
使用以下命令将容器注册表附加到 AKS 群集:
az aks update --name clustername --resource-group mygroup --attach-acr youracrname
在本部分中,首先安装 Kubernetes CLI,然后连接到 AKS 群集。
使用 Kubernetes CLI kubectl 从本地计算机连接到 Kubernetes 群集。 如果在本地运行,则可以使用以下命令安装 kubectl。
az aks install-cli
使用门户复制 AKS 群集的资源组和群集名称。 若要配置 kubectl 以连接到 AKS 群集,请将以下命令用于资源组和群集名称:
az aks get-credentials --resource-group myResourceGroup --name myClusterName
运行以下命令,验证是否能够连接到群集:
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
以下代码介绍了用于运行工作负荷的 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
将此文件另存为 podspec.yaml,然后通过运行以下命令将其应用到 AKS 群集:
kubectl apply -f podspec.yaml
将收到一个响应,指示 Pod 已创建:
pod/entrademo-pod created
若要测试应用程序,请运行以下命令以检查 pod 是否正在运行:
kubectl get pods
你会看到 Pod 成功运行,如下所示:
NAME READY STATUS RESTARTS AGE entrademo-pod 0/1 Completed 0 42s
由于本教程是控制台应用,因此需要使用此命令检查 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 资源组以避免产生费用。
重要
删除资源组的操作不可逆。 删除资源组时,包含在其中的所有资源会被永久删除。 请确保不会意外删除错误的资源组或资源。 如果在现有资源组(其中包含要保留的资源)内创建了此资源,可以逐个删除这些资源,而不是删除资源组。
登录到 Azure 门户,然后选择“资源组”。
选择要删除的资源组。
如果有多个资源组,请使用“筛选任何字段...”框,键入为本文创建的资源组的名称。 在结果列表中选择资源组。
选择“删除资源组”。
系统会要求确认是否删除资源组。 键入资源组的名称进行确认,然后选择“删除”。
片刻之后,将会删除该资源组及其所有资源。