Knative Eventing提供了一个完整的事件模型,方便接入各个外部系统的事件。您可以通过在ACK集群中部署Knative Eventing组件并创建触发器,以启用事件驱动能力。事件接入后将通过CloudEvent标准在系统内部流转。本文介绍如何使用事件总线EventBridge为Knative提供生产级别的事件驱动能力。
前提条件
已确保Knative Serving版本为1.12.7及以上。
事件总线EventBridge是阿里云提供的一款无服务器事件总线服务,支持阿里云服务、自定义应用、SaaS应用以标准化、中心化的方式接入,并能够以标准化的CloudEvents 1.0协议在这些应用之间路由事件,帮助您轻松构建松耦合、分布式的事件驱动架构。
功能介绍
当前EventBridge支持多种数据源接入,通过配置事件总线、事件规则、事件目标,经过事件过滤、转换,可以触发EventBridge事件驱动Knative服务消费事件,实现资源的按需使用。技术架构图如下所示。
对象存储OSS支持作为事件源接入到EventBridge。关于对象存储OSS作为事件源发布到事件总线EventBridge的事件类型,请参见对象存储OSS事件。
步骤一:部署Eventing和EventBridge组件
Knative提供EventBridge事件驱动能力,支持接入阿里云官方事件源以及事件转发。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页签下,部署Eventing和EventBridge组件。
在组件管理页签下,单击Eventing组件操作列的部署。
Eventing部署成功后,再单击EventBridge组件操作列的部署,在弹出的对话框,输入AccessKey和SecretKey后单击确定。
关于如何获取AccessKey和SecretKey,请参见创建AccessKey。
重要为了确保您的账号安全,建议您尽快对以下操作项进行处理:
RAM用户默认首次登录需要修改登录密码,请您按照界面指引修改登录密码。
在控制台登录时除使用用户名和密码验证外,建议您绑定MFA设备,用于二次身份验证。具体操作方式,请参考为RAM用户绑定MFA设备。
组件状态显示为已部署时,表明部署成功。
步骤二:创建Knative服务
本文以event-display作为Knative服务,该服务会直接记录接收到的事件内容。以下介绍控制台和kubectl两种操作方式。
控制台
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击服务管理页签,然后单击使用模板创建,创建一个Knative服务。
示例代码如下所示。
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
参见下方示例保存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页面的服务管理页签下,单击目标服务名称,然后单击触发器页签。
单击创建触发器,在配置页面设置如下配置项,按照页面提示完成触发器的创建。
配置项
说明
示例值
名称
自定义。
my-service-trigger
Broker
支持选择EventBridge和其他。
EventBridge
事件源
支持多种事件源。
OSS
事件类型
支持多种事件类型。
oss:ActionTrail:ConsoleOperation
创建完成之后,可在触发器页签下查看。
kubectl
参见下方示例创建my-service-trigger.yaml并部署到集群中,创建一个触发器。
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: my-service-trigger spec: broker: eventbridge-default-broker filter: attributes: source: acs.oss type: 'oss:ActionTrail:ConsoleOperation' subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: helloworld-go namespace: default
broker
:名称为eventbridge-default-broker,对应EventBridge中默认的事件总线(default)。source
:EventBridge支持的事件源。type
:事件源对应的事件类型,多个事件类型以英文半角逗号,
分割。subscriber
:对应所订阅的服务。
kubectl apply -f my-service-trigger.yaml
执行以下命令,查看触发器是否创建成功。
kubectl get triggers
预期输出:
NAME BROKER SUBSCRIBER_URI AGE READY REASON my-service-trigger eventbridge-default-broker http://helloworld-go.default.svc.cluster.local 42h True
步骤四:验证通过EventBridge触发Knative服务消费事件是否成功
在执行以下操作前,请确认您已安装ossutil。
执行以下命令,上传文件到OSS。
说明OSS Bucket需要与Eventbridge处于同一个地域。
ossutil cp <文件名称> oss://<Bucket名称>
上传文件到OSS后,EventBridge将触发Knative服务消费事件。
查看事件轨迹。
- 登录事件总线EventBridge控制台,在左侧导航栏,单击事件总线。
在右侧页面单击default事件操作列下的事件追踪,然后在按时间范围查询页签,设置时间范围,单击查询。
选择事件源为对象存储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
预期输出:
{"data":{"eventVersion":"1.0","responseElements":{"requestId":"63E21F5FEE852133319101AD"},"eventSource":"acs:oss","eventTime":"2023-02-07T09:52:31.000Z","requestParameters":{"sourceIPAddress":"XX.XXX.XX.XXX"},"eventName":"ObjectCreated:PutObject","userIdentity":{"principalId":"1118324452360952"},"region":"cn-hangzhou","oss":{"bucket":{"name":"knative","arn":"acs:oss:cn-hangzhou:1581204543170042:knative","virtualBucket":"","ownerIdentity":"1581204543170042"},"ossSchemaVersion":"1.0","object":{"size":225496,"objectMeta":{"mimeType":"application/octet-stream"},"deltaSize":0,"eTag":"B350C082843DAC7E9E634193437EBA30","key":"demo.data"}}}}
预期输出表明,Knative服务消费事件成功,并且记录了上传文件到OSS的事件,即通过EventBridge触发Knative服务消费事件成功。
相关文档
关于如何结合其他事件源实现事件驱动,请参见在Knative中使用GitHub事件源。