コンテンツへスキップ

Brokerデフォルトの設定

Knativeインストールに対するクラスタ管理者権限をお持ちの場合は、ConfigMapを変更して、クラスタ上のBrokerのグローバルデフォルト設定オプションを変更できます。

Knative Eventingは、デフォルトのBroker作成を制御する設定を含むconfig-br-defaults ConfigMapを提供します。

デフォルトのconfig-br-defaults ConfigMapは次のとおりです。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-br-defaults
  namespace: knative-eventing
data:
  # Configures the default for any Broker that does not specify a spec.config or Broker class.
  default-br-config: |
    clusterDefault:
      brokerClass: MTChannelBasedBroker
      apiVersion: v1
      kind: ConfigMap
      name: config-br-default-channel
      namespace: knative-eventing

この場合、クラスタで作成される新しいBrokerは、Brokersのeventing.knative.dev/broker.classアノテーションおよび/または.spec.configで別途指定されていない限り、デフォルトでMTChannelBasedBroker Brokerクラスとknative-eventing名前空間のconfig-br-default-channel ConfigMapを使用します(開発者向け設定オプションを参照)。

ただし、たとえばKafkaチャネルをデフォルトのチャネル実装として使用したい場合は、config-br-defaults ConfigMapを次のように変更できます。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-br-defaults
  namespace: knative-eventing
data:
  # Configures the default for any Broker that does not specify a spec.config or Broker class.
  default-br-config: |
    clusterDefault:
      brokerClass: MTChannelBasedBroker
      apiVersion: v1
      kind: ConfigMap
      name: kafka-channel
      namespace: knative-eventing

これで、spec.configを持たないクラスタで作成されたすべてのBrokerは、kafka-channel ConfigMapを使用するように設定されます。Brokerで使用するためのkafka-channel ConfigMapの作成の詳細については、KafkaチャネルConfigMapのドキュメントを参照してください。

namespaceDefaultsセクションで定義することで、1つ以上の専用名前空間のデフォルトBroker設定を変更することもできます。たとえば、すべてのBrokerでデフォルトでconfig-br-default-channel ConfigMapを使用したいが、namespace-1namespace-2ではkafka-channel ConfigMapを使用したい場合は、次のConfigMapを使用します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-br-defaults
  namespace: knative-eventing
data:
  default-br-config: |
    clusterDefault:
      brokerClass: MTChannelBasedBroker
      apiVersion: v1
      kind: ConfigMap
      name: config-br-default-channel
      namespace: knative-eventing
    namespaceDefaults:
      namespace-1:
        apiVersion: v1
        kind: ConfigMap
        name: kafka-channel
        namespace: knative-eventing
      namespace-2:
        apiVersion: v1
        kind: ConfigMap
        name: kafka-channel
        namespace: knative-eventing

Brokerクラスの設定

各BrokerのBrokerクラスを個別に設定することに加えて、クラスタ全体または名前空間ごとにデフォルトのBrokerクラスを定義できます。

クラスタのデフォルトBrokerクラスの設定

eventing.knative.dev/broker.classアノテーションを持たないクラスタで作成されたすべてのBrokerがこのデフォルトのBrokerクラスを使用するように、clusterDefault Brokerクラスを設定できます。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-br-defaults
  namespace: knative-eventing
data:
  # Configures the default for any Broker that does not specify a spec.config or Broker class.
  default-br-config: |
    clusterDefault:
      brokerClass: MTChannelBasedBroker

名前空間のデフォルトBrokerクラスの設定

1つ以上の名前空間のデフォルトBrokerクラスを変更できます。

たとえば、クラスタで作成された他のすべてのBrokerにKafkaBroker Brokerクラスを使用したいが、namespace-1namespace-2で作成されたBrokerにはMTChannelBasedBroker Brokerクラスを使用したい場合は、次のConfigMap設定を使用します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-br-defaults
  namespace: knative-eventing
data:
  # Configures the default for any Broker that does not specify a spec.config or Broker class.
  default-br-config: |
    clusterDefault:
      brokerClass: KafkaBroker
    namespaceDefaults:
      namespace1:
        brokerClass: MTChannelBasedBroker
      namespace2:
        brokerClass: MTChannelBasedBroker

注記

異なるBrokerクラスは通常、異なる設定ConfigMapを必要とすることに注意してください。Broker実装の異なる設定オプションを参照して、参照されるConfigMapがどのように見えるべきかを確認してください(例:MTChannelBasedBrokerまたはApache Kafka用Knative Broker)。

配信仕様デフォルトの設定

イベントの配信に失敗した場合に適用される、Brokerのデフォルトのイベント配信パラメーターを設定できます。

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-br-defaults
  namespace: knative-eventing
data:
  # Configures the default for any Broker that does not specify a spec.config or Broker class.
  default-br-config: |
    clusterDefault:
      brokerClass: MTChannelBasedBroker
      apiVersion: v1
      kind: ConfigMap
      name: kafka-channel
      namespace: knative-eventing
      delivery:
        retry: 10
        backoffDelay: PT0.2S
        backoffPolicy: exponential
    namespaceDefaults:
      namespace-1:
        apiVersion: v1
        kind: ConfigMap
        name: config-br-default-channel
        namespace: knative-eventing
        delivery:
          deadLetterSink:
            ref:
              kind: Service
              namespace: example-namespace
              name: example-service
              apiVersion: v1
            uri: example-uri
          retry: 10
          backoffPolicy: exponential
          backoffDelay: "PT0.2S"

デッドレターシンク

イベントの配信に失敗した場合に、指定されたイベントシンクに送信されるように、deadLetterSink配信パラメーターを設定できます。

リトライ

整数値でretry配信パラメーターを設定することにより、イベントがデッドレターシンクに送信される前に、配信をリトライする最小回数を設定できます。

バックオフ遅延

backoffDelay配信パラメーターを設定して、失敗後にイベント配信のリトライを試行するまでの時間遅延を指定できます。backoffDelayパラメーターの期間は、ISO 8601形式で指定します。

バックオフポリシー

backoffPolicy配信パラメーターを使用して、リトライバックオフポリシーを指定できます。ポリシーは、線形または指数関数型のいずれかとして指定できます。線形バックオフポリシーを使用する場合、バックオフ遅延はリトライ間で指定された時間間隔です。指数関数的バックオフポリシーを使用する場合、バックオフ遅延はbackoffDelay*2^<numberOfRetries>に等しくなります。

IstioとKnative Brokersの統合

JSON Web Token (JWT)とIstioを使用してKnative Brokerを保護する

前提条件

  • Knative Eventingをインストール済みであること。
  • Istioをインストール済みであること。

手順

  1. IstioがJWTベースのユーザー認証を処理できるように、コマンドを実行してknative-eventing名前空間にラベルを付けます。

    kubectl label namespace knative-eventing istio-injection=enabled
    
  2. コマンドを実行して、istio-proxyコンテナをサイドカーとして挿入できるように、Brokerイングレスポッドを再起動します。

    kubectl delete pod <broker-ingress-pod-name> -n knative-eventing
    

    ここで、<broker-ingress-pod-name>はBrokerイングレスポッドの名前です。

    ポッドには、2つのコンテナが含まれるようになりました。

    knative-eventing     <broker-ingress-pod-name>           2/2     Running   1              175m
    
  3. Brokerを作成し、コマンドを実行してBrokerのURLを取得します。

    kubectl get broker <broker-name>
    

    ここで、<broker-name>はBrokerの名前です。

    出力例

    NAMESPACE   NAME        URL                                                                          AGE   READY   REASON
    default     my-broker   http://broker-ingress.knative-eventing.svc.cluster.local/default/my-broker   6s    True
    
  4. 次のコマンドを実行してcurlポッドを開始します。

    kubectl -n default run curl --image=radial/busyboxplus:curl -i --tty
    
  5. 次のコマンドを実行して、Broker URLに対してHTTP POSTを使用してCloudEventを送信します。

    curl -X POST -v \
    -H "content-type: application/json"  \
    -H "ce-specversion: 1.0"  \
    -H "ce-source: my/curl/command"  \
    -H "ce-type: my.demo.event"  \
    -H "ce-id: 0815"  \
    -d '{"value":"Hello Knative"}' \
    <broker-URL>
    

    ここで、<broker-URL>はBrokerのURLです。たとえば、

    curl -X POST -v \
    -H "content-type: application/json"  \
    -H "ce-specversion: 1.0"  \
    -H "ce-source: my/curl/command"  \
    -H "ce-type: my.demo.event"  \
    -H "ce-id: 0815"  \
    -d '{"value":"Hello Knative"}' \
    http://broker-ingress.knative-eventing.svc.cluster.local/default/my-broker
    
  6. Brokerがリクエストを受け入れたことを示す202 HTTPレスポンスコードを受け取ります。

    ...
    * Mark bundle as not supporting multiuse
    < HTTP/1.1 202 Accepted
    < allow: POST, OPTIONS
    < date: Tue, 15 Mar 2022 13:37:57 GMT
    < content-length: 0
    < x-envoy-upstream-service-time: 79
    < server: istio-envoy
    < x-envoy-decorator-operation: broker-ingress.knative-eventing.svc.cluster.local:80/*
    
  7. knative-eventing名前空間にAuthorizationPolicyオブジェクトを適用して、Brokerへのパスが特定のユーザーに制限されていることを記述します。

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: require-jwt
      namespace: knative-eventing
    spec:
      action: ALLOW
      rules:
      - from:
        - source:
           requestPrincipals: ["testing@secure.istio.io/testing@secure.istio.io"]
        to:
        - operation:
            methods: ["POST"]
            paths: ["/default/my-broker"]
    
  8. istio-system名前空間に、ユーザーrequestPrincipalRequestAuthenticationオブジェクトを作成します。

    apiVersion: security.istio.io/v1beta1
    kind: RequestAuthentication
    metadata:
      name: "jwt-example"
      namespace: istio-system
    spec:
      jwtRules:
      - issuer: "testing@secure.istio.io"
        jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.13/security/tools/jwt/samples/jwks.json"
    
  9. curlコマンドを再実行すると、サーバーから403 - Forbiddenのレスポンスコードが返されます。

    ...
    * Mark bundle as not supporting multiuse
    < HTTP/1.1 403 Forbidden
    < content-length: 19
    < content-type: text/plain
    < date: Tue, 15 Mar 2022 13:47:53 GMT
    < server: istio-envoy
    < connection: close
    < x-envoy-decorator-operation: broker-ingress.knative-eventing.svc.cluster.local:80/*
    
  10. ブローカーにアクセスするには、リクエストの一部としてBearer JSON Webトークンを追加してください。

    TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.13/security/tools/jwt/samples/demo.jwt -s)
    
    curl -X POST -v \
    -H "content-type: application/json"  \
    -H "Authorization: Bearer ${TOKEN}"  \
    -H "ce-specversion: 1.0"  \
    -H "ce-source: my/curl/command"  \
    -H "ce-type: my.demo.event"  \
    -H "ce-id: 0815"  \
    -d '{"value":"Hello Knative"}' \
    <broker-URL>
    

    サーバーは、HTTPリクエストを受け付けたことを示す202レスポンスコードで応答するようになりました。

    * Mark bundle as not supporting multiuse
    < HTTP/1.1 202 Accepted
    < allow: POST, OPTIONS
    < date: Tue, 15 Mar 2022 14:05:09 GMT
    < content-length: 0
    < x-envoy-upstream-service-time: 40
    < server: istio-envoy
    < x-envoy-decorator-operation: broker-ingress.knative-eventing.svc.cluster.local:80/*
    

サイトトラフィックを理解するために、アナリティクスとCookieを使用しています。その目的で、お客様のサイト利用に関する情報はGoogleと共有されます。詳細はこちら。