全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:在Knative中使用EventBridge事件源

更新时间:Nov 14, 2024

您可以使用事件总线EventBridge为Knative提供生产级别的事件驱动能力。您可以在EventBridge中配置事件总线、事件规则和事件目标,经过事件的过滤、转换后,触发EventBridge的事件产生,继而触发Knative服务或函数的执行,实现资源的按需使用。

前提条件

  • 已为Knative部署Eventing和Kafka组件,请参见管理Knative组件

  • 已安装ossutil。具体操作,请参见安装ossutil

  • 已开通事件总线EventBridge并授权

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

功能介绍

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

说明

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

image

步骤一:创建Knative服务

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

  1. 参见下方示例保存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
  2. 执行以下命令,查看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    
  3. 获取Knative服务访问域名和访问网关地址。

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

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

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

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

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

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

  4. 单击API 端点页签,单击创建,在基础信息区域,将创建方式设置为自定义创建,输入API 目标名称描述

  5. API配置区域,设置URL步骤3获取的访问网关地址(例如http://8.141.XX.XX),HTTP MethodPOST

    说明

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

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

步骤三:创建事件规则

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

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

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

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

    配置项

    描述

    服务类型

    选择API触发

    创建方式

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

    HTTP 参数

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

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

    2. 单击Body页签,选择原始数据(raw)变量设置为{ "data": "$.data"}模板设置为{ "data": ${data}},并选择JSON (application/json)方式。关于事件的详细介绍,请参见事件概述

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

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

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

    说明

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

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

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

  2. 查看事件轨迹。

    1. 登录事件总线EventBridge控制台,在左侧导航栏,单击事件总线
    2. 在右侧页面单击default事件操作列下的事件追踪,然后在按时间范围查询页签,设置时间范围最近1小时,单击查询

    3. 选择事件源对象存储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.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事件源