您可以使用事件总线EventBridge为Knative提供生产级别的事件驱动能力。您可以在EventBridge中配置事件总线、事件规则和事件目标,经过事件的过滤、转换后,触发EventBridge的事件产生,继而触发Knative服务或函数的执行,实现资源的按需使用。
前提条件
已为Knative部署Eventing和Kafka组件,请参见管理Knative组件。
已安装ossutil。具体操作,请参见安装ossutil。
事件总线EventBridge是阿里云提供的一款无服务器事件总线服务,支持阿里云服务、自定义应用、SaaS应用以标准化、中心化的方式接入,并能够以标准化的CloudEvents 1.0协议在这些应用之间路由事件,帮助您轻松构建松耦合、分布式的事件驱动架构。
功能介绍
当前EventBridge支持多种数据源接入,通过配置事件总线、事件规则、事件目标,经过事件过滤、转换,可以触发EventBridge事件驱动Knative服务消费事件,实现资源的按需使用。技术架构图如下所示。
对象存储OSS支持作为事件源接入到EventBridge。关于对象存储OSS作为事件源发布到事件总线EventBridge的事件类型,请参见对象存储OSS事件。
步骤一:创建Knative服务
本文以event-display作为Knative服务,该服务会直接记录接收到的事件内容。
参见下方示例保存event-display.yaml并部署到集群中,创建一个Knative Service。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display namespace: default spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/event-display:20230207194118_3874dbd
kubectl apply -f event-display.yaml
执行以下命令,查看Knative Service是否创建成功。
kubectl get ksvc
预期输出:
NAME URL LATESTCREATED LATESTREADY READY REASON event-display http://event-display.default.example.com event-display-00001 event-display-00001 True
获取Knative服务访问域名和访问网关地址。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Knative页面,单击服务管理页签,获取Knative服务的默认域名和访问网关地址,供后续步骤使用。
步骤二:创建连接配置和API端点
- 登录事件总线EventBridge控制台,在左侧导航栏,选择 。
在顶部菜单栏,选择地域。
单击连接配置页签,单击创建,在创建连接配置面板,输入连接名称、连接描述,设置鉴权配置为无需配置,网络选择为公网,单击确定。
单击API 端点页签,单击创建,在基础信息区域,将创建方式设置为自定义创建,输入API 目标名称和描述。
在API配置区域,设置URL为步骤3获取的访问网关地址(例如http://8.141.XX.XX),HTTP Method为POST。
说明如果网关为ALB网关,则需要将URL设置为ALB的DNS域名。
在连接配置区域,单击选择已有,选择连接配置名称,然后单击确定。
步骤三:创建事件规则
- 登录事件总线EventBridge控制台,在左侧导航栏,单击事件总线。
在右侧页面,单击default事件操作列下的事件规则,然后在事件规则页面,单击创建规则。
在配置基本信息配置向导,输入规则名称和描述,单击下一步。
在配置事件模式配置向导,设置事件源为acs.oss,事件类型为oss:ObjectCreated:PutObject,单击下一步。
在配置事件目标配置向导,设置配置项,然后单击创建。
配置项
描述
服务类型
选择API触发。
创建方式
选择使用已有,选择步骤二创建的API端点名称。
HTTP 参数
设置事件推送给Knative服务时传递的参数及参数内容。
步骤四:验证通过EventBridge触发Knative服务消费事件是否成功
在执行以下操作前,请确认您已安装ossutil。
执行以下命令,上传文件到OSS。
说明OSS Bucket需要与Eventbridge处于同一个地域。
ossutil cp <文件名称> oss://<Bucket名称>
上传文件到OSS后,EventBridge将触发Knative服务消费事件。
查看事件轨迹。
- 登录事件总线EventBridge控制台,在左侧导航栏,单击事件总线。
在右侧页面单击default事件操作列下的事件追踪,然后在按时间范围查询页签,设置时间范围为最近1小时,单击查询。
选择事件源为对象存储OSS,事件类型为上传文件的事件,单击该事件操作列的事件轨迹。
在事件轨迹页面,可以查看事件投递是否成功。
验证Knative服务是否消费事件成功。
执行以下命令,查看Knative服务是否成功消费事件。
kubectl get pod
预期输出:
NAME READY STATUS RESTARTS AGE event-display-00001-deployment-56cc79****-z2vhv 2/2 Running 0 7s
执行以下命令,查看Knative服务是否记录事件。
kubectl logs event-display-00001-deployment-56cc79****-z2vhv user-container
预期输出:
Defaulted container "user-container" out of: user-container, queue-proxy { "data":{"eventVersion":"1.0","responseElements":{"requestId":"6524C9F5F326DB333575119B"},"eventSource":"acs:oss","eventTime":"2023-10-10T03:50:13.000Z","requestParameters":{"sourceIPAddress":"101.132.XX.XX"},"eventName":"ObjectCreated:PutObject","userIdentity":{"principalId":"203097492760048007"},"region":"cn-beijing","oss":{"bucket":{"name":"ossutil-demo-liu","arn":"acs:oss:cn-beijing:1159648454668874:ossutil-demo-liu","virtualBucket":"","ownerIdentity":"1159648454668874"},"ossSchemaVersion":"1.0","object":{"size":603050,"objectMeta":{"mimeType":"text/markdown; charset=utf-8"},"deltaSize":0,"eTag":"3298F4DC29D2A0578088FF5810C210B3","key":"RELEASENOTES.md"}}}
以上预期输出表明,Knative服务消费事件成功,并且记录了上传文件到OSS的事件,即通过EventBridge触发Knative服务消费事件成功。
相关文档
关于如何结合其他事件源实现事件驱动,请参见在Knative中使用GitHub事件源。