文档

通过EventBridge触发Knative服务

更新时间:

事件总线EventBridge是阿里云提供的一款无服务器事件总线服务,支持为Knative提供生产级别的事件驱动能力。本文以上传文件到对象存储OSS事件为例,介绍如何通过EventBridge触发Knative服务消费事件。

前提条件

背景信息

  • Knative是一款基于Kubernetes的Serverless框架。其目标是制定云原生、跨平台的Serverless容器编排标准。Knative通过整合容器构建(或者函数)、工作负载管理(动态扩缩容)以及事件驱动这三个方面来实现Serverless标准。

  • 事件总线EventBridge支持以标准化、中心化的方式接入阿里云服务、自定义应用、SaaS应用,并能够以标准化的CloudEvents 1.0协议在这些应用之间路由事件,帮助您轻松构建松耦合、分布式的事件驱动架构。

技术架构

当前EventBridge支持多种数据源接入,通过配置事件总线、事件规则、事件目标,经过事件过滤、转换,可以触发EventBridge事件驱动Knative服务消费事件,实现资源的按需使用。技术架构图如下所示。

说明

对象存储OSS支持作为事件源接入到EventBridge。关于对象存储OSS作为事件源发布到事件总线EventBridge的事件类型,请参见对象存储OSS事件

架构图

步骤一:创建Knative服务

本文以event-display作为Knative服务,该服务会直接记录接收到的事件内容。

  1. 使用以下示例代码创建Knative Serviceevent-display.yaml

    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
  2. 执行以下命令,部署Knative Service。

    kubectl apply -f event-display.yaml
  3. 执行以下命令,查看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    
  4. 获取Knative服务访问域名和访问网关地址。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Knative

    3. Knative页面,单击服务管理页签,获取Knative服务的默认域名和访问网关地址,以备后续使用。

步骤二:创建连接配置和API端点

  1. 登录事件总线EventBridge控制台
  2. 在左侧导航栏,选择集成中心 > API端点,然后在顶部菜单栏,选择地域。

  3. 单击连接配置页签,单击创建

  4. 创建连接配置面板,输入连接名称连接描述,设置鉴权配置无需配置网络选择公网,单击确定

  5. 单击API 端点页签,单击创建

  6. 创建 API 端点面板基础信息区域,将创建方式设置为自定义创建,输入API 目标名称描述

  7. API配置区域,设置URL步骤4获取的访问网关地址,HTTP MethodPOST

    说明

    如果使用的是ALB网关,则需要将URL设置为ALB的DNS域名。

  8. 连接配置区域,单击选择已有,选择连接配置名称,然后单击确定

步骤三:创建事件规则

  1. 登录事件总线EventBridge控制台
  2. 在左侧导航栏,单击事件总线,在右侧页面单击default事件操作列下的事件规则

  3. 在事件规则页面,单击创建规则

  4. 配置基本信息配置向导,输入规则名称和描述,单击下一步

  5. 配置事件模式配置向导,设置事件源acs.oss事件类型oss:ObjectCreated:PutObject,单击下一步

  6. 配置事件目标配置向导,设置配置项,然后单击创建

    配置项

    描述

    服务类型

    选择API触发

    创建方式

    选择使用已有,选择步骤二创建的API端点名称。

    HTTP 参数

    设置事件推送给Knative服务时传递的参数及参数内容。

    1. Header页签:key类型为固定值,值为HostValue类型为固定值,值为步骤4获取的Knative访问域名

    2. 单击Body页签,key类型为固定值,值为dataValue类型为部分事件,值为$.data。关于事件的详细介绍,请参见事件概述

步骤四:验证通过EventBridge触发Knative服务消费事件是否成功

在执行以下操作前,请确认您已安装ossutil。

  1. 执行以下命令,上传文件到OSS。

    说明

    OSS Bucket需要与Eventbridge处于同一个地域。

    ossutil cp <文件名称> oss://<Bucket名称>

    上传文件到OSS后,EventBridge将触发Knative服务消费事件。

  2. 查看事件轨迹。

    1. 登录事件总线EventBridge控制台

    2. 在左侧导航栏,单击事件总线,在右侧页面单击default事件操作列下的事件追踪

    3. 按时间范围查询页签下,设置时间范围最近1小时,单击查询

    4. 选择事件源对象存储OSS事件类型上传文件的事件,单击该事件操作列下的事件轨迹

      image.png

      事件轨迹页面可以看到事件投递成功。

  3. 验证Knative服务是否消费事件成功。

    1. 执行以下命令,查看Knative服务是否消费事件成功。

      kubectl get  pod

      预期输出:

      NAME                                              READY   STATUS    RESTARTS         AGE
      event-display-00001-deployment-56cc79****-z2vhv   2/2     Running   0                7s
    2. 执行以下命令,查看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.188.187"},"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服务消费事件成功。

  • 本页导读 (1)