跳至内容

关于接收器

当您创建事件源时,您可以指定一个接收器,事件将从源发送到该接收器。接收器是可寻址的或可调用的资源,可以接收来自其他资源的传入事件。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则必需

注意

至少需要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

契约

这会导致K_SINK环境变量在subject上设置为"http://mysink.default.svc.cluster.local/extra/path"

使用自定义资源作为接收器

要使用 Kubernetes 自定义资源 (CR) 作为事件的接收器,您必须

  1. 使 CR 可寻址。您必须确保 CR 包含一个status.address.url。有关更多信息,请参阅可寻址资源的规范。

  2. 创建一个可寻址解析器 ClusterRole 以获取接收器接收事件所需的 RBAC 规则。

    例如,您可以创建一个kafkasinks-addressable-resolver ClusterRole 以允许对 KafkaSink 对象和状态进行getlistwatch访问

    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

我们使用分析和 Cookie 来了解网站流量。有关您使用我们网站的信息将与 Google 共享,以达到该目的。了解更多。