在本快速入门中,将在 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>.chinacloudsites.cn如果部署失败,请检查错误消息。 这可能是因为网站名称已被占用。 再次部署模板,并为站点选择其他名称。
你可以看到该网站,但尚未向该网站发布任何活动。
创建订阅
订阅者可以订阅发布到主题的事件。 若要接收任何事件,需要为感兴趣的主题创建事件网格订阅。 事件订阅定义这些事件发送到的目标。 若要了解支持的所有目标或处理程序,请参阅 事件处理程序。
若要使用 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>.chinacloudsites.cn/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 应用以查看刚刚发送的事件。
后续步骤
请参阅以下文章: