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初始化时,事件网格绑定会创建一个 事件订阅。 您的服务主要需要获得权限才能启用此功能。
# 首先确保 Azure Resource Manager 提供商已注册事件网格
az provider show --namespace Microsoft.EventGrid --query "registrationState"
# 给予SP 所需的权限,以便它可以创建事件订阅到事件网格
az role assignment create --assignee <clientId> --role "EventGrid EventSubscription Contributor" --scopes <scope>
请务必在事件网格绑定组件中同时添加引号 [HandshakePort]
,因为 Kubernetes 需要配置的字符串值。
- 在本地使用自定义端口
9000
进行握手
# 使用随机端口 9000 作为示例
ngrok http -host-header=localhost 9000
- 配置 ngrok 的 HTTPS 端点和自定义端口来输入绑定元数据
- 运行 Dapr
Azure 事件网格需要一个有效的 HTTPS 端点用于自定义 webhooks. 自签名证书是不行的。 自签名证书是不行的。 为了使流量从公共互联网到你的应用程序的 Dapr sidecar,你需要一个启用了 Dapr 的 ingress 控制器。 有一篇关于这个主题的好文章:。
controller:
podAnnotations:
dapr.io/enabled: "true"
dapr.io/app-id: "nginx-ingress"
dapr.io/app-port: "80"
然后使用 Helm 3 安装 NGINX ingress controller 到您的 Kubernetes 集群使用
helm repo add stable https://kubernetes-charts.storage.googleapis.com/
helm install nginx stable/nginx-ingress -f ./dapr-annotations.yaml -n default
# 获取 ingress controller 的公开IP
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
# 部署 Dapr 组件
kubectl apply -f eventgrid.yaml
# 部署你的应用程序和 Nginx ingress
解决与 Nginx 控制器相关的可能的问题
在 Dapr 中初始部署后,Nginx cointroller 可能发生故障。 检查日志并修复问题 (如果存在的话) 可以遵循这些步骤。
$ kubectl get pods -l app=nginx-ingress
NAME READY STATUS RESTARTS AGE
nginx-nginx-ingress-controller-649df94867-fp6mg 2/2 Running 0 51m
nginx-nginx-ingress-default-backend-6d96c457f6-4nbj5 1/1 Running 0 55m
$ kubectl logs nginx-nginx-ingress-controller-649df94867-fp6mg nginx-ingress-controller
# If you see 503s logged from calls to webhook endpoint '/api/events' restart the pod
# .."OPTIONS /api/events HTTP/1.1" 503..
$ kubectl delete pod nginx-nginx-ingress-controller-649df94867-fp6mg
# Check the logs again - it should start returning 200