快速入门:使用适用于 Azure Kubernetes 服务(AKS)或 Arc 启用的 Kubernetes 的 Dapr 扩展来部署应用程序

在本快速入门中,将在已启用 AKS 或 Arc 的 Kubernetes 群集中使用 Dapr 扩展 。 你将部署一个hello world示例,它由一个生成消息的 Python 应用程序和一个使用和持久化消息的 Node.js 应用程序组成。

先决条件

克隆存储库

  1. 使用命令克隆 git clone

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

    cd dapr-aks-extension-quickstart
    

创建和配置 Redis 存储

打开Azure 门户以开始 Azure 托管 Redis 的创建流程。

  1. 根据《创建 Azure 托管 Redis 实例》快速入门填写建议信息。

  2. 选择“创建”以启动 Redis 实例部署。

验证资源信息

  1. 部署 Redis 资源后,导航到其概述页。

  2. 记下以下内容:

    • 主机名,位于资源概述页的 “概要” 部分。 主机名格式类似于:<your-cache-name>.<region>.redis.chinacloudapi.cn
    • SSL 端口,位于“设置高级设置”>中。 默认值为 10000
  3. 在终端中,在默认数据库上启用访问密钥身份验证。

    az redisenterprise database update \
        --cluster-name <REDIS_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --access-keys-auth Enabled
    
  4. 检索默认数据库的主键并将其保存到环境变量。

    export REDIS_PRIMARY_KEY=$(az redisenterprise database list-keys \
        --cluster-name <REDIS_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --query primaryKey \
        -o tsv)
    

启用公用网络访问

对于此方案,Azure托管 Redis 实例使用公用网络访问。 完成本快速入门后,请务必 清理资源

  1. 在资源菜单的“设置”下,选择“网络”。

  2. 公用网络访问权限 设置为 “已启用”。

配置 Dapr 组件

redis.yaml 文件中,将组件配置为通过 TLS 使用访问密钥身份验证。

- name: redisPassword
    secretKeyRef:
        name: redis-secret
        key: redisPassword
- name: useEntraID
    value: "false"
- name: enableTLS
  value: true
  1. 在首选代码编辑器中,导航到示例存储库中的 部署 目录并打开 redis.yaml

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

    - name: redisHost
      value: <your-cache-name>.<region>.redis.chinacloudapi.cn:10000
    
  3. 创建 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 应用

  1. 转到 deploy 目录并打开 workload-identity.yaml

  2. <MANAGED_IDENTITY_CLIENT_ID> 替换为你创建的用户分配的托管标识的客户端 ID。

  3. 在部署应用清单之前,先应用服务账户清单。

    kubectl apply -f ./deploy/workload-identity.yaml
    

node.yaml 中,Pod 规范使用工作负荷标识标签和共享 workload-sa 服务帐户:

labels:
  app: node
  azure.workload.identity/use: "true"

应用配置

  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,并将其设置为环境变量。

    export EXTERNAL_IP=<EXTERNAL-IP>
    

验证 Node.js 服务

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

    curl $EXTERNAL_IP/ports
    

    示例输出

    {"DAPR_HTTP_ENDPOINT":"http://localhost:3500","DAPR_GRPC_ENDPOINT":"http://localhost: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 规范使用工作负荷标识标签和共享 workload-sa 服务帐户:

labels:
    app: python
    azure.workload.identity/use: "true"

应用配置

  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 <your-resource-group>

后续步骤