Sink
A sink is an Addressable resource that acts as a link between the Eventing mesh and an entity or system.
We can connect any source to a sink, such as PingSource
and KafkaSink
objects:
apiVersion: sources.knative.dev/v1beta1
kind: PingSource
metadata:
name: test-ping-source
spec:
schedule: "*/1 * * * *"
jsonData: '{"message": "Hello world!"}'
sink:
ref:
apiVersion: eventing.knative.dev/v1alpha1
kind: KafkaSink
name: my-kafka-sink
We can connect a Trigger
object to a sink, so that we can filter events, before sending them to a sink:
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: my-service-trigger
spec:
broker: default
filter:
attributes:
type: dev.knative.foo.bar
myextension: my-extension-value
subscriber:
ref:
apiVersion: eventing.knative.dev/v1alpha1
kind: KafkaSink
name: my-kafka-sink
Setting up a Custom Resource to be used as a sink
To allow a Custom Resource to act as a sink for events, there are two things needed:
1. Make the resource Addressable
To make a Custom Resource Addressable, it needs to contain a status.address.url
. More information about Addressable resources.
2. Create an addressable-resolver ClusterRole
An addressable-resolver ClusterRole is needed in order to obtain the necessary RBAC rules for the sink to receive events.
For example, we can create a kafkasinks-addressable-resolver
ClusterRole to allow get
, list
, and watch
access to kafkasinks
and kafkasinks/status
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
Knative Sinks
Name | Maintainer | Description |
---|---|---|
KafkaSink | Knative | Send events to a Kafka topic |
RedisSink | Knative | Send events to a Redis Stream |
Table of contents