關於接收器¶
當您建立事件來源時,您可以指定一個接收器,事件會從來源傳送到該接收器。接收器是一個可定址或可呼叫的資源,可以接收來自其他資源的傳入事件。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 ,則為必要 |
注意
必須至少指定 ref
或 uri
其中一個。如果同時指定兩者,則 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) 用作事件的接收器,您必須
-
使 CR 可定址。您必須確保 CR 包含
status.address.url
。如需詳細資訊,請參閱 可定址資源的規格。 -
建立可定址解析器 ClusterRole 以取得接收事件所需的 RBAC 規則。
例如,您可以建立
kafkasinks-addressable-resolver
ClusterRole 以允許get
、list
和watch
存取 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 |