在本快速入门中,将在已启用 AKS 或 Arc 的 Kubernetes 群集中使用 Dapr 扩展 。 你将部署一个hello world示例,它由一个生成消息的 Python 应用程序和一个使用和持久化消息的 Node.js 应用程序组成。
先决条件
- 一份 Azure 订阅。 如果没有,可以创建一个试用帐户。
- 已安装 Azure CLI
- AKS 群集,其中包含:
- 启用了工作负载标识
- 在同一订阅中创建了托管标识
- Kubernetes 服务帐户
- 联合标识凭据
- AKS 群集上安装的 Dapr 扩展
- 本地已安装 kubectl
克隆存储库
-
git clone https://github.com/Azure-Samples/dapr-aks-extension-quickstart.git 切换到
dapr-aks-extension-quickstart目录。cd dapr-aks-extension-quickstart
创建和配置 Redis 存储
打开Azure 门户以开始 Azure 托管 Redis 的创建流程。
根据《创建 Azure 托管 Redis 实例》快速入门填写建议信息。
选择“创建”以启动 Redis 实例部署。
验证资源信息
部署 Redis 资源后,导航到其概述页。
记下以下内容:
- 主机名,位于资源概述页的 “概要” 部分。 主机名格式类似于:
<your-cache-name>.<region>.redis.chinacloudapi.cn。 - SSL 端口,位于“设置高级设置”>中。 默认值为
10000。
- 主机名,位于资源概述页的 “概要” 部分。 主机名格式类似于:
在终端中,在默认数据库上启用访问密钥身份验证。
az redisenterprise database update \ --cluster-name <REDIS_NAME> \ --resource-group <RESOURCE_GROUP> \ --access-keys-auth Enabled检索默认数据库的主键并将其保存到环境变量。
export REDIS_PRIMARY_KEY=$(az redisenterprise database list-keys \ --cluster-name <REDIS_NAME> \ --resource-group <RESOURCE_GROUP> \ --query primaryKey \ -o tsv)
启用公用网络访问
对于此方案,Azure托管 Redis 实例使用公用网络访问。 完成本快速入门后,请务必 清理资源 。
在资源菜单的“设置”下,选择“网络”。
将 公用网络访问权限 设置为 “已启用”。
配置 Dapr 组件
在 redis.yaml 文件中,将组件配置为通过 TLS 使用访问密钥身份验证。
- name: redisPassword
secretKeyRef:
name: redis-secret
key: redisPassword
- name: useEntraID
value: "false"
- name: enableTLS
value: true
在首选代码编辑器中,导航到示例存储库中的 部署 目录并打开 redis.yaml。
对于
redisHost,请将占位符<REDIS_HOST>:10000值替换为之前从 Azure 门户保存的 Azure Managed Redis 主机名。- name: redisHost value: <your-cache-name>.<region>.redis.chinacloudapi.cn:10000创建
redisPassword使用的 Kubernetes Secret。kubectl create secret generic redis-secret \ --from-literal=redisPassword="$REDIS_PRIMARY_KEY"
应用配置
使用命令应用 kubectl apply 文件。
kubectl apply -f ./deploy/redis.yaml
预期输出
component.dapr.io/statestore created
通过 Dapr 挎斗部署 Node.js 应用
配置 Node.js 应用
转到
deploy目录并打开 workload-identity.yaml。将
<MANAGED_IDENTITY_CLIENT_ID>替换为你创建的用户分配的托管标识的客户端 ID。在部署应用清单之前,先应用服务账户清单。
kubectl apply -f ./deploy/workload-identity.yaml
在 node.yaml 中,Pod 规范使用工作负荷标识标签和共享 workload-sa 服务帐户:
labels:
app: node
azure.workload.identity/use: "true"
应用配置
使用
kubectl apply命令将 Node.js 应用部署应用到群集。kubectl apply -f ./deploy/node.yamlKubernetes 部署异步进行;因此在继续执行后续步骤之前,请使用以下命令验证部署是否已完成:
kubectl rollout status deploy/nodeapp使用
kubectl get svc命令访问服务。kubectl get svc nodeapp记下输出中的
EXTERNAL-IP,并将其设置为环境变量。export EXTERNAL_IP=<EXTERNAL-IP>
验证 Node.js 服务
使用
curl通过EXTERNAL-IP调用服务。curl $EXTERNAL_IP/ports示例输出
{"DAPR_HTTP_ENDPOINT":"http://localhost:3500","DAPR_GRPC_ENDPOINT":"http://localhost: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 规范使用工作负荷标识标签和共享 workload-sa 服务帐户:
labels:
app: python
azure.workload.identity/use: "true"
应用配置
使用
kubectl apply命令将 Python 应用部署到 Kubernetes 群集。kubectl apply -f ./deploy/python.yamlKubernetes 部署异步进行;因此在继续执行后续步骤之前,请使用以下命令验证部署是否已完成:
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 <your-resource-group>