你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:将 Dapr 群集扩展用于 Azure Kubernetes 服务 (AKS) 或已启用 Arc 的 Kubernetes 以部署应用程序
本快速入门介绍了如何在 AKS 或已启用 Arc 的 Kubernetes 群集中使用 Dapr 群集扩展。 你将部署一个 hello world
示例,其中包含一个生成消息的 Python 应用程序和一个使用和保留消息的 Node.js 应用程序。
先决条件
- Azure 订阅。 如果没有 Azure 订阅,可以创建一个免费帐户。
- 已安装 Azure CLI 或 Azure PowerShell。
- AKS 群集,其中:
- 启用了工作负载标识
- 在同一订阅中创建了托管标识
- kubernetes 服务帐户
- 联合标识凭据
- 在 AKS 群集上安装的 Dapr 群集扩展
- 本地安装了 kubectl。
克隆存储库
使用
git clone
命令克隆 Dapr 快速入门存储库。git clone https://github.com/Azure-Samples/dapr-aks-extension-quickstart.git
切换到
dapr-aks-extension-quickstart
目录。
创建和配置 Redis 存储
打开 Azure 门户以启动 Azure Cache for Redis 创建流。
- 根据“创建开放源代码 Redis 缓存”快速入门说明填写建议的信息。
- 选择“创建”以启动 Redis 实例部署。
验证资源信息
- 部署 Redis 资源后,导航到其概述页。
- 记下以下内容:
- 主机名,位于缓存概述页的“概要”部分中。 主机名格式外观类似于:
xxxxxx.redis.cache.windows.net
。 - SSL 端口,位于缓存的“高级设置”边栏选项卡中。 默认值为
6380
。
- 主机名,位于缓存概述页的“概要”部分中。 主机名格式外观类似于:
- 导航到“身份验证”边栏选项卡,并验证是否已在资源上启用 Microsoft Entra 身份验证。
添加托管标识
在“身份验证”边栏选项卡中,在“启用 Microsoft Entra 身份验证”复选框下字段中键入“作为先决条件创建的托管标识”的名称。
验证是否已将托管标识添加为 Redis 用户分配的数据所有者访问策略权限。
启用公用网络访问
对于此方案,Redis 缓存将使用公用网络访问。 完成本快速入门后,请务必清理资源。
- 导航到“专用终结点”边栏选项卡。
- 单击顶部菜单中的“启用公用网络访问”。
配置 Dapr 组件
在 redis.yaml
中,该组件配置为通过为 AKS 群集启用的工作负载标识使用 Entra ID 身份验证。 无需访问密钥。
- name: useEntraID
value: "true"
- name: enableTLS
value: true
在首选的代码编辑器中,导航到示例中的
deploy
目录并打开redis.yaml
。对于
redisHost
,请将占位符<REDIS_HOST>:<REDIS_PORT>
值替换为 Redis 缓存主机名和之前从 Azure 门户保存的 SSL 端口。- name: redisHost value: <your-cache-name>.redis.cache.windows.net:6380
应用配置
使用
kubectl apply
命令应用redis.yaml
文件。kubectl apply -f ./deploy/redis.yaml
使用
kubectl get components.redis
命令验证是否已成功配置状态存储。kubectl get components.redis -o yaml
预期输出
component.dapr.io/statestore created
通过 Dapr 挎斗部署 Node.js 应用
配置 Node.js 应用
在 node.yaml
中,Pod 规范已添加用于使用工作负载标识的标签:
labels:
app: node
azure.workload.identity/use: "true"
导航到
deploy
目录并打开node.yaml
。将
serviceAccountName
的占位符<SERVICE_ACCOUNT_NAME>
值替换为你创建的服务帐户名称。- 此值应与用于创建联合标识凭据的服务帐户相同。
应用配置
使用
kubectl apply
命令将 Node.js 应用部署应用到群集。kubectl apply -f ./deploy/node.yaml
Kubernetes 部署是异步进行的,因此在继续执行后续步骤之前,请使用以下命令验证部署是否已完成:
kubectl rollout status deploy/nodeapp
使用
kubectl get svc
命令访问服务。kubectl get svc nodeapp
记下输出中的
EXTERNAL-IP
。
验证 Node.js 服务
使用
curl
通过EXTERNAL-IP
调用服务。curl $EXTERNAL_IP/ports
示例输出
{"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
向应用程序提交订单。
curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
确认订单。
curl $EXTERNAL_IP/order
预期输出
{ "orderId": "42" }
通过 Dapr 挎斗部署 Python 应用
配置 Python 应用
在 python.yaml
中,Pod 规范已添加用于使用工作负载标识的标签:
labels:
app: node
azure.workload.identity/use: "true"
导航到
deploy
目录并打开python.yaml
。将
serviceAccountName
的占位符<SERVICE_ACCOUNT_NAME>
值替换为你创建的服务帐户名称。- 此值应与用于创建联合标识凭据的服务帐户相同。
应用配置
使用
kubectl apply
命令将 Python 应用部署到 Kubernetes 群集。kubectl apply -f ./deploy/python.yaml
Kubernetes 部署是异步进行的,因此在继续执行后续步骤之前,请使用以下命令验证部署是否已完成:
kubectl rollout status deploy/pythonapp
观察消息并确认持久化
现在,部署 Node.js 和 Python 应用程序后,可以观察消息的传入情况。
使用
kubectl logs
命令获取 Node.js 应用的日志。kubectl logs --selector=app=node -c node --tail=-1
预期输出
Got a new order! Order ID: 1 Successfully persisted state Got a new order! Order ID: 2 Successfully persisted state Got a new order! Order ID: 3 Successfully persisted state
使用
curl
调用 Node.js 应用的订单终结点以获取最新订单。curl $EXTERNAL_IP/order
响应中应会显示最新的 JSON 输出。
清理资源
如果不再计划使用此快速入门中的资源,可以通过移除资源组来删除所有关联的资源。
使用 az group delete 命令移除资源组、群集、命名空间和所有相关资源。
az group delete --name MyResourceGroup