Azure Event Grid 绑定规范

要设置 Azure 事件网格(Event Grid)绑定,请创建一个类型为 的组件。 See this guide on how to create and apply a binding configuration.

请参阅了解 Azure Event Grid 文档。

Warning

以上示例将密钥明文存储, It is recommended to use a secret store for the secrets as described .

Scope 是事件订阅需要创建或更新的资源的标识符。 Scope 可以是订阅组,也可以是资源组。 或属于资源提供者命名空间或事件网格主题的顶级资源。 例如:

  • '/subscriptions/{subscriptionId}/' 单个订阅
  • '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' 资源组
  • '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}' 资源
  • '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventGrid/topics/{topicName}' 事件网格主题 > 在大括号 {} 中的内容应该替换为实际值.

字段名为 ttlInSeconds

  • create

在Dapr初始化时,事件网格绑定会创建一个 事件订阅。 您的服务主要需要获得权限才能启用此功能。

  1. # 首先确保 Azure Resource Manager 提供商已注册事件网格
  2. az provider show --namespace Microsoft.EventGrid --query "registrationState"
  3. # 给予SP 所需的权限,以便它可以创建事件订阅到事件网格
  4. az role assignment create --assignee <clientId> --role "EventGrid EventSubscription Contributor" --scopes <scope>

请务必在事件网格绑定组件中同时添加引号 [HandshakePort] ,因为 Kubernetes 需要配置的字符串值。

  • 在本地使用自定义端口 9000 进行握手
  1. # 使用随机端口 9000 作为示例
  2. ngrok http -host-header=localhost 9000
  • 配置 ngrok 的 HTTPS 端点和自定义端口来输入绑定元数据
  • 运行 Dapr

Azure 事件网格需要一个有效的 HTTPS 端点用于自定义 webhooks. 自签名证书是不行的。 自签名证书是不行的。 为了使流量从公共互联网到你的应用程序的 Dapr sidecar,你需要一个启用了 Dapr 的 ingress 控制器。 有一篇关于这个主题的好文章:。

  1. controller:
  2. podAnnotations:
  3. dapr.io/enabled: "true"
  4. dapr.io/app-id: "nginx-ingress"
  5. dapr.io/app-port: "80"

然后使用 Helm 3 安装 NGINX ingress controller 到您的 Kubernetes 集群使用

  1. helm repo add stable https://kubernetes-charts.storage.googleapis.com/
  2. helm install nginx stable/nginx-ingress -f ./dapr-annotations.yaml -n default
  3. # 获取 ingress controller 的公开IP
  4. kubectl get svc -l component=controller -o jsonpath='Public IP is: {.items[0].status.loadBalancer.ingress[0].ip}{"\n"}'

如果部署到 Azure Kubernetes 服务, 你可以跟随 官方的 MS 文档进行其余步骤

  • 添加一条记录到你的 DNS 区域
  • 安装证书管理器
  • 创建 CA 集群发行者(issuer)

开启事件网格与 Dapr 之间通信的最后一步是定义 http 和自定义端口到您应用的服务和一个 Kubernetes 中的 。 这个示例使用 .NET Core Web api 和 Dapr 默认端口和用于握手的自定义端口 9000 。

部署绑定和应用 (包括ingress) 到 Kubernetes

  1. # 部署 Dapr 组件
  2. kubectl apply -f eventgrid.yaml
  3. # 部署你的应用程序和 Nginx ingress

解决与 Nginx 控制器相关的可能的问题

在 Dapr 中初始部署后,Nginx cointroller 可能发生故障。 检查日志并修复问题 (如果存在的话) 可以遵循这些步骤。

  1. $ kubectl get pods -l app=nginx-ingress
  2. NAME READY STATUS RESTARTS AGE
  3. nginx-nginx-ingress-controller-649df94867-fp6mg 2/2 Running 0 51m
  4. nginx-nginx-ingress-default-backend-6d96c457f6-4nbj5 1/1 Running 0 55m
  5. $ kubectl logs nginx-nginx-ingress-controller-649df94867-fp6mg nginx-ingress-controller
  6. # If you see 503s logged from calls to webhook endpoint '/api/events' restart the pod
  7. # .."OPTIONS /api/events HTTP/1.1" 503..
  8. $ kubectl delete pod nginx-nginx-ingress-controller-649df94867-fp6mg
  9. # Check the logs again - it should start returning 200