17.2. 外部データベースのサービスの定義
外部サービスの最も一般的なタイプとして外部データベースを挙げることができます。外部データベースをサポートするには、アプリケーションで以下が必要になります。
- 通信するエンドポイント。
以下を含む認証情報および位置情報 (coordinate)。
- ユーザー名
- パスフレーズ
- データベース名
外部データベースと統合するためのソリューションには、以下が含まれます。
-
Service
オブジェクト: SaaS プロバイダーを OpenShift Container Platform サービスとして表示します。 -
1 つ以上のサービスの
Endpoint
。 - 認証情報を含む適切な Pod の環境変数。
以下の手順は、外部 MySQL データベースとの統合シナリオについて説明しています。
17.2.1. 手順 1: サービスの定義
サービスは、IP アドレスとエンドポイントを指定するか、または完全修飾ドメイン名 (FQDN) を指定し定義することができます。
17.2.1.1. IP アドレスの使用
外部データベースを表す OpenShift Container Platform サービス を作成します。これは内部サービスを作成する場合と同様ですが、サービスの
Selector
フィールドが異なります。内部 OpenShift Container Platform サービスは
Selector
フィールドで ラベル を使って Pod をサービスに関連付けます。EndpointsController
システムコンポーネントは、セレクターに一致する Pod でセレクターを指定するサービスのエンドポイントを同期します。サービスプロキシー および OpenShift Container Platform ルーター はサービスのエンドポイント間でサービスに対する要求の負荷分散を実行します。外部リソースを表すサービスには関連付けられる Pod が不要です。代わりに、
Selector
フィールドを未設定のままにします。これは外部サービスであることを表します。 これによりEndpointsController
にこのサービスを無視させ、エンドポイントを手動で指定することができます。kind: "Service" apiVersion: "v1" metadata: name: "external-mysql-service" spec: ports: - name: "mysql" protocol: "TCP" port: 3306 targetPort: 3306 1 nodePort: 0 selector: {} 2
次に、サービスの必要なエンドポイントを作成します。これによりサービスプロキシーとルーターに対し、サービスにダイレクトされたトラフィックを送信する場所が指定されます。
kind: "Endpoints" apiVersion: "v1" metadata: name: "external-mysql-service" 1 subsets: 2 - addresses: - ip: "10.0.0.0" 3 ports: - port: 3306 4 name: "mysql"
17.2.1.2. 外部ドメイン名の使用
外部ドメイン名を使用すると、外部サービスの IP アドレスの変更について把握しておく必要がないために外部サービスのリンケージを管理するのが容易になります。
ExternalName
サービスにはセレクターまたは定義されたポートまたはエンドポイントがないため、ExternalName
サービスを使用してトラフィックを外部サービスにダイレクトすることができます。
kind: "Service"
apiVersion: "v1"
metadata:
name: "external-mysql-service"
spec:
type: ExternalName
externalName: example.domain.name
selector: {} 1
- 1
selector
フィールドは空白のままにします。
外部ドメイン名サービスを使用すると、システムに対して externalName
フィールドの DNS 名 (直前の例では example.domain.name
) がサービスをサポートするリソースの場所であることを示します。DNS 要求が Kubernetes DNS サーバーに対してなされる場合、CNAME レコードで externalName
を返し、クライアントに対して返された名前を検索して IP アドレスを取得するように指示します。