16.2. 外部データベースのサービスの定義
外部サービスの最も一般的なタイプとして外部データベースを挙げることができます。外部データベースをサポートするには、アプリケーションで以下が必要になります。
- 通信するエンドポイント。
以下を含む認証情報および位置情報 (coordinate)。
- ユーザー名
- パスフレーズ
- データベース名
外部データベースと統合するためのソリューションには、以下が含まれます。
-
Serviceオブジェクト: SaaS プロバイダーを OpenShift Online サービスとして表示します。 -
1 つ以上のサービスの
Endpoint。 - 認証情報を含む適切な Pod の環境変数。
以下の手順は、外部 MySQL データベースとの統合シナリオについて説明しています。
16.2.1. 手順 1: サービスの定義 リンクのコピーリンクがクリップボードにコピーされました!
サービスは、IP アドレスとエンドポイントを指定するか、または完全修飾ドメイン名 (FQDN) を指定し定義することができます。
16.2.1.1. IP アドレスの使用 リンクのコピーリンクがクリップボードにコピーされました!
外部データベースを表す OpenShift Online サービスを作成します。これは内部サービスを作成する場合と同様ですが、サービスの
Selectorフィールドが異なります。内部 OpenShift Online サービスは
Selectorフィールドでラベルを使って Pod をサービスに関連付けます。EndpointsControllerシステムコンポーネントは、セレクターに一致する Pod でセレクターを指定するサービスのエンドポイントを同期します。サービスプロキシー および OpenShift Online ルーター はサービスのエンドポイント間でサービスに対する要求の負荷分散を実行します。外部リソースを表すサービスには関連付けられる Pod が不要です。代わりに、
Selectorフィールドを未設定のままにします。これは外部サービスであることを表します。 これによりEndpointsControllerにこのサービスを無視させ、エンドポイントを手動で指定することができます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次に、サービスの必要なエンドポイントを作成します。これによりサービスプロキシーとルーターに対し、サービスにダイレクトされたトラフィックを送信する場所が指定されます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.2.1.2. 外部ドメイン名の使用 リンクのコピーリンクがクリップボードにコピーされました!
外部ドメイン名を使用すると、外部サービスの IP アドレスの変更について把握しておく必要がないために外部サービスのリンケージを管理するのが容易になります。
ExternalName サービスにはセレクターまたは定義されたポートまたはエンドポイントがないため、ExternalName サービスを使用してトラフィックを外部サービスにダイレクトすることができます。
- 1
selectorフィールドは空白のままにします。
外部ドメイン名サービスを使用すると、システムに対して externalName フィールドの DNS 名 (直前の例では example.domain.name) がサービスをサポートするリソースの場所であることを示します。DNS 要求が Kubernetes DNS サーバーに対してなされる場合、CNAME レコードで externalName を返し、クライアントに対して返された名前を検索して IP アドレスを取得するように指示します。
16.2.2. 手順 2: サービスの消費 リンクのコピーリンクがクリップボードにコピーされました!
サービスおよびエンドポイントが定義されたので、適切なコンテナーの環境変数を設定し、適切な Pod が認証情報にアクセスしてサービスを使用できるようにします。
外部データベースの環境変数
アプリケーションで外部サービスを使用することは内部サービスを使用することに似ています。アプリケーションには、直前の手順で説明されている認証情報と共に、サービスの環境変数と追加の環境変数が割り当てられます。たとえば、MySQL コンテナーは以下の環境変数を受信します。
-
EXTERNAL_MYSQL_SERVICE_SERVICE_HOST=<ip_address> -
EXTERNAL_MYSQL_SERVICE_SERVICE_PORT=<port_number> -
MYSQL_USERNAME=<mysql_username> -
MYSQL_PASSWORD=<mysql_password> -
MYSQL_DATABASE_NAME=<mysql_database>
アプリケーションは環境からサービスの位置情報 (coordinate) および認証情報を読み取り、サービス経由でデータベースとの接続を確立します。