[[knative-sinks]]
= Knative Sinks

A https://knative.dev/docs/eventing/sinks[Knative Sink] can be referenced in a producer path of the Camel Knative component, e.g.:

[source,java]
----
from('timer:tick')
  .setBody().constant('event')
  .to('knative:event/broker')
----

Or as the value of the `sink` field in a `KameletBinding` resource, e.g.:

[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: timer-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: timer-source
    properties:
      message: Event
  sink:
    ref:
      kind: Broker
      apiVersion: eventing.knative.dev/v1
      name: broker
    properties:
      type: type
----

In the above examples, the Knative Sink is a https://knative.dev/docs/eventing/broker/[Knative Broker].
However, a Knative Sink can be any Kubernetes resource that's _addressable_, i.e., whose URL can be retrieved by reading its `status.address.url`.

This is what the Camel K operator does to resolve the Sink URLs, so that events can be sent to.
That requires the ServiceAccount that runs the operator to be granted permission to GET these resources, while it configures the integration runtime.

As the set of resources is arbitrary, and cannot be known _a-priori_, these permissions are automatically granted to `camel-k-operator` ServiceAccount, by relying on the Knative Addressable resolver aggregated ClusterRole.

For the above examples, that sink into an `eventing.knative.dev/broker` resource, this is already being configured by Knative, that aggregates the required permissions for its own resources by default.

However, if you integrate custom resources as sinks, the required permissions must be added manually, as documented in the https://knative.dev/docs/eventing/sinks/#using-custom-resources-as-sinks[Knative documentation].
