This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.5.8. サービスバインディング Operator を使用したワークロードのバインド
アプリケーション開発者は、バインディングシークレットを使用して、ワークロードを 1 つまたは複数のバッキングサービスにバインドする必要があります。このシークレットは、ワークロードによって使用される情報を保存するために生成されます。
たとえば、接続するサービスがすでにバインディングデータを公開しているとします。この場合、ServiceBinding カスタムリソース (CR) と共に、使用されるワークロードの必要になります。この ServiceBinding CR を使用することで、ワークロードはバインドするサービスの詳細と共にバインディング要求を送信します。
ServiceBinding CR の例
上記の例で示されるように、ConfigMap または Secret 自体を、バインディングデータのソースとして使用されるサービスリソースとして直接使用することもできます。
5.8.1. 命名ストラテジー リンクのコピーリンクがクリップボードにコピーされました!
命名ストラテジーは、binding.operators.coreos.com API グループでのみ利用できます。
命名ストラテジーは Go テンプレートを使用して、サービスバインディングリクエストでカスタムバインディング名を定義するのに役立ちます。命名ストラテジーは、ServiceBinding カスタムリソース (CR) のマッピングを含むすべての属性に適用されます。
バッキングサービスは、バインディング名をファイルまたは環境変数としてワークロードに反映します。ワークロードが特定の形式で反映されるバインディング名を要求し、バッキングサービスから反映されるバインディング名がその形式で利用できない場合、命名ストラテジーを使用してバインディング名を変更できます。
定義済みの後処理関数
命名ストラテジーを使用する一方、ワークロードの要求や要件によっては、任意の組み合わせで以下の定義済みの後処理関数を使用して、文字列を変換できます。
-
upper: 文字列を大文字に変換します。 -
lower: 文字列を小文字に変換します。 -
title: 特定の一部の語句を除いて、各語句の最初の文字が大文字になるように文字列を変換します。
事前に定義された命名ストラテジー
アノテーションで宣言されたバインディング名は、以下の事前に定義された命名ストラテジーに従って、ワークロードへの反映前に名前の変更に対して処理されます。
none: これが適用されると、バインディング名は変更されません。例
テンプレートのコンパイル後、バインディング名は
{{ .name }}の形式を取ります。host: hippo-pgbouncer port: 5432
host: hippo-pgbouncer port: 5432Copy to Clipboard Copied! Toggle word wrap Toggle overflow upper:namingStrategyが定義されていない場合に適用されます。これが適用されると、バインディング名キーのすべての文字列を大文字に変換します。例
テンプレートのコンパイル後、バインディング名は
{{ .service.kind | upper}}_{{ .name | upper }}の形式を取ります。DATABASE_HOST: hippo-pgbouncer DATABASE_PORT: 5432
DATABASE_HOST: hippo-pgbouncer DATABASE_PORT: 5432Copy to Clipboard Copied! Toggle word wrap Toggle overflow ワークロードが別の形式を要求する場合は、カスタム命名ストラテジーを定義し、接頭辞とセパレーターを使用してバインディング名を変更できます (例:
PORT_DATABASE)。
-
バインディング名がファイルとして反映される場合、デフォルトでは、事前定義された
none命名ストラテジーが適用され、バインディング名は変更されません。 -
バインディング名が環境変数として反映され、
namingStrategyが定義されていない場合には、デフォルトでは事前定義されたuppercase命名ストラテジーが適用されます。 - カスタムバインディング名と事前定義済みの後処理関数の別の組み合わせを使用して、カスタム命名ストラテジーを定義することで、事前に定義された命名ストラテジーを上書きできます。
5.8.2. 高度なバインディングオプション リンクのコピーリンクがクリップボードにコピーされました!
高度なバインディングオプションは、binding.operators.coreos.com API グループでのみ利用できます。
5.8.2.1. ワークロードへの反映前のバインディング名の変更 リンクのコピーリンクがクリップボードにコピーされました!
ServiceBinding カスタムリソース (CR) の .spec.namingStrategy 属性で、バインディング名を変更するルールを指定できます。たとえば、PostgreSQL データベースに接続する Spring PetClinic サンプルアプリケーションについて考えてみましょう。この場合、PostgreSQL データベースサービスは、バインディングに使用するデータベースのホストおよびポートフィールドを公開します。Spring PetClinic サンプルアプリケーションは、バインディング名を使用してこの公開されたバインディングデータにアクセスできます。
例:ServiceBinding CR の Spring PetClinic サンプルアプリケーション
例:ServiceBinding CR の PostgreSQL データベースサービス
namingStrategy が定義されておらず、バインディング名が環境変数として反映される場合、バッキングサービスの host: hippo-pgbouncer 値および反映される環境変数は以下の例のように表示されます。
例
DATABASE_HOST: hippo-pgbouncer
DATABASE_HOST: hippo-pgbouncer
ここでは、以下のようになります。
|
|
|
|
| バインディング名を指定します。 |
POSTGRESQL_{{ .service.kind | upper }}_{{ .name | upper }}_ENV 命名ストラテジーを適用すると、サービスバインディングリクエストで準備したカスタムバインディング名の一覧が以下の例のように表示されます。
例
POSTGRESQL_DATABASE_HOST_ENV: hippo-pgbouncer POSTGRESQL_DATABASE_PORT_ENV: 5432
POSTGRESQL_DATABASE_HOST_ENV: hippo-pgbouncer
POSTGRESQL_DATABASE_PORT_ENV: 5432
以下の項目は、POSTGRESQL_{{ .service.kind | upper }}_{{ .name | upper }}_ENV 命名ストラテジーで定義される表現について説明しています。
-
.name: バッキングサービスが公開するバインディング名を参照します。上記の例では、バインディング名はHOSTおよびPORTです。 -
.service.kind: バインディング名が命名ストラテジーで変更されるサービスリソースの種類を参照します。 -
upper: Go テンプレート文字列をコンパイルする際に文字列を後処理するために使用する文字列関数。 -
POSTGRESQL: カスタムバインディング名の接頭辞。 -
ENV: カスタムバインディング名の接尾辞。
前述の例と同様に、namingStrategy で文字列テンプレートを定義し、バインディング名のそれぞれのキーがサービスバインディングリクエストによってどのように準備されるかを定義できます。
5.8.2.2. カスタムバインディングデータの作成 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーション開発者は、以下の状況でカスタムバインディングデータを作成できます。
- バッキングサービスがバインディングデータを公開しない。
- 公開される値が、ワークロードによって要求される形式では利用できません。
たとえば、バッキングサービス CR がホスト、ポート、およびデータベースユーザーをバインディングデータとして公開するが、ワークロードはバインディングデータを接続文字列として使用することを要求するケースを考えてみます。バッキングサービスを表す Kubernetes リソースの属性を使用して、カスタムバインディングデータを作成できます。
例
5.8.3. PodSpec に準拠していないセカンダリーワークロードのバインド リンクのコピーリンクがクリップボードにコピーされました!
サービスバインディングの一般的なシナリオでは、バッキングサービス、ワークロード (デプロイメント)、およびサービスバインディング Operator を設定する必要があります。PodSpec に準拠しておらず、プライマリーワークロード (デプロイメント) とサービスバインディング Operator の間にあるセカンダリーワークロード (アプリケーション Operator の場合もあります) が関与するシナリオについて考えてみます。
このようなセカンダリーワークロードリソースの場合、コンテナーパスのロケーションは任意です。サービスバインディングの場合、CR のセカンダリーワークロードが PodSpec に準拠していない場合、コンテナーパスのロケーションを指定する必要があります。これにより、バインディングデータがServiceBinding カスタムリソース (CR) のセカンダリーワークロードで指定されたコンテナーパスに反映されます (たとえば、Pod 内にバインディングデータを配置したくない場合)。
サービスバインディング Operator により、コンテナーのパスまたはシークレットパスの場所の値を設定し、これらのパスをカスタムロケーションにバインドすることができます。このオプションは、バインディングデータが環境変数として反映される場合に、binding.operators.coreos.com API グループでのみ利用できます。
5.8.3.1. コンテナーパスのカスタムロケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
PodSpec に準拠しておらず、spec.containers パスに置かれているコンテナーを持つセカンダリーワークロード CR について考えてみます。
例: セカンダリーワークロード CR
手順
ServiceBindingCR で値を指定してspec.containersパスを設定し、このパスをspec.application.bindingPath.containersPathカスタムロケーションにバインドします。例:
ServiceBindingCR とカスタムロケーションのspec.containersパスCopy to Clipboard Copied! Toggle word wrap Toggle overflow
コンテナーパスのロケーションを指定した後に、サービスバインディング Operator はバインディングデータを生成します。これは、ServiceBinding CR のセカンダリーワークロードで指定されるコンテナーパスで利用できます。
以下の例は、 envFromフィールドとsecretRefフィールドを持つspec.containersパスを示しています。
例:envFrom および secretRef フィールドのあるセカンダリーワークロード CR
5.8.3.2. シークレットパスのカスタムロケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
PodSpec に準拠しておらず、spec.secret パスに置かれているシークレットのみを持つセカンダリーワークロード CR を考えてみます。
例: セカンダリーワークロード CR
手順
ServiceBindingCR で値を指定してspec.secretパスを設定し、このパスをspec.application.bindingPath.secretPathカスタムロケーションにバインドします。例:
ServiceBindingCR とカスタムロケーションのspec.secretパスCopy to Clipboard Copied! Toggle word wrap Toggle overflow
シークレットパスのロケーションを指定した後に、サービスバインディング Operator はバインディングデータを生成します。これは、ServiceBinding CR のセカンダリーワークロードで指定されるシークレットパスで利用できます。
以下の例は、binding-request 値による spec.secret パスを示しています。
例:binding-request 値が設定されたセカンダリーワークロード CR
- 1
- サービスバインディング Operator によって生成される
Secretリソースの一意の名前。
5.8.4. バッキングサービスからのワークロードのバインド解除 リンクのコピーリンクがクリップボードにコピーされました!
oc ツールを使用して、バッキングサービスからワークロードのバインドを解除できます。
バッキングサービスからワークロードのバインドを解除するには、これにリンクされている
ServiceBindingカスタムリソース (CR) を削除します。oc delete ServiceBinding <.metadata.name>
$ oc delete ServiceBinding <.metadata.name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例
oc delete ServiceBinding spring-petclinic-pgcluster
$ oc delete ServiceBinding spring-petclinic-pgclusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
spring-petclinic-pgclusterServiceBindingCR の名前を指定します。