跳到内容

接收器

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

注意

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. 创建一个 Addressable-resolver 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,它使用服务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 流

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