A Knative Sink can be referenced in a producer path of the Camel Knative component, e.g.:
from('timer:tick') .setBody().constant('event') .to('knative:event/broker')
Or as the value of the
sink field in a
KameletBinding resource, e.g.:
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 Knative Broker. However, a Knative Sink can be any Kubernetes resource that’s addressable, i.e., whose URL can be retrieved by reading its
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 Knative documentation.