6.7. バインディングデータのプロジェクション


本セクションでは、バインディングデータを使用する方法について説明します。

6.7.1. バインディングデータの使用

バッキングサービスがバインディングデータを公開した後、ワークロードがこのデータにアクセスして消費するには、バッキングサービスからワークロードにデータをプロジェクションする必要があります。サービスバインディング Operator は、以下のいずれかの方法でデータセットをワークロードに自動的にプロジェクションします。

  1. ファイルとして (デフォルト)。
  2. 環境変数として。(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

1
ルートディレクトリー。
2 5
バインディングデータを保存するディレクトリー。
3
対応するディレクトリーにプロジェクションされるバインディングデータのタイプを識別する必須の ID。
4
オプション: アプリケーションが接続できるバッキングサービスのタイプを識別できるように、プロバイダーを識別するための ID。

バインディングデータを環境変数として使用するには、環境変数の読み取りに使用できる任意のプログラミング言語の組み込み言語機能を使用します。

例: 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. バインディングデータをファイルとしてプロジェクションするための最終パスの計算

以下の表は、ファイルが指定のディレクトリーにマウントされるときに、バインディクデータプロジェクションの最終パスを計算する方法に関する設定をまとめています。

表6.5 最終パスの計算の概要
SERVICE_BINDING_ROOT最終パス

利用不可

/bindings/<ServiceBinding_ResourceName>

dir/path/root

dir/path/root/<ServiceBinding_ResourceName>

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. バインディングデータのプロジェクション

ワークロード要件および環境に応じて、ファイルまたは環境変数としてバインディングデータをプロジェクションすることができます。

前提条件

  • 以下の概念について理解しておく。

    • ワークロードの環境および要件、指定のサービスと連携する方法。
    • ワークロードリソースでのバインディングデータ消費量。
    • デフォルトの方法でデータプロジェクションの最終パスを計算する方法の設定。
  • バインディングデータがバッキングサービスから公開されている。

手順

  1. ファイルとしてバインディングデータをプロジェクションするには、既存の SERVICE_BINDING_ROOT 環境変数がワークロードが実行されるコンテナーで存在することを確認して、宛先フォルダーを決定します。
  2. バインドデータを環境変数としてプロジェクションするには、カスタムリソース (CR) の ServiceBinding リソースから、 .spec.bindAsFiles パラメーターの値を false に設定します。

6.7.4. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.