你当前正在访问 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 应用程序。

先决条件

克隆存储库

  1. 使用 git clone 命令克隆 Dapr 快速入门存储库

    git clone https://github.com/Azure-Samples/dapr-aks-extension-quickstart.git
    
  2. 切换到 dapr-aks-extension-quickstart 目录。

创建和配置 Redis 存储

打开 Azure 门户以启动 Azure Cache for Redis 创建流。

  1. 根据“创建开放源代码 Redis 缓存”快速入门说明填写建议的信息。
  2. 选择“创建”以启动 Redis 实例部署。

验证资源信息

  1. 部署 Redis 资源后,导航到其概述页。
  2. 记下以下内容:
    • 主机名,位于缓存概述页的“概要”部分中。 主机名格式外观类似于:xxxxxx.redis.cache.windows.net
    • SSL 端口,位于缓存的“高级设置”边栏选项卡中。 默认值为 6380
  3. 导航到“身份验证”边栏选项卡,并验证是否已在资源上启用 Microsoft Entra 身份验证

添加托管标识

  1. 在“身份验证”边栏选项卡中,在“启用 Microsoft Entra 身份验证”复选框下字段中键入“作为先决条件创建的托管标识”的名称。

    屏幕截图显示了可在其中选择要添加为 Redis 用户的托管标识的字段。

  2. 验证是否已将托管标识添加为 Redis 用户分配的数据所有者访问策略权限。

启用公用网络访问

对于此方案,Redis 缓存将使用公用网络访问。 完成本快速入门后,请务必清理资源

  1. 导航到“专用终结点”边栏选项卡。
  2. 单击顶部菜单中的“启用公用网络访问”。

配置 Dapr 组件

redis.yaml 中,该组件配置为通过为 AKS 群集启用的工作负载标识使用 Entra ID 身份验证。 无需访问密钥。

- name: useEntraID
  value: "true"
- name: enableTLS
  value: true
  1. 在首选的代码编辑器中,导航到示例中的 deploy 目录并打开 redis.yaml

  2. 对于 redisHost,请将占位符 <REDIS_HOST>:<REDIS_PORT> 值替换为 Redis 缓存主机名和之前从 Azure 门户保存的 SSL 端口。

    - name: redisHost
    value: <your-cache-name>.redis.cache.windows.net:6380
    

应用配置

  1. 使用 kubectl apply 命令应用 redis.yaml 文件。

    kubectl apply -f ./deploy/redis.yaml
    
  2. 使用 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"
  1. 导航到 deploy 目录并打开 node.yaml

  2. serviceAccountName 的占位符 <SERVICE_ACCOUNT_NAME> 值替换为你创建的服务帐户名称

    • 此值应与用于创建联合标识凭据的服务帐户相同。

应用配置

  1. 使用 kubectl apply 命令将 Node.js 应用部署应用到群集。

    kubectl apply -f ./deploy/node.yaml
    
  2. Kubernetes 部署是异步进行的,因此在继续执行后续步骤之前,请使用以下命令验证部署是否已完成:

    kubectl rollout status deploy/nodeapp
    
  3. 使用 kubectl get svc 命令访问服务。

    kubectl get svc nodeapp
    
  4. 记下输出中的 EXTERNAL-IP

验证 Node.js 服务

  1. 使用 curl 通过 EXTERNAL-IP 调用服务。

    curl $EXTERNAL_IP/ports
    

    示例输出

    {"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
    
  2. 向应用程序提交订单。

    curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
    
  3. 确认订单。

    curl $EXTERNAL_IP/order
    

    预期输出

    { "orderId": "42" }
    

通过 Dapr 挎斗部署 Python 应用

配置 Python 应用

python.yaml 中,Pod 规范已添加用于使用工作负载标识的标签

labels:
  app: node
  azure.workload.identity/use: "true"
  1. 导航到 deploy 目录并打开 python.yaml

  2. serviceAccountName 的占位符 <SERVICE_ACCOUNT_NAME> 值替换为你创建的服务帐户名称

    • 此值应与用于创建联合标识凭据的服务帐户相同。

应用配置

  1. 使用 kubectl apply 命令将 Python 应用部署到 Kubernetes 群集。

    kubectl apply -f ./deploy/python.yaml
    
  2. Kubernetes 部署是异步进行的,因此在继续执行后续步骤之前,请使用以下命令验证部署是否已完成:

    kubectl rollout status deploy/pythonapp
    

观察消息并确认持久化

现在,部署 Node.js 和 Python 应用程序后,可以观察消息的传入情况。

  1. 使用 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
    
  2. 使用 curl 调用 Node.js 应用的订单终结点以获取最新订单。

    curl $EXTERNAL_IP/order
    

    响应中应会显示最新的 JSON 输出。

清理资源

如果不再计划使用此快速入门中的资源,可以通过移除资源组来删除所有关联的资源。

使用 az group delete 命令移除资源组、群集、命名空间和所有相关资源。

az group delete --name MyResourceGroup

后续步骤