OpenShift内のPodから外部サービスにアクセスする

こんにちは。平田です。

OpenShift内のPodから別のPodに対してServiceリソースの名前でアクセスします。OpenShiftクラスタの外で動くシステム(データベース、SaaSなど)についても、対応するServiceを定義することで同じようにアクセスできるようになります。

今回は、OpenShift内に立てたphpMyAdminから社内で稼働中のMySQLサーバに接続してみます。

外部サービスの統合については、開発者向けガイドのIntegrating External Servicesに書かれています。要約すると以下のようになるでしょうか。

  • selector未指定のServiceリソースを作成する(通常はselectorを指定して当該Podと結びつく)。
  • 外部サービスのIPを指定したEndpointsリソースを作成する。
    • 外部サービスがFQDNでアクセスできる場合は不要。Serviceの定義の仕方が変わる。

Pod内のアプリケーションからIPやFQDNに対して直接アクセスできますが、ServiceにしておけばIPやFQDNが変わったり、外部サービスをOpenShift上に移行した場合にServiceの定義を変更するだけで済みます。

では、外部サービス(社内のMySQLサーバ)に対応するServiceを定義してみます。

  1. プロジェクトを作る。
    oc new-project external-service-poc
  2.  Serviceを作成する。
    1. Serviceを定義するYAMLファイルを作成する。
      # db-service.yml
      kind: "Service"
      apiVersion: "v1"
      metadata:
        name: "db-service"
      spec:
        ports:
          - name: "mysql"
            protocol: "TCP"
            port: 3306
            targetPort: 3306
            nodePort: 0
      selector: {}
    2. Serviceを作成する。
      oc create -f db-service.yml
  3. Endpointsを作成する。
    1. Endpointsを定義するYAMLファイルを作成する。
      # db-endpoints.yml
      kind: "Endpoints"
      apiVersion: "v1"
      metadata:
        # Serviceと同じ名前を指定する。
        name: "db-service"
      subsets:
        - addresses:
            - ip: "192.168.100.50"
          ports:
            - name: "mysql"
              port: 3306
    2. Endpointsを作成する。
      oc create -f db-endpoints.yml
  4. phpMyAdminを起動する。
    oc new-app phpmyadmin/phpmyadmin PMA_ARBITRARY=1
    oc expose svc/phpmyadmin
    

  5. phpMyAdminから外部のMySQLにアクセスする。
    サーバ(MySQLサーバのホスト名)にはService名を指定する。
    phpMyAdminのダッシュボードが開く。

OpenShiftクラスタ内のphpMyAdminから、外部のMySQLにアクセスできました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です