You are viewing documentation for a release that is no longer supported. The latest supported version of version 3 is [3.11]. For the most recent version 4, see [4]
You are viewing documentation for a release that is no longer supported. The latest supported version of version 3 is [3.11]. For the most recent version 4, see [4]

Brokers can be used in combination with triggers to deliver events from an event source to an event sink.

Broker event delivery overview

Events can be sent from an event source to a broker as an HTTP POST request.

After events have entered the broker, they can be filtered by CloudEvent attributes using triggers, and sent as an HTTP POST request to an event sink.

Creating a broker

OpenShift Serverless provides a default Knative broker that can be created by using the Knative CLI. You can also create the default broker by adding the eventing.knative.dev/injection=enabled label to a namespace if you are a cluster administrator, or by adding the eventing.knative.dev/injection: enabled annotation to a trigger if you are a developer.

Although both developers and cluster administrators can add a broker by injection, only cluster administrators can permanently delete brokers that were created using this method.

Creating a broker using the Knative CLI

Prerequisites
  • The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.

  • You have installed the kn CLI.

Procedure
  • Create the default broker:

    $ kn broker create default
Verification
  1. Use the kn command to list all existing brokers:

    $ kn broker list
    Example output
    NAME      URL                                                                     AGE   CONDITIONS   READY   REASON
    default   http://broker-ingress.knative-eventing.svc.cluster.local/test/default   45s   5 OK / 5     True
  2. Optional: If you are using the OpenShift Container Platform web console, you can navigate to the Topology view in the Developer perspective, and observe that the broker exists:

    View the broker in the web console Topology view

Creating a broker by annotating a trigger

You can create a broker by adding the eventing.knative.dev/injection: enabled annotation to a Trigger object.

If you create a broker by using the eventing.knative.dev/injection: enabled annotation, you cannot delete this broker without cluster administrator permissions. If you delete the broker without having a cluster administrator remove this annotation first, the broker is created again after deletion.

Prerequisites
  • The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.

Procedure
  1. Create a Trigger object as a .yaml file that has the eventing.knative.dev/injection: enabled annotation:

    apiVersion: eventing.knative.dev/v1
    kind: Trigger
    metadata:
      annotations:
        eventing.knative.dev/injection: enabled
      name: <trigger-name>
    spec:
      broker: default
      subscriber: (1)
        ref:
          apiVersion: serving.knative.dev/v1
          kind: Service
          name: <service-name>
    1 Specify details about the event sink, or subscriber, that the trigger sends events to.
  2. Apply the .yaml file:

    $ oc apply -f <filename>
Verification

You can verify that the broker has been created successfully by using the oc CLI, or by observing it in the Topology view in the web console.

  1. Use the oc command to get the broker:

    $ oc -n <namespace> get broker default
    Example output
    NAME      READY     REASON    URL                                                                     AGE
    default   True                http://broker-ingress.knative-eventing.svc.cluster.local/test/default   3m56s
  2. Navigate to the Topology view in the web console, and observe that the broker exists:

    View the broker in the web console Topology view

Creating a broker by labeling a namespace

If you have cluster administrator permissions, you can create the default broker automatically by labeling a namespace.

Brokers created using this method will not be removed if you remove the label. You must manually delete them.

Prerequisites
  • The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.

  • You have cluster administrator permissions for OpenShift Container Platform.

Procedure
  • Label a namespace with eventing.knative.dev/injection=enabled:

    $ oc label namespace <namespace> eventing.knative.dev/injection=enabled
Verification

You can verify that the broker has been created successfully by using the oc CLI, or by observing it in the Topology view in the web console.

  1. Use the oc command to get the broker:

    $ oc -n <namespace> get broker <broker_name>
    Example command
    $ oc -n default get broker default
    Example output
    NAME      READY     REASON    URL                                                                     AGE
    default   True                http://broker-ingress.knative-eventing.svc.cluster.local/test/default   3m56s
  2. Navigate to the Topology view in the web console, and observe that the broker exists:

    View the broker in the web console Topology view

Managing brokers

The kn CLI provides commands that can be used to list, describe, update, and delete brokers. Cluster administrators can also permanently delete a broker that was created using injection.

Listing existing brokers using the Knative CLI

Prerequisites
  • The OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on your OpenShift Container Platform cluster.

  • You have installed the kn CLI.

Procedure
  • List all existing brokers:

    $ kn broker list
    Example output
    NAME      URL                                                                     AGE   CONDITIONS   READY   REASON
    default   http://broker-ingress.knative-eventing.svc.cluster.local/test/default   45s   5 OK / 5     True

Describing an existing broker using the Knative CLI

Prerequisites
  • The OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on your OpenShift Container Platform cluster.

  • You have installed the kn CLI.

Procedure
  • Describe an existing broker:

    $ kn broker describe <broker_name>
    Example command using default broker
    $ kn broker describe default
    Example output
    Name:         default
    Namespace:    default
    Annotations:  eventing.knative.dev/broker.class=MTChannelBasedBroker, eventing.knative.dev/creato ...
    Age:          22s
    
    Address:
      URL:    http://broker-ingress.knative-eventing.svc.cluster.local/default/default
    
    Conditions:
      OK TYPE                   AGE REASON
      ++ Ready                  22s
      ++ Addressable            22s
      ++ FilterReady            22s
      ++ IngressReady           22s
      ++ TriggerChannelReady    22s

Deleting a broker that was created by injection

Brokers created by injection, by using a namespace label or trigger annotation, are not deleted permanently if a developer removes the label or annotation. A user with cluster administrator permissions must manually delete these brokers.

Procedure
  1. Remove the eventing.knative.dev/injection=enabled label from the namespace:

    $ oc label namespace <namespace> eventing.knative.dev/injection-

    Removing the annotation prevents Knative from recreating the broker after you delete it.

  2. Delete the broker from the selected namespace:

    $ oc -n <namespace> delete broker <broker_name>
Verification
  • Use the oc command to get the broker:

    $ oc -n <namespace> get broker <broker_name>
    Example command
    $ oc -n default get broker default
    Example output
    No resources found.
    Error from server (NotFound): brokers.eventing.knative.dev "default" not found

Filtering events using triggers

Using triggers enables you to filter events from the broker for delivery to event sinks.

Prerequisites

Before you can use triggers, you will need:

  • Knative Eventing and kn installed.

  • An available broker, either the default broker or one that you have created.

    You can create the default broker either by following the instructions on Using brokers with Knative Eventing, or by using the --inject-broker flag while creating a trigger. Use of this flag is described later in this section.

  • An available event consumer, such as a Knative service.

Creating a trigger using the Developer perspective

After you have created a broker, you can create a trigger in the web console Developer perspective.

Prerequisites
  • The OpenShift Serverless Operator, Knative Serving, and Knative Eventing are installed on your OpenShift Container Platform cluster.

  • You have logged in to the web console.

  • You are in the Developer perspective.

  • You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.

  • You have created a broker and a Knative service or other event sink to connect to the trigger.

Procedure
  1. In the Developer perspective, navigate to the Topology page.

  2. Hover over the broker that you want to create a trigger for, and drag the arrow. The Add Trigger option is displayed.

    Create a trigger for the broker
  3. Click Add Trigger.

  4. Select your sink as a Subscriber from the drop-down list.

  5. Click Add.

Verification
  • After the subscription has been created, it is represented as a line that connects the broker to the service in the Topology view:

    <img src="data:image/png;base64,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