关于接收器¶
当您创建事件源时,您可以指定一个接收器,事件将从源发送到该接收器。接收器是可寻址的或可调用的资源,可以接收来自其他资源的传入事件。Knative 服务、通道和代理都是接收器的示例。
可寻址对象接收并确认通过 HTTP 传递给它们status.address.url
字段中定义的地址的事件。作为特殊情况,核心Kubernetes 服务对象也满足可寻址接口。
可调用对象能够接收通过 HTTP 传递的事件,并转换该事件,在 HTTP 响应中返回 0 或 1 个新事件。这些返回的事件可能会以与来自外部事件源的事件相同的方式进一步处理。
接收器作为参数¶
接收器用作对对象的引用,该对象解析为要用作接收器的 URI。
接收器定义支持以下字段
字段 | 描述 | 必需或可选 |
---|---|---|
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
契约
这会导致K_SINK
环境变量在subject
上设置为"http://mysink.default.svc.cluster.local/extra/path"
。
使用自定义资源作为接收器¶
要使用 Kubernetes 自定义资源 (CR) 作为事件的接收器,您必须
-
使 CR 可寻址。您必须确保 CR 包含一个
status.address.url
。有关更多信息,请参阅可寻址资源的规范。 -
创建一个可寻址解析器 ClusterRole 以获取接收器接收事件所需的 RBAC 规则。
例如,您可以创建一个
kafkasinks-addressable-resolver
ClusterRole 以允许对 KafkaSink 对象和状态进行get
、list
和watch
访问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
通过使用触发器过滤发送到接收器的事件¶
您可以将触发器连接到接收器,以便在将事件发送到接收器之前对它们进行过滤。连接到触发器的接收器在触发器资源规范中配置为订阅者。
例如
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,它使用服务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 |