Knative Eventing提供了一個完整的事件模型,方便接入各個外部系統的事件。您可以通過在ACK叢集中部署Knative Eventing組件並建立觸發器,以啟用事件驅動能力。事件接入後將通過CloudEvent標準在系統內部流轉。本文介紹如何使用事件匯流排EventBridge為Knative提供生產層級的事件驅動能力。
前提條件
已確保Knative Serving版本為1.12.7及以上。
事件匯流排EventBridge是阿里雲提供的一款無伺服器事件匯流排服務,支援阿里雲服務、自訂應用、SaaS應用以標準化、中心化的方式接入,並能夠以標準化的CloudEvents 1.0協議在這些應用之間路由事件,協助您輕鬆構建松耦合、分布式的事件驅動架構。
功能介紹
當前EventBridge支援多種資料來源接入,通過配置事件匯流排、事件規則、事件目標,經過事件過濾、轉換,可以觸發EventBridge事件驅動Knative服務消費事件,實現資源的按需使用。技術架構圖如下所示。
Object Storage Service支援作為事件來源接入到EventBridge。關於Object Storage Service作為事件來源發布到事件匯流排EventBridge的事件類型,請參見Object Storage Service事件。
步驟一:部署Eventing和EventBridge組件
Knative提供EventBridge事件驅動能力,支援接入阿里雲官方事件來源以及事件轉寄。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在組件管理頁簽下,部署Eventing和EventBridge組件。
在組件管理頁簽下,單擊Eventing組件操作列的部署。
Eventing部署成功後,再單擊EventBridge組件操作列的部署,在彈出的對話方塊,輸入AccessKey和SecretKey後單擊確定。
關於如何擷取AccessKey和SecretKey,請參見建立AccessKey。
重要為了確保您的帳號安全,建議您儘快對以下操作項進行處理:
RAM使用者預設首次登入需要修改登入密碼,請您按照介面指引修改登入密碼。
在控制台登入時除使用使用者名稱和密碼驗證外,建議您綁定MFA裝置,用於二次身分識別驗證。具體操作方式,請參考為RAM使用者綁定MFA裝置。
組件狀態顯示為已部署時,表明部署成功。
步驟二:建立Knative服務
本文以event-display作為Knative服務,該服務會直接記錄接收到的事件內容。以下介紹控制台和kubectl兩種操作方式。
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
單擊服務管理頁簽,然後單擊使用模板建立,建立一個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事件操作列下的事件追蹤,然後在按時間範圍查詢頁簽,設定時間範圍,單擊查詢。
選擇事件來源為Object Storage Service,事件類型為上傳檔案的事件,單擊該事件操作列的事件軌跡。
在事件軌跡頁面,可以查看事件投遞是否成功。
驗證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事件來源。