接收器¶
当您创建一个事件源时,您可以指定一个接收器,事件将从该源发送到接收器。接收器是可寻址或可调用资源,可以接收来自其他资源的传入事件。Knative 服务、通道和代理都是接收器的示例。
可寻址对象通过 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
契约
这将导致K_SINK环境变量在subject上设置为"http://mysink.default.svc.cluster.local/extra/path"。
使用自定义资源作为接收器¶
要使用 Kubernetes 自定义资源 (CR) 作为事件的接收器,您必须
-
使 CR 可寻址。您必须确保 CR 包含
status.address.url。有关更多信息,请参阅可寻址资源的规范。 -
创建一个 Addressable-resolver ClusterRole 以获取接收器接收事件所需的 RBAC 规则。
例如,您可以创建一个
kafkasinks-addressable-resolverClusterRole,以允许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,它使用服务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标志。
支持的第三方接收器类型¶
| 名称 | 维护者 | 描述 |
|---|---|---|
| Amazon S3 接收器 | Knative | 将事件发送到 AWS S3 存储桶 |
| Amazon SNS 接收器 | Knative | 将事件发送到 AWS SNS 主题 |
| Amazon SQS 接收器 | Knative | 将事件发送到 AWS SQS 队列 |
| JobSink | Knative | 触发长时间运行的后台作业 |
| KafkaSink | Knative | 将事件发送到 Kafka 主题 |
| Logger 接收器 | Knative | 将事件发送到日志记录器,用于调试 |
| RedisSink | Knative | 将事件发送到 Redis 流 |