Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

17.3. 外部 SaaS プロバイダー

外部サービスの一般的なタイプは外部 SaaS エンドポイントです。外部 SaaS プロバイダーをサポートするために、アプリケーションには以下が必要になります。

  1. 通信に使用するエンドポイント
  2. 以下を含む認証情報のセット

    1. API キー
    2. ユーザー名
    3. パスフレーズ

以下の手順は、外部 SaaS プロバイダーとの統合シナリオについて説明しています。

17.3.1. IP アドレスおよびエンドポイントの使用

  1. 外部サービスを表す OpenShift Container Platform サービスを作成します。これは内部サービスを作成することと同様ですが、サービスの Selector フィールドが異なります。

    内部 OpenShift Container Platform サービスは Selector フィールドでラベルを使って Pod をサービスに関連付けます。EndpointsController というシステムコンポーネントは、セレクターに一致する Pod でセレクターを指定するサービスのエンドポイントを同期します。サービスプロキシー および OpenShift Container Platform ルーターは、サービスのエンドポイント間でサービスに対する要求の負荷分散を実行します。

    外部リソースを表すサービスは関連付けられる 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
    1
    オプション: サービスによる接続の転送先となるバッキング Pod のポートです。
    2
    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
    1
    Service インスタンスの名前です。
    2
    サービスへのトラフィックはここで指定される subsets 間で負荷分散されます。
  3. サービスおよびエンドポイントが定義されたので、適切なコンテナーの環境変数を設定し、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>"
    1
    DeploymentConfig の他のフィールドは省略されます。
    2
    SAAS_API_KEY: サービスで使用する API キーです。
    3
    SAAS_USERNAME: サービスで使用するユーザー名です。
    4
    SAAS_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) および認証情報を読み取り、サービス経由でデータベースとの接続を確立します。