5.6. チャネル
5.6.1. チャネルおよびサブスクリプション リンクのコピーリンクがクリップボードにコピーされました!
チャネルは、単一のイベント転送および永続レイヤーを定義するカスタムリソースです。イベントがイベントソースまたは生成側からチャネルに送信された後に、これらのイベントはサブスクリプションを使用して複数の Knative サービスまたは他のシンクに送信できます。
サポートされている Channel オブジェクトをインスタンス化することでチャネルを作成し、Subscription オブジェクトの delivery 仕様を変更して再配信の試行を設定できます。
Channel オブジェクトが作成されると、変更用の受付 Webhook はデフォルトのチャネル実装に基づいて Channel オブジェクトの spec.channelTemplate プロパティーのセットを追加します。たとえば、InMemoryChannel のデフォルト実装の場合、Channel オブジェクトは以下のようになります。
apiVersion: messaging.knative.dev/v1
kind: Channel
metadata:
name: example-channel
namespace: default
spec:
channelTemplate:
apiVersion: messaging.knative.dev/v1
kind: InMemoryChannel
チャネルコントローラーは、その後に spec.channelTemplate 設定に基づいてサポートするチャネルインスタンスを作成します。
spec.channelTemplate プロパティーは作成後に変更できません。それらは、ユーザーではなくデフォルトのチャネルメカニズムで設定されるためです。
このメカニズムが上記の例で使用される場合、汎用バッキングチャネルおよび InMemoryChannel チャネルなど 2 つのオブジェクトが作成されます。別のデフォルトチャネルの実装を使用している場合、InMemoryChannel は実装に固有のものに置き換えられます。たとえば、Knative Kafka の場合、KafkaChannel チャネルが作成されます。
バッキングチャネルは、サブスクリプションをユーザー作成のチャネルオブジェクトにコピーし、ユーザー作成チャネルオブジェクトのステータスを、バッキングチャネルのステータスを反映するように設定します。
5.6.1.1. チャネルの実装タイプ リンクのコピーリンクがクリップボードにコピーされました!
InMemoryChannel および KafkaChannel チャネルの実装は、開発目的で OpenShift Serverless で使用できます。
以下は、InMemoryChannel タイプのチャネルの制限です。
- イベントの永続性は利用できません。Pod がダウンすると、その Pod のイベントが失われます。
-
InMemoryChannelチャネルはイベントの順序を実装しないため、チャネルで同時に受信される 2 つのイベントはいずれの順序でもサブスクライバーに配信できます。 -
サブスクライバーがイベントを拒否する場合、再配信はデフォルトで試行されません。
Subscriptionオブジェクトのdelivery仕様を変更することで、再配信の試行を設定できます。
5.6.2. チャネルの作成 リンクのコピーリンクがクリップボードにコピーされました!
チャネルは、単一のイベント転送および永続レイヤーを定義するカスタムリソースです。イベントがイベントソースまたは生成側からチャネルに送信された後に、これらのイベントはサブスクリプションを使用して複数の Knative サービスまたは他のシンクに送信できます。
サポートされている Channel オブジェクトをインスタンス化することでチャネルを作成し、Subscription オブジェクトの delivery 仕様を変更して再配信の試行を設定できます。
5.6.2.1. Administrator パースペクティブを使用したチャネルの作成 リンクのコピーリンクがクリップボードにコピーされました!
Knative Eventing をクラスターにインストールしたら、管理者パースペクティブを使用してチャネルを作成できます。
前提条件
- OpenShift Serverless Operator および Knative Eventing が OpenShift Container Platform クラスターにインストールされている。
- Web コンソールにログインしており、Administrator パースペクティブを使用している。
- OpenShift Container Platform のクラスター管理者パーミッションがある。
手順
-
OpenShift Container Platform Web コンソールの Administrator パースペクティブで、 Serverless
Eventing に移動します。 - Create 一覧で、Channel を選択します。Channel ページに移動します。
タイプ リストで、作成する
Channelオブジェクトのタイプを選択します。注記現時点で、
InMemoryChannelチャネルオブジェクトのみがデフォルトでサポートされます。OpenShift Serverless に Knative Kafka をインストールしている場合は、Kafka チャネルを利用できます。- Create をクリックします。
5.6.2.2. Developer パースペクティブを使用したチャネルの作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用すると、チャネルを作成するための合理的で直感的なユーザーインターフェイスが提供されます。Knative Eventing がクラスターにインストールされると、Web コンソールを使用してチャネルを作成できます。
前提条件
- OpenShift Container Platform Web コンソールにログインしている。
- OpenShift Serverless Operator および Knative Eventing が OpenShift Container Platform クラスターにインストールされている。
- OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
手順
-
Developer パースペクティブで、+Add
Channel に移動します。 -
タイプ リストで、作成する
Channelオブジェクトのタイプを選択します。 - Create をクリックします。
検証
Topology ページに移動して、チャネルが存在することを確認します。
5.6.2.3. Knative CLI を使用したチャネルの作成 リンクのコピーリンクがクリップボードにコピーされました!
チャネルを作成するために Knative (kn) CLI を使用すると、YAML ファイルを直接修正するよりも合理的で直感的なユーザーインターフェイスが得られます。kn channel create コマンドを使用してチャネルを作成できます。
前提条件
- OpenShift Serverless Operator および Knative Eventing がクラスターにインストールされている。
-
Knative (
kn) CLI をインストールしている。 - OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
手順
チャネルを作成します。
$ kn channel create <channel_name> --type <channel_type>チャネルタイプはオプションですが、指定する場合、
Group:Version:Kindの形式で指定する必要があります。たとえば、InMemoryChannelオブジェクトを作成できます。$ kn channel create mychannel --type messaging.knative.dev:v1:InMemoryChannel出力例
Channel 'mychannel' created in namespace 'default'.
検証
チャネルが存在することを確認するには、既存のチャネルを一覧表示し、出力を検査します。
$ kn channel list出力例
kn channel list NAME TYPE URL AGE READY REASON mychannel InMemoryChannel http://mychannel-kn-channel.default.svc.cluster.local 93s True
チャネルの削除
チャネルを削除します。
$ kn channel delete <channel_name>
5.6.2.4. YAML を使用したデフォルト実装チャネルの作成 リンクのコピーリンクがクリップボードにコピーされました!
YAML ファイルを使用して Knative リソースを作成する場合、宣言的 API を使用するため、再現性の高い方法でチャネルを宣言的に記述することができます。YAML を使用してサーバーレスチャネルを作成するには、Channel オブジェクトを定義する YAML ファイルを作成し、oc apply コマンドを使用してそれを適用する必要があります。
前提条件
- OpenShift Serverless Operator および Knative Eventing がクラスターにインストールされている。
-
OpenShift CLI (
oc) をインストールしている。 - OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
手順
Channelオブジェクトを YAML ファイルとして作成します。apiVersion: messaging.knative.dev/v1 kind: Channel metadata: name: example-channel namespace: defaultYAML ファイルを適用します。
$ oc apply -f <filename>
5.6.2.5. YAML を使用した Kafka チャネルの作成 リンクのコピーリンクがクリップボードにコピーされました!
YAML ファイルを使用して Knative リソースを作成する場合、宣言的 API を使用するため、再現性の高い方法でチャネルを宣言的に記述することができます。Kafka チャネルを作成することで、Kafka トピックに裏打ちされた Knative Eventing チャネルを作成できます。YAML を使用して Kafka チャネルを作成するには、KafkaChannel オブジェクトを定義する YAML ファイルを作成し、oc apply コマンドを使用してそれを適用する必要があります。
前提条件
-
OpenShift Serverless Operator、Knative Eventing、および
KnativeKafkaカスタムリソースは OpenShift Container Platform クラスターにインストールされます。 -
OpenShift CLI (
oc) をインストールしている。 - OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
手順
KafkaChannelオブジェクトを YAML ファイルとして作成します。apiVersion: messaging.knative.dev/v1beta1 kind: KafkaChannel metadata: name: example-channel namespace: default spec: numPartitions: 3 replicationFactor: 1重要OpenShift Serverless 上の
KafkaChannelオブジェクトの API のv1beta1バージョンのみがサポートされます。非推奨となったv1alpha1バージョンの API は使用しないでください。KafkaChannelYAML ファイルを適用します。$ oc apply -f <filename>
5.6.2.6. 次のステップ リンクのコピーリンクがクリップボードにコピーされました!
- チャネルの作成後に、イベントシンクがチャネルにサブスクライブしてイベントを受信できるように、サブスクリプションを作成します。
- イベントがイベントシンクに配信されなかった場合に適用されるイベント配信パラメーターを設定します。イベント配信パラメーターの設定例 を参照してください。
5.6.3. デフォルトのチャネル実装 リンクのコピーリンクがクリップボードにコピーされました!
default-ch-webhook 設定マップを使用して、Knative Eventing のデフォルトのチャネル実装を指定できます。クラスター全体または 1 つ以上の namespace に対して、デフォルトのチャネルの実装を指定できます。現在、InMemoryChannel および KafkaChannel チャネルタイプがサポートされています。
5.6.3.1. デフォルトチャネル実装の設定 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- OpenShift Container Platform に対する管理者権限を持っている。
- OpenShift Serverless Operator および Knative Eventing がクラスターにインストールされていること。
-
デフォルトのチャネル実装として Kafka チャネルを使用する場合は、クラスターに
KnativeKafkaCR もインストールする必要があります。
手順
KnativeEventingカスタムリソースを変更して、default-ch-webhook設定マップの設定の詳細を追加します。apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventing spec: config:1 default-ch-webhook:2 default-ch-config: | clusterDefault:3 apiVersion: messaging.knative.dev/v1 kind: InMemoryChannel spec: delivery: backoffDelay: PT0.5S backoffPolicy: exponential retry: 5 namespaceDefaults:4 my-namespace: apiVersion: messaging.knative.dev/v1beta1 kind: KafkaChannel spec: numPartitions: 1 replicationFactor: 1重要namespace 固有のデフォルトを設定すると、クラスター全体の設定が上書きされます。
5.6.4. Knative Kafka チャネルのセキュリティー設定 リンクのコピーリンクがクリップボードにコピーされました!
5.6.4.1. Kafka チャネルの TLS 認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
Transport Layer Security (TLS) は、Apache Kafka クライアントおよびサーバーによって、Knative と Kafka 間のトラフィックを暗号化するため、および認証のために使用されます。TLS は、Knative Kafka のトラフィック暗号化でサポートされている唯一の方法です。
前提条件
- OpenShift Container Platform でクラスターまたは専用の管理者パーミッションを持っている。
-
OpenShift Serverless Operator、Knative Eventing、および
KnativeKafkaCR は、OpenShift Container Platform クラスターにインストールされている。 - OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
-
.pemファイルとして Kafka クラスター CA 証明書が保存されている。 -
Kafka クラスタークライアント証明書とキーが
.pemファイルとして保存されている。 -
OpenShift CLI (
oc) をインストールしている。
手順
選択された namespace にシークレットとして証明書ファイルを作成します。
$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-file=user.crt=certificate.pem \ --from-file=user.key=key.pem重要キー名に
ca.crt、user.crt、およびuser.keyを使用します。これらの値は変更しないでください。KnativeKafkaカスタムリソースの編集を開始します。$ oc edit knativekafkaシークレットおよびシークレットの namespace を参照します。
apiVersion: operator.serverless.openshift.io/v1alpha1 kind: KnativeKafka metadata: namespace: knative-eventing name: knative-kafka spec: channel: authSecretName: <kafka_auth_secret> authSecretNamespace: <kafka_auth_secret_namespace> bootstrapServers: <bootstrap_servers> enabled: true source: enabled: true注記ブートストラップサーバーで一致するポートを指定するようにしてください。
以下に例を示します。
apiVersion: operator.serverless.openshift.io/v1alpha1 kind: KnativeKafka metadata: namespace: knative-eventing name: knative-kafka spec: channel: authSecretName: tls-user authSecretNamespace: kafka bootstrapServers: eventing-kafka-bootstrap.kafka.svc:9094 enabled: true source: enabled: true
5.6.4.2. Kafka チャネルの SASL 認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
Simple Authentication and Security Layer (SASL) は、Apache Kafka が認証に使用します。クラスターで SASL 認証を使用する場合、ユーザーは Kafka クラスターと通信するために Knative に認証情報を提供する必要があります。そうしないと、イベントを生成または消費できません。
前提条件
- OpenShift Container Platform でクラスターまたは専用の管理者パーミッションを持っている。
-
OpenShift Serverless Operator、Knative Eventing、および
KnativeKafkaCR は、OpenShift Container Platform クラスターにインストールされている。 - OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
- Kafka クラスターのユーザー名およびパスワードがある。
-
使用する SASL メカニズムを選択している (例:
PLAIN、SCRAM-SHA-256、またはSCRAM-SHA-512)。 -
TLS が有効にされている場合、Kafka クラスターの
ca.crt証明書ファイルも必要になります。 -
OpenShift CLI (
oc) をインストールしている。
手順
選択された namespace にシークレットとして証明書ファイルを作成します。
$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"-
キー名に
ca.crt、password、およびsasl.mechanismを使用します。これらの値は変更しないでください。 パブリック CA 証明書で SASL を使用する場合は、シークレットの作成時に
ca.crt引数ではなくtls.enabled=trueフラグを使用する必要があります。以下に例を示します。$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-literal=tls.enabled=true \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"
-
キー名に
KnativeKafkaカスタムリソースの編集を開始します。$ oc edit knativekafkaシークレットおよびシークレットの namespace を参照します。
apiVersion: operator.serverless.openshift.io/v1alpha1 kind: KnativeKafka metadata: namespace: knative-eventing name: knative-kafka spec: channel: authSecretName: <kafka_auth_secret> authSecretNamespace: <kafka_auth_secret_namespace> bootstrapServers: <bootstrap_servers> enabled: true source: enabled: true注記ブートストラップサーバーで一致するポートを指定するようにしてください。
以下に例を示します。
apiVersion: operator.serverless.openshift.io/v1alpha1 kind: KnativeKafka metadata: namespace: knative-eventing name: knative-kafka spec: channel: authSecretName: scram-user authSecretNamespace: kafka bootstrapServers: eventing-kafka-bootstrap.kafka.svc:9093 enabled: true source: enabled: true