全部產品
Search
文件中心

Container Service for Kubernetes:通過EventBridge觸發Knative服務

更新時間:Jun 19, 2024

事件匯流排EventBridge是阿里雲提供的一款無伺服器事件匯流排服務,支援為Knative提供生產層級的事件驅動能力。本文以上傳檔案到Object Storage Service事件為例,介紹如何通過EventBridge觸發Knative服務消費事件。

前提條件

背景資訊

  • Knative是一款基於Kubernetes的Serverless架構。其目標是制定雲原生、跨平台的Serverless容器編排標準。Knative通過整合容器構建(或者函數)、工作負載管理(動態擴縮容)以及事件驅動這三個方面來實現Serverless標準。

  • 事件匯流排EventBridge支援以標準化、中心化的方式接入阿里雲服務、自訂應用、SaaS應用,並能夠以標準化的CloudEvents 1.0協議在這些應用之間路由事件,協助您輕鬆構建松耦合、分布式的事件驅動架構。

技術架構

當前EventBridge支援多種資料來源接入,通過配置事件匯流排、事件規則、事件目標,經過事件過濾、轉換,可以觸發EventBridge事件驅動Knative服務消費事件,實現資源的按需使用。技術架構圖如下所示。

說明

Object Storage Service支援作為事件來源接入到EventBridge。關於Object Storage Service作為事件來源發布到事件匯流排EventBridge的事件類型,請參見Object Storage Service事件

步驟一:建立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. 登入Container Service管理主控台,在左側導覽列選擇叢集

    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. 選擇事件來源Object Storage Service事件類型上傳檔案的事件,單擊該事件操作列下的事件軌跡

      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服務消費事件成功。