16.3. 外部 SaaS プロバイダー
外部サービスの一般的なタイプは外部 SaaS エンドポイントです。外部 SaaS プロバイダーをサポートするために、アプリケーションには以下が必要になります。
- 通信に使用するエンドポイント
以下を含む認証情報のセット
- API キー
- ユーザー名
- パスフレーズ
以下の手順は、外部 SaaS プロバイダーとの統合シナリオについて説明しています。
16.3.1. IP アドレスおよびエンドポイントの使用
外部サービスを表す OpenShift Online サービスを作成します。これは内部サービスを作成することと同様ですが、サービスの
Selector
フィールドが異なります。内部 OpenShift Online サービスは
Selector
フィールドでラベルを使って Pod をサービスに関連付けます。EndpointsController
というシステムコンポーネントは、セレクターに一致する Pod でセレクターを指定するサービスのエンドポイントを同期します。サービスプロキシー および OpenShift Online ルーター はサービスのエンドポイント間でサービスに対する要求の負荷分散を実行します。外部リソースを表すサービスは関連付けられる Pod が不要です。代わりに、
Selector
フィールドを未設定のままにします。これによりEndpointsController
にこのサービスを無視させ、エンドポイントを手動で指定することができます。kind: "Service" apiVersion: "v1" metadata: name: "example-external-service" spec: ports: - name: "mysql" protocol: "TCP" port: 3306 targetPort: 3306 1 nodePort: 0 selector: {} 2
次に、サービスプロキシーおよびルーターにダイレクトされたトラフィックの送信先についての情報が含まれるサービスのエンドポイントを作成します。
kind: "Endpoints" apiVersion: "v1" metadata: name: "example-external-service" 1 subsets: 2 - addresses: - ip: "10.10.1.1" ports: - name: "mysql" port: 3306
サービスおよびエンドポイントが定義されたので、適切なコンテナーの環境変数を設定し、Pod にサービスを使用するための認証情報を付与します。
kind: "DeploymentConfig" apiVersion: "v1" metadata: name: "my-app-deployment" spec: 1 strategy: type: "Rolling" rollingParams: timeoutSeconds: 120 replicas: 1 selector: name: "frontend" template: metadata: labels: name: "frontend" spec: containers: - name: "helloworld" image: "openshift/openshift/origin-ruby-sample" ports: - containerPort: 3306 protocol: "TCP" env: - name: "SAAS_API_KEY" 2 value: "<SaaS service API key>" - name: "SAAS_USERNAME" 3 value: "<SaaS service user>" - name: "SAAS_PASSPHRASE" 4 value: "<SaaS service passphrase>"
これらの変数は環境変数としてコンテナーに追加されます。環境変数を使用することによりサービス間の通信が許可されます。 これには API キーやユーザー名およびパスワード認証または証明書が必要になる場合とそうでない場合があります。
外部 SaaS プロバイダーの環境変数
内部サービスを作成する場合と同様に、アプリケーションには、直前の手順で説明されている認証情報と共に、サービスの環境変数と追加の環境変数が割り当てられます。直前の例では、コンテナーは以下の環境変数を受信します。
-
EXAMPLE_EXTERNAL_SERVICE_SERVICE_HOST=<ip_address>
-
EXAMPLE_EXTERNAL_SERVICE_SERVICE_PORT=<port_number>
-
SAAS_API_KEY=<saas_api_key>
-
SAAS_USERNAME=<saas_username>
-
SAAS_PASSPHRASE=<saas_passphrase>
アプリケーションは環境からサービスの位置情報 (coordinate) および認証情報を読み取り、サービス経由でデータベースとの接続を確立します。
16.3.2. 外部ドメイン名の使用
ExternalName
サービスにはセレクターや、定義されたポートまたはエンドポイントがありません。ExternalName
サービスを使用して、クラスター内にない外部サービスに、トラフィックを割り当てることができます。
kind: "Service"
apiVersion: "v1"
metadata:
name: "external-mysql-service"
spec:
type: ExternalName
externalName: example.domain.name
selector: {} 1
- 1
selector
フィールドは空白のままにします。
ExternalName
サービスを使用してサービスを externalName
フィールドの値 (直前の例では example.domain.name
) にマップします。 これは CNAME レコードを挿入し、サービス名を外部 DNS アドレスに直接マップするので、エンドポイントのレコードは必要ありません。