6.2. Camel K 機能トレイト

6.2.1. Knative トレイト

Knative トレイトは Knative リソースのアドレスを自動検出し、実行中のインテグレーションに注入します。

完全な Knative 設定は、JSON 形式の CAMEL_KNATIVE_CONFIGURATION に注入されます。その後、Camel Knative コンポーネントは完全な設定を使用してルートを設定します。

このトレイトは、Knative プロファイルがアクティブであるとデフォルトで有効になります。

このトレイトは、Knative プロファイルで利用できます。

6.2.1.1. 設定

CLI でインテグレーションを実行する際にトレイトプロパティーを指定できます。

$ kamel run --trait knative.[key]=[value] --trait knative.[key2]=[value2] integration.java

以下の設定オプションが利用できます。

プロパティー説明

knative.enabled

bool

トレイトを有効または無効にするのに使用できます。すべてのトレイトがこの共通プロパティーを共有します。

knative.configuration

文字列

Knative の完全な設定を JSON 形式で注入するために使用されます。

knative.channel-sources

[]string

インテグレーションルートのソースとして使用されるチャネルの一覧。簡単なチャネル名または完全な Camel URI を含めることができます。

knative.channel-sinks

[]string

インテグレーションルートの宛先として使用されるチャネルの一覧。簡単なチャネル名または完全な Camel URI を含めることができます。

knative.endpoint-sources

[]string

インテグレーションルートのソースとして使用されるチャネルの一覧。

knative.endpoint-sinks

[]string

インテグレーションルートの宛先として使用されるエンドポイントの一覧。簡単なエンドポイント名または完全な Camel URI を含めることができます。

knative.event-sources

[]string

インテグレーションがサブスクライブされるイベントタイプのリスト。簡単なイベントタイプまたは完全な Camel URI を含めることができます (デフォルト以外の特定のブローカーを使用するため)。

knative.event-sinks

[]string

インテグレーションが生成するイベントタイプのリスト。簡単なイベントタイプまたは完全な Camel URI を含めることができます (特定のブローカーを使用するため)。

knative.filter-source-channels

bool

ヘッダー ce-knativehistory を基にしてイベントのフィルターを有効にします。このヘッダーは新しいバージョンの Knative で削除されたため、フィルターはデフォルトで無効になっています。

knative.sink-binding

bool

Knative SinkBinding リソース経由のインテグレーションからシンクへのバインドを許可します。これは、インテグレーションが単一のシンクをターゲットにする場合に使用できます。インテグレーションが単一のシンクをターゲットにする場合、デフォルトで有効になります (インテグレーションが Knative ソースによって所有されている場合を除く)。

knative.auto

bool

すべてのトレイトプロパティーの自動検出を有効にします。

6.2.2. Knative Service トレイト

Knative Service トレイトは、標準の Kubernetes デプロイメントではなく、Knative サービスとしてインテグレーションを実行する場合に、オプションの設定を可能にします。

Knative Services としてインテグレーションを実行すると、自動スケーリング (およびゼロへのスケーリング) 機能が追加されますが、この機能はルートが HTTP エンドポイントコンシューマーを使用する場合にのみ有用です。

このトレイトは、Knative プロファイルで利用できます。

6.2.2.1. 設定

CLI でインテグレーションを実行する際にトレイトプロパティーを指定できます。

$ kamel run --trait knative-service.[key]=[value] --trait knative-service.[key2]=[value2] Integration.java

以下の設定オプションが利用できます。

プロパティー説明

knative-service.enabled

bool

トレイトを有効または無効にするのに使用できます。すべてのトレイトがこの共通プロパティーを共有します。

knative-service.autoscaling-class

文字列

Knative 自動スケーリングクラスプロパティーを設定します (hpa.autoscaling.knative.dev または kpa.autoscaling.knative.dev の自動スケーリングを設定します)。

詳細は、Knative ドキュメントを参照してください。

knative-service.autoscaling-metric

文字列

Knative 自動スケーリングメトリクスプロパティーを設定します (例: concurrency または cpu ベースの自動スケーリングを設定します)。

詳細は、Knative ドキュメントを参照してください。

knative-service.autoscaling-target

int

各 Pod に許可される同時実行レベルまたは CPU の割合 (自動スケーリングメトリクスによる) を設定します。

詳細は、Knative ドキュメントを参照してください。

knative-service.min-scale

int

インテグレーションに対して稼働している必要がある Pod の最小数。デフォルトは ゼロ であるため、設定された期間に使用されなければインテグレーションはゼロにスケールダウンされます。

詳細は、Knative ドキュメントを参照してください。

knative-service.max-scale

int

インテグレーションで並行して実行できる Pod 数の上限。Knative には、インストールによって異なる独自の上限値があります。

詳細は、Knative ドキュメントを参照してください。

knative-service.auto

bool

以下のすべての条件が保持されると、インテグレーションを Knative サービスとして自動的にデプロイします。

  • インテグレーションは Knative プロファイルを使用する。
  • すべてのルートは、HTTP ベースのコンシューマーまたはパッシブコンシューマーから開始される (例: direct はパッシブコンシューマー)。

6.2.3. Prometheus トレイト

Prometheus トレイトは、Prometheus と互換性のあるエンドポイントを設定します。Prometheus Operator の使用時にエンドポイントを自動的にスクレイプできるように、PodMonitor リソースも作成します。

メトリクスは MicroProfile Metrics を使用して公開されます。

警告

PodMonitor リソースを作成するには、Prometheus Operator のカスタムリソース定義をインストールする必要があります。Prometheus トレイトが Prometheus Operator なしで機能するように、pod-monitorfalse に設定できます。

Prometheus トレイトはデフォルトで無効になっています。

このトレイトは Kubernetes、Knative、および OpenShift プロファイルで利用できます。

6.2.3.1. 設定

CLI でインテグレーションを実行する際にトレイトプロパティーを指定できます。

$ kamel run --trait prometheus.[key]=[value] --trait prometheus.[key2]=[value2] Integration.java

以下の設定オプションが利用できます。

プロパティー説明

prometheus.enabled

bool

トレイトを有効または無効にするのに使用できます。すべてのトレイトがこの共通プロパティーを共有します。

prometheus.pod-monitor

bool

PodMonitor リソースが作成されるかどうか (デフォルトは true)。

prometheus.pod-monitor-labels

[]string

PodMonitor リソースラベル。pod-monitortrue の場合に適用されます。

6.2.4. Pdb トレイト

PDB トレイトを使用すると、インテグレーション Pod の PodDisruptionBudget リソースを設定することができます。

このトレイトは Kubernetes、Knative、および OpenShift プロファイルで利用できます。

6.2.4.1. 設定

CLI でインテグレーションを実行する際にトレイトプロパティーを指定できます。

$ kamel run --trait pdb.[key]=[value] --trait pdb.[key2]=[value2] Integration.java

以下の設定オプションが利用できます。

プロパティー説明

pdb.enabled

bool

トレイトを有効または無効にするのに使用できます。すべてのトレイトがこの共通プロパティーを共有します。

pdb.min-available

文字列

エビクション後も引き続き利用可能である必要があるインテグレーションの Pod 数。絶対数またはパーセンテージのいずれかで指定できます。min-available および max-unavailable のいずれかのみを指定できます。

pdb.max-unavailable

文字列

エビクション後に、利用不可能であっても許容されるインテグレーションの Pod 数。絶対数またはパーセンテージのいずれかで指定できます (min-available も設定されない場合、デフォルトは 1 です)。max-unavailable および min-available のいずれかのみを指定できます。

6.2.5. Pull Secret トレイト

Pull Secret トレイトは Pod にプルシークレットを設定し、Kubernetes が外部レジストリーからコンテナーイメージを取得できるようにします。

プルシークレットは手動で指定するか、IntegrationPlatform で外部コンテナーレジストリーに対する認証を設定している場合には、イメージをプルするのに同じシークレットを使用します。

デフォルトでは、外部コンテナーレジストリーの認証を設定する際に常に有効になっているので、外部レジストリーがプライベートであることを前提としています。

イメージをプルするためにレジストリーで認証が必要ない場合は、この特性を無効にすることができます。

このトレイトは Kubernetes、Knative、および OpenShift プロファイルで利用できます。

6.2.5.1. 設定

CLI でインテグレーションを実行する際にトレイトプロパティーを指定できます。

$ kamel run --trait pull-secret.[key]=[value] --trait pull-secret.[key2]=[value2] Integration.java

以下の設定オプションが利用できます。

プロパティー説明

pull-secret.enabled

bool

トレイトを有効または無効にするのに使用できます。すべてのトレイトがこの共通プロパティーを共有します。

pull-secret.secret-name

文字列

Pod に設定されるプルシークレット名。空のままにすると、自動的に IntegrationPlatform レジストリー設定から取得されます。

pull-secret.image-puller-delegation

bool

共有プラットフォームでグローバル Operator を使用する場合は、Operator namespace 上の system:image-puller クラスターロールの統合サービスアカウントへの委譲が可能になります。

pull-secret.auto

bool

タイプが kubernetes.io/dockerconfigjson の場合、Pod にプラットフォームレジストリーシークレットを自動的に設定します。

6.2.6. Route トレイト

Route トレイトを使用すると、インテグレーションの OpenShift ルートの作成を設定できます。

証明書とキーの内容は、ローカルファイルシステムまたは Openshift secret オブジェクトのいずれかから取得できます。ユーザーは、-secret で終わるパラメーター (例: tls-certificate-secret) を使用して、secret に格納されている証明書を参照できます。-secret で終わるパラメーターの優先順位は高く、同じルートパラメーターが設定されている場合 (例: tls-key-secrettls-key)、tls-key-secret が使用されます。キーと証明書を設定するための推奨されるアプローチは、secrets を使用してコンテンツを格納し、tls-certificate-secrettls-key-secrettls-ca-certificate-secrettls-destination- ca-certificate-secret パラメーターを使用してそれらを参照することです。設定オプションについては、このページの最後にある例のセクションを参照してください。

このトレイトは、OpenShift のプロファイルで利用できます。

6.2.6.1. 設定

CLI でインテグレーションを実行する際にトレイトプロパティーを指定できます。

$ kamel run --trait route.[key]=[value] --trait route.[key2]=[value2] integration.java

以下の設定オプションが利用できます。

プロパティー説明

route.enabled

bool

トレイトを有効または無効にするのに使用できます。すべてのトレイトがこの共通プロパティーを共有します。

route.host

文字列

ルートによって公開されるホストを設定します。

route.tls-termination

文字列

edgepassthrough、または reencrypt などの TLS 終端タイプ。

追加情報については、OpenShift ルートのドキュメントを参照してください。

route.tls-certificate

文字列

TLS 証明書の内容。

追加情報については、OpenShift ルートのドキュメントを参照してください。

route.tls-certificate-secret

文字列

TLS 証明書へのシークレット名とキー参照。形式は secret-name[/key-name] です。値はシークレット名を表します。シークレットにキーが 1 つしかない場合は読み取られます。それ以外の場合は、/ で区切ってキー名を設定できます。

追加情報については、OpenShift ルートのドキュメントを参照してください。

route.tls-key

文字列

TLS 証明書キーの内容。

追加情報については、OpenShift ルートのドキュメントを参照してください。

route.tls-key-secret

文字列

TLS 証明書キーへのシークレット名とキー参照。形式は secret-name[/key-name] です。値はシークレット名を表します。シークレットにキーが 1 つしかない場合は読み取られます。それ以外の場合は、/ で区切ってキー名を設定できます。

追加情報については、OpenShift ルートのドキュメントを参照してください。

route.tls-ca-certificate

文字列

TLS CA 証明書の内容。

追加情報については、OpenShift ルートのドキュメントを参照してください。

route.tls-ca-certificate-secret

文字列

TLS CA 証明書へのシークレット名とキー参照。形式は secret-name[/key-name] です。値はシークレット名を表します。シークレットにキーが 1 つしかない場合は読み取られます。それ以外の場合は、/ で区切ってキー名を設定できます。

追加情報については、OpenShift ルートのドキュメントを参照してください。

route.tls-destination-ca-certificate

文字列

宛先 CA 証明書は、最終宛先の CA 証明書の内容を提供します。reencrypt の停止を使用する場合、ルーターがセキュアな接続のヘルスチェックに使用するためにこのファイルを提供する必要があります。このフィールドが指定されていない場合、ルーターは独自の宛先 CA を提供し、短いサービス名 (service.namespace.svc) を使用してホスト名の検証を実行する可能性があります。これにより、インフラストラクチャーが生成した証明書を自動的に検証できます。

追加情報については、OpenShift ルートのドキュメントを参照してください。

route.tls-destination-ca-certificate-secret

文字列

宛先 CA 証明書へのシークレット名とキー参照。形式は secret-name[/key-name] です。値はシークレット名を表します。シークレットにキーが 1 つしかない場合は読み取られます。それ以外の場合は、/ で区切ってキー名を設定できます。

追加情報については、OpenShift ルートのドキュメントを参照してください。

route.tls-insecure-edge-termination-policy

文字列

セキュアでないトラフィック (AllowDisable、または Redirect トラフィックなど) に対応する方法を設定します。

追加情報については、OpenShift ルートのドキュメントを参照してください。

6.2.6.2. 例

これらの例では、secrets を使用して、統合で参照される証明書とキーを格納します。ルートの詳細については、Openshift ルートのドキュメントをお読みください。PlatformHttpServer.java は統合の例です。

これらの例を実行するための要件として、キーと証明書を含む secret が必要です。

6.2.6.2.1. 自己署名証明書を生成し、シークレットを作成します
openssl genrsa -out tls.key
openssl req -new -key tls.key -out csr.csr -subj "/CN=my-server.com"
openssl x509 -req -in csr.csr -signkey tls.key -out tls.crt
oc create secret tls my-combined-certs --key=tls.key  --cert=tls.crt
6.2.6.2.2. ルートへの HTTP リクエストの作成

すべての例で、次の curl コマンドを使用して HTTP リクエストを作成できます。インラインスクリプトを使用して、openshift 名前空間とクラスターベースドメインを取得します。これらのインラインスクリプトをサポートしないシェルを使用している場合は、インラインスクリプトを実際の名前空間とベースドメインの値に置き換える必要があります。

curl -k https://platform-http-server-`oc config view --minify -o 'jsonpath={..namespace}'`.`oc get dnses/cluster -ojsonpath='{.spec.baseDomain}'`/hello?name=Camel-K
  • シークレットを使用してエッジルートを追加するには、-secret で終わるパラメーターを使用して、証明書を含むシークレット名を設定します。このルート例の特性は、tls.keytls.crt という名前の 2 つのキーを含む my-combined-certs という名前のシークレットを参照しています。

    kamel run --dev PlatformHttpServer.java -t route.tls-termination=edge -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key
  • シークレットを使用してパススルールートを追加するには、統合 Pod で TLS を設定し、実行中の統合 Pod でキーと証明書を表示する必要があります。これを実現するには、--resource kamel パラメーターを使用して統合 Pod にシークレットをマウントします。次に、いくつかの camel quarkus パラメーターを使用して、実行中の Pod でこれらの証明書ファイルを参照します。これらのファイルは、-p quarkus.http.ssl.certificate で始まります。このルート例の特性は、tls.keytls.crt という名前の 2 つのキーを含む my-combined-certs という名前のシークレットを参照しています。

    kamel run --dev PlatformHttpServer.java --resource secret:my-combined-certs@/etc/ssl/my-combined-certs -p quarkus.http.ssl.certificate.file=/etc/ssl/my-combined-certs/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/my-combined-certs/tls.key -t route.tls-termination=passthrough -t container.port=8443
  • シークレットを使用して再暗号化ルートを追加するには、統合 Pod で TLS を設定し、実行中の統合 Pod でキーと証明書を表示する必要があります。これを実現するには、--resource kamel パラメーターを使用して統合 Pod にシークレットをマウントします。次に、いくつかの camel quarkus パラメーターを使用して、実行中の Pod でこれらの証明書ファイルを参照します。これらのファイルは、-p quarkus.http.ssl.certificate で始まります。このルート例の特性は、tls.keytls.crt という名前の 2 つのキーを含む my-combined-certs という名前のシークレットを参照しています。

    kamel run --dev PlatformHttpServer.java --resource secret:my-combined-certs@/etc/ssl/my-combined-certs  -p quarkus.http.ssl.certificate.file=/etc/ssl/my-combined-certs/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/my-combined-certs/tls.key -t route.tls-termination=reencrypt -t route.tls-destination-ca-certificate-secret=my-combined-certs/tls.crt -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key -t container.port=8443
  • ルートのシークレットからの特定の証明書と統合エンドポイントの 証明書を提供する Openshift サービス を使用して、再暗号化ルートを追加します。このように、証明書を提供する Openshift サービスは統合 Pod でのみセットアップされます。キーと証明書は実行中の統合 Pod に表示される必要があります。これを実現するには、--resource kamel パラメーターを使用して統合 Pod にシークレットをマウントし、次にいくつかの camel quarkus パラメーターを使用して実行中の Pod でこれらの証明書ファイルを参照します。-p quarkus.http.ssl.certificate で始まります。このルート例の特性は、tls.keytls.crt という名前の 2 つのキーを含む my-combined-certs という名前のシークレットを参照しています。

    kamel run --dev PlatformHttpServer.java --resource secret:cert-from-openshift@/etc/ssl/cert-from-openshift  -p quarkus.http.ssl.certificate.file=/etc/ssl/cert-from-openshift/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/cert-from-openshift/tls.key -t route.tls-termination=reencrypt -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key -t container.port=8443

    次に、統合サービスにアノテーションを付けて、証明書を提供する Openshift サービスを注入する必要があります

    oc annotate service platform-http-server service.beta.openshift.io/serving-cert-secret-name=cert-from-openshift
  • ローカルファイルシステムから提供された証明書と秘密鍵を使用してエッジルートを追加します。この例では、インラインスクリプトを使用して証明書と秘密鍵ファイルの内容を読み取り、すべての改行文字を削除します (これは、証明書をパラメーターの値として設定するために必要です)。したがって、値は 1 行になります。

    kamel run PlatformHttpServer.java --dev -t route.tls-termination=edge -t route.tls-certificate="$(cat tls.crt|awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}')" -t route.tls-key="$(cat tls.key|awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}')"

6.2.7. Service トレイト

サービストレイトは、Service リソースとのインテグレーションを公開し、同じ namespace の他のアプリケーション (またはインテグレーション) からアクセスできるようにします。

インテグレーションが HTTP エンドポイントを公開できる Camel コンポーネントに依存する場合は、デフォルトで有効になっています。

このトレイトは Kubernetes および OpenShift プロファイルで利用できます。

6.2.7.1. 設定

CLI でインテグレーションを実行する際にトレイトプロパティーを指定できます。

$ kamel run --trait service.[key]=[value] --trait service.[key2]=[value2] Integration.java

以下の設定オプションが利用できます。

プロパティー説明

service.enabled

bool

トレイトを有効または無効にするのに使用できます。すべてのトレイトがこの共通プロパティーを共有します。

service.auto

bool

サービスを作成する必要がある場合にコードから自動検出されます。

service.node-port

bool

Service を NodePort として公開できるようにします (デフォルトは false)。