跳至內容

關於接收器

當您建立事件來源時,您可以指定一個接收器,事件會從來源傳送到該接收器。接收器是一個可定址可呼叫的資源,可以接收來自其他資源的傳入事件。Knative 服務、通道和 Broker 都是接收器的範例。

可定址物件接收並確認透過 HTTP 傳遞到其 status.address.url 欄位中定義的位址的事件。作為特殊情況,核心 Kubernetes 服務物件 也滿足可定址介面。

可呼叫物件能夠接收透過 HTTP 傳遞的事件並轉換事件,在 HTTP 回應中傳回 0 或 1 個新事件。這些傳回的事件可以以與處理外部事件來源的事件相同的方式進一步處理。

接收器作為參數

接收器用作物件的參考,該物件解析為用作接收器的 URI。

sink 定義支援以下欄位

欄位 描述 必要或選擇性
ref 這指向可定址物件。 如果使用 uri,則為必要
ref.apiVersion 被引用者的 API 版本。 如果使用 ref,則為必要
ref.kind 被引用者的種類。 如果使用 ref,則為必要
ref.namespace 被引用者的命名空間。如果省略,則預設為持有它的物件。 選擇性
ref.name 被引用者的名稱。 如果使用 ref,則為必要
uri 這可以是具有非空配置和非空主機的絕對 URL,指向目標或相對 URI。相對 URI 使用從 Ref 檢索的基本 URI 解析。 如果使用 ref,則為必要

注意

必須至少指定 refuri 其中一個。如果同時指定兩者,則 uri 會解析為來自可定址 ref 結果的 URL。

接收器參數範例

假設以下 YAML,如果 ref 解析為 "http://mysink.default.svc.cluster.local",則將 uri 添加到此結果,產生 "http://mysink.default.svc.cluster.local/extra/path"

apiVersion: sources.knative.dev/v1
kind: SinkBinding
metadata:
  name: bind-heartbeat
spec:
  ...
  sink:
    ref:
      apiVersion: v1
      kind: Service
      namespace: default
      name: mysink
    uri: /extra/path

合約

這會導致在 subject 上設定 K_SINK 環境變數為 "http://mysink.default.svc.cluster.local/extra/path"

使用自訂資源作為接收器

若要將 Kubernetes 自訂資源 (CR) 用作事件的接收器,您必須

  1. 使 CR 可定址。您必須確保 CR 包含 status.address.url。如需詳細資訊,請參閱 可定址資源的規格。

  2. 建立可定址解析器 ClusterRole 以取得接收事件所需的 RBAC 規則。

    例如,您可以建立 kafkasinks-addressable-resolver ClusterRole 以允許 getlistwatch 存取 KafkaSink 物件和狀態

    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: kafkasinks-addressable-resolver
      labels:
        kafka.eventing.knative.dev/release: devel
        duck.knative.dev/addressable: "true"
    # Do not use this role directly. These rules will be added to the "addressable-resolver" role.
    rules:
      - apiGroups:
          - eventing.knative.dev
        resources:
          - kafkasinks
          - kafkasinks/status
        verbs:
          - get
          - list
          - watch
    

使用觸發器過濾傳送到接收器的事件

您可以將觸發器連接到接收器,以便在事件傳送到接收器之前進行過濾。連接到觸發器的接收器在觸發器資源規格中設定為 subscriber

例如

apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
  name: <trigger-name>
spec:
...
  subscriber:
    ref:
      apiVersion: eventing.knative.dev/v1alpha1
      kind: KafkaSink
      name: <kafka-sink-name>

其中;

  • <trigger-name> 是正在連接到接收器的觸發器的名稱。
  • <kafka-sink-name> 是 KafkaSink 物件的名稱。

使用 kn CLI --sink 旗標指定接收器

當您使用 Knative (kn) CLI 建立事件產生 CR 時,您可以使用 --sink 旗標指定事件從該資源傳送到的接收器。

以下範例建立一個 SinkBinding,該 SinkBinding 使用服務 http://event-display.svc.cluster.local 作為接收器

kn source binding create bind-heartbeat \
  --namespace sinkbinding-example \
  --subject "Job:batch/v1:app=heartbeat-cron" \
  --sink http://event-display.svc.cluster.local \
  --ce-override "sink=bound"

http://event-display.svc.cluster.local 中的 svc 決定接收器是 Knative 服務。其他預設接收器前綴包括 Channel 和 Broker。

提示

您可以透過自訂 kn,設定哪些資源可以搭配 kn CLI 命令的 --sink 旗標使用。

支援的第三方接收器類型

名稱 維護者 描述
JobSink Knative 觸發長時間執行的背景作業
KafkaSink Knative 將事件傳送到 Kafka 主題
RedisSink Knative 將事件傳送到 Redis Stream

我們使用分析和 Cookie 來了解網站流量。有關您使用我們網站的資訊會與 Google 分享以達到該目的。了解更多。