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-1
とnamespace-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-1
とnamespace-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をインストール済みであること。
手順¶
-
IstioがJWTベースのユーザー認証を処理できるように、コマンドを実行して
knative-eventing
名前空間にラベルを付けます。kubectl label namespace knative-eventing istio-injection=enabled
-
コマンドを実行して、
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
-
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
-
次のコマンドを実行して
curl
ポッドを開始します。kubectl -n default run curl --image=radial/busyboxplus:curl -i --tty
-
次のコマンドを実行して、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
-
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/*
-
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"]
-
istio-system
名前空間に、ユーザーrequestPrincipal
のRequestAuthentication
オブジェクトを作成します。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"
-
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/*
-
ブローカーにアクセスするには、リクエストの一部として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/*