6.7. バインディングデータのプロジェクション
本セクションでは、バインディングデータを使用する方法について説明します。
6.7.1. バインディングデータの使用
バッキングサービスがバインディングデータを公開した後、ワークロードがこのデータにアクセスして消費するには、バッキングサービスからワークロードにデータをプロジェクションする必要があります。サービスバインディング Operator は、以下のいずれかの方法でデータセットをワークロードに自動的にプロジェクションします。
- ファイルとして (デフォルト)。
-
環境変数として。(
ServiceBinding
リソースから.spec.bindAsFiles
パラメーターを設定した後)。
6.7.2. ワークロードコンテナー内にバインディングデータをプロジェうションするディレクトリーパスの設定
デフォルトでは、サービスバインディング Operator は、バインディングデータをファイルとしてワークロードリソースの特定のディレクトリーにマウントします。ワークロードが実行されるコンテナーで設定された SERVICE_BINDING_ROOT
環境変数を使用してディレクトリーパスを設定できます。
例: ファイルとしてマウントされるバインディングデータ
$SERVICE_BINDING_ROOT 1 ├── account-database 2 │ ├── type 3 │ ├── provider 4 │ ├── uri │ ├── username │ └── password └── transaction-event-stream 5 ├── type ├── connection-count ├── uri ├── certificates └── private-key
バインディングデータを環境変数として使用するには、環境変数の読み取りに使用できる任意のプログラミング言語の組み込み言語機能を使用します。
例: Python クライアントの使用
import os username = os.getenv("USERNAME") password = os.getenv("PASSWORD")
バインディングデータのディレクトリー名を使用してバインディングデータを検索する場合
Service Binding Operator は、ServiceBinding
リソース名 (.metadata.name
) をバインディングデータディレクトリー名として使用します。この仕様は、.spec.name
フィールドを介してその名前をオーバーライドする方法も提供します。その結果、namespace に複数の ServiceBinding
リソースがある場合、バインディングデータ名の競合が発生する可能性があります。ただし、Kubernetes でのボリュームマウントの性質上、バインディングデータディレクトリーには シークレット
リソースの 1 つのみからの値が含まれます。
6.7.2.1. バインディングデータをファイルとしてプロジェクションするための最終パスの計算
以下の表は、ファイルが指定のディレクトリーにマウントされるときに、バインディクデータプロジェクションの最終パスを計算する方法に関する設定をまとめています。
SERVICE_BINDING_ROOT | 最終パス |
---|---|
利用不可 |
|
|
|
1 つ前の表の <ServiceBinding_ResourceName>
エントリーは、カスタムリソース (CR) の . metadata.name
セクションで設定する ServiceBinding
リソースの名前を指定します。
デフォルトでは、展開されたファイルのアクセス許可は 0644 に設定されています。Service Binding Operator は、サービスが 0600
などの特定権限を想定する場合に問題を引き起こす Kubernetes のバグにより、特定の権限を設定できません。回避策として、ワークロードリソース内で実行されているプログラムまたはアプリケーションのコードを変更して、ファイルを /tmp
ディレクトリーにコピーし、適切な権限を設定することができます。
既存の SERVICE_BINDING_ROOT
環境変数内のバインディングデータにアクセスして使用するには、環境変数を読み取れる任意のプログラミング言語の組み込み言語機能を使用します。
例: Python クライアントの使用
from pyservicebinding import binding try: sb = binding.ServiceBinding() except binding.ServiceBindingRootMissingError as msg: # log the error message and retry/exit print("SERVICE_BINDING_ROOT env var not set") sb = binding.ServiceBinding() bindings_list = sb.bindings("postgresql")
直前の例では、bindings_list
変数には、postgresql
データベースサービスタイプのバインディングデータが含まれます。
6.7.3. バインディングデータのプロジェクション
ワークロード要件および環境に応じて、ファイルまたは環境変数としてバインディングデータをプロジェクションすることができます。
前提条件
以下の概念について理解しておく。
- ワークロードの環境および要件、指定のサービスと連携する方法。
- ワークロードリソースでのバインディングデータ消費量。
- デフォルトの方法でデータプロジェクションの最終パスを計算する方法の設定。
- バインディングデータがバッキングサービスから公開されている。
手順
-
ファイルとしてバインディングデータをプロジェクションするには、既存の
SERVICE_BINDING_ROOT
環境変数がワークロードが実行されるコンテナーで存在することを確認して、宛先フォルダーを決定します。 -
バインドデータを環境変数としてプロジェクションするには、カスタムリソース (CR) の
ServiceBinding
リソースから、.spec.bindAsFiles
パラメーターの値をfalse
に設定します。