你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Kubernetes 上的 Azure 事件网格将云事件路由到 Webhook
在此快速入门中,你将在 Kubernetes 上的事件网格中创建一个主题,为该主题创建订阅,然后将示例事件发送到该主题以测试方案。
重要
Azure Arc 的 Kubernetes 上的事件网格目前为公共预览版。 此预览版在提供时没有附带服务级别协议,不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款。
先决条件
- 将 Kubernetes 群集连接到 Azure Arc。
- 在 Kubernetes 群集上安装事件网格扩展。 此扩展将事件网格部署到 Kubernetes 群集。
创建自定义位置
作为 Azure 位置扩展,自定义位置允许将已启用 Azure Arc 的 Kubernetes 群集用作部署事件网格主题等资源的目标位置。 自定义位置表示群集中的命名空间,是主题和事件订阅的部署位置。 在本节中,你将创建一个自定义位置。
声明以下变量,用于保存 Azure Arc 群集名称、资源组名称和自定义位置名称的值。 将这些语句复制到编辑器,替换这些值,然后将其复制/粘贴到 Bash 窗口。
resourcegroupname="<AZURE RESOURCE GROUP NAME>" arcclustername="<AZURE ARC CLUSTER NAME>" customlocationname="<CUSTOM LOCATION NAME>"
获取 Azure Arc 连接群集的资源 ID。 运行该命令之前,请更新 Azure Arc 群集名称和资源组参数的值。
hostresourceid=$(az connectedk8s show -n $arcclustername -g $resourcegroupname --query id -o tsv)
获取事件网格扩展的资源 ID。 此步骤假定为事件网格扩展提供的名称为 eventgrid-ext。运行该命令之前,请更新 Azure Arc 群集和资源组名称。
clusterextensionid=$(az k8s-extension show --name eventgrid-ext --cluster-type connectedClusters -c $arcclustername -g $resourcegroupname --query id -o tsv)
使用上一步中的两个值创建自定义位置。 运行该命令之前,请更新自定义位置和资源组名称。
az customlocation create -n $customlocationname -g $resourcegroupname --namespace arc --host-resource-id $hostresourceid --cluster-extension-ids $clusterextensionid
获取自定义位置的资源 ID。 运行该命令之前,请更新自定义位置名称。
customlocationid=$(az customlocation show -n $customlocationname -g $resourcegroupname --query id -o tsv)
若要详细了解如何创建自定义位置,请参阅在已启用 Azure Arc 的 Kubernetes 上创建和管理自定义位置。
创建主题
在本节中,你将在上一步创建的自定义位置中创建一个主题。 运行该命令之前,请更新资源组和事件网格主题的名称。 如果你使用的是美国东部以外的位置,则请更新位置。
声明一个变量,用于保存主题名称。
topicname="<TOPIC NAME>"
运行以下命令来创建一个主题。
az eventgrid topic create -g $resourcegroupname --name $topicname --kind azurearc --extended-location-name $customlocationid --extended-location-type customlocation --input-schema CloudEventSchemaV1_0 --location $region
有关 CLI 命令的详细信息,请参阅
az eventgrid topic create
。
创建消息终结点
在为自定义主题创建订阅之前,请先创建事件消息的终结点。 通常情况下,终结点基于事件数据执行操作。 为了简化此快速入门,将部署用于显示事件消息的预生成 Web 应用。 所部署的解决方案包括应用服务计划、应用服务 Web 应用和 GitHub 中的源代码。
在项目页中,选择“部署到 Azure”以将解决方案部署到订阅。 在 Azure 门户中,为参数提供值。
部署可能需要几分钟才能完成。 部署成功后,请查看 Web 应用以确保它正在运行。 在 Web 浏览器中导航到
https://<your-site-name>.azurewebsites.net
如果部署失败,请查看错误消息。 这是因为网站名称已被占用。 再次部署模板,然后为网站选择其他名称。
查看站点,但是尚未有事件发布到它。
创建订阅
订阅服务器可以注册发布到主题的事件。 若要接收任何事件,需要为感兴趣的主题创建事件网格订阅。 事件订阅定义将这些事件发送到的目标。 若要了解支持的所有目标或处理程序,请参阅事件处理程序。
若要使用 WebHook(HTTPS 终结点)目标创建事件订阅,请输入事件订阅名称,更新网站名称,并运行以下命令。
topicid=$(az eventgrid topic show --name $topicname --resource-group $resourcegroupname --query id -o tsv)
az eventgrid event-subscription create --name <EVENT SUBSCRIPTION NAME> --source-resource-id $topicid --endpoint https://<SITE NAME>.azurewebsites.net/api/updates
有关 CLI 命令的详细信息,请参阅 az eventgrid event-subscription create
。
将事件发送到主题
运行以下命令以获取主题的终结点:复制并粘贴该命令后,更新主题名称和资源组名称,然后运行该命令。 你会将示例事件发布到此主题终结点。
az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv
运行以下命令以获取自定义主题的密钥:复制并粘贴该命令后,更新主题名称和资源组名称,然后运行该命令。 它是主题的主密钥。 要从 Azure 门户获取此密钥,请切换到“事件网格主题”页的“访问密钥”选项卡 。 要将事件发布到自定义主题,需要访问密钥。
az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv
运行以下 Curl 命令以发布事件。 在运行命令之前,请从步骤 1 和 2 中指定终结点 URL 和密钥。
curl -k -X POST -H "Content-Type: application/cloudevents-batch+json" -H "aeg-sas-key: <KEY_FROM_STEP_2>" -g <ENDPOINT_URL_FROM_STEP_1> \ -d '[{ "specversion": "1.0", "type" : "orderCreated", "source": "myCompanyName/us/webCommerceChannel/myOnlineCommerceSiteBrandName", "id" : "eventId-n", "time" : "2020-12-25T20:54:07+00:00", "subject" : "account/acct-123224/order/o-123456", "dataSchema" : "1.0", "data" : { "orderId" : "123", "orderType" : "PO", "reference" : "https://www.myCompanyName.com/orders/123" } }]'
如果步骤 1 中的主题终结点 URL 是专用 IP 地址,例如当事件网格中转站的服务类型为 ClusterIP 时,可以从群集中的另一个 Pod 中执行“Curl” 以访问该 IP 地址。 例如,可以执行以下步骤:
创建具有以下配置的清单文件。 可能需要根据需求调整
dnsPolicy
。 有关详细信息,请参阅服务和 Pod 的 DNS。apiVersion: v1 kind: Pod metadata: name: test-pod2 spec: containers: - name: nginx image: nginx hostNetwork: true dnsPolicy: ClusterFirstWithHostNet
删除 Pod。
kubectl apply -f <name_of_your_yaml_manifest_file>
验证 Pod 是否正在运行。
kubectl get pod test-pod
从容器启动 shell 会话
kubectl exec --stdin --tty test-pod -- /bin/bash
此时,群集中正在运行的容器中有一个 shell 会话,可以从中执行上述步骤中所述的 Curl 命令。
在事件网格查看器中验证
现已触发事件,并且事件网格已将消息发送到订阅时配置的终结点。 查看 Web 应用以查看刚刚发送的事件。
后续步骤
请参阅以下文章: