全部產品
Search
文件中心

Container Service for Kubernetes:在Knative中使用EventBridge事件驅動

更新時間:Dec 04, 2024

Knative Eventing提供了一個完整的事件模型,方便接入各個外部系統的事件。您可以通過在ACK叢集中部署Knative Eventing組件並建立觸發器,以啟用事件驅動能力。事件接入後將通過CloudEvent標準在系統內部流轉。本文介紹如何使用事件匯流排EventBridge為Knative提供生產層級的事件驅動能力。

前提條件

  • 已確保Knative Serving版本為1.12.7及以上。

  • 已安裝ossutil並建立儲存空間(Bucket),請參見安裝ossutil建立儲存空間

  • 已開通事件匯流排EventBridge並授權

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

功能介紹

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

說明

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

步驟一:部署Eventing和EventBridge組件

Knative提供EventBridge事件驅動能力,支援接入阿里雲官方事件來源以及事件轉寄。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Knative

  3. 組件管理頁簽下,部署Eventing和EventBridge組件。

    1. 組件管理頁簽下,單擊Eventing組件操作列的部署

    2. Eventing部署成功後,再單擊EventBridge組件操作列的部署,在彈出的對話方塊,輸入AccessKey和SecretKey後單擊確定

      關於如何擷取AccessKey和SecretKey,請參見建立AccessKey

      重要

      為了確保您的帳號安全,建議您儘快對以下操作項進行處理:

      • RAM使用者預設首次登入需要修改登入密碼,請您按照介面指引修改登入密碼。

      • 在控制台登入時除使用使用者名稱和密碼驗證外,建議您綁定MFA裝置,用於二次身分識別驗證。具體操作方式,請參考為RAM使用者綁定MFA裝置

    組件狀態顯示為已部署時,表明部署成功。

步驟二:建立Knative服務

本文以event-display作為Knative服務,該服務會直接記錄接收到的事件內容。以下介紹控制台和kubectl兩種操作方式。

控制台

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Knative

  3. 單擊服務管理頁簽,然後單擊使用模板建立,建立一個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

  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    

步驟三:建立觸發器

控制台

  1. Knative頁面的服務管理頁簽下,單擊目標服務名稱,然後單擊觸發器頁簽。

  2. 單擊建立觸發器,在配置版面設定如下配置項,按照頁面提示完成觸發器的建立。

    配置項

    說明

    樣本值

    名稱

    自訂。

    my-service-trigger

    Broker

    支援選擇EventBridge其他

    EventBridge

    事件來源

    支援多種事件來源。

    OSS

    事件類型

    支援多種事件類型。

    oss:ActionTrail:ConsoleOperation

    建立完成之後,可在觸發器頁簽下查看。

    image

kubectl

  1. 參見下方樣本建立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
  2. 執行以下命令,查看觸發器是否建立成功。

     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。

  1. 執行以下命令,上傳檔案到OSS。

    說明

    OSS Bucket需要與Eventbridge處於同一個地區。

    ossutil cp <檔案名稱> oss://<Bucket名稱>

    上傳檔案到OSS後,EventBridge將觸發Knative服務消費事件。

  2. 查看事件軌跡。

    1. 登入事件匯流排EventBridge控制台,在左側導覽列,單擊事件匯流排
    2. 在右側頁面單擊default事件操作列下的事件追蹤,然後在按時間範圍查詢頁簽,設定時間範圍,單擊查詢

    3. 選擇事件來源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

      預期輸出:

      {"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事件來源