こんにちは。平田です。
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を定義してみます。
- プロジェクトを作る。
oc new-project external-service-poc
- Serviceを作成する。
- 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: {}
- Serviceを作成する。
oc create -f db-service.yml
- Serviceを定義するYAMLファイルを作成する。
- Endpointsを作成する。
- 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
- Endpointsを作成する。
oc create -f db-endpoints.yml
- Endpointsを定義するYAMLファイルを作成する。
- phpMyAdminを起動する。
oc new-app phpmyadmin/phpmyadmin PMA_ARBITRARY=1 oc expose svc/phpmyadmin
- phpMyAdminから外部のMySQLにアクセスする。
サーバ(MySQLサーバのホスト名)にはService名を指定する。
phpMyAdminのダッシュボードが開く。
OpenShiftクラスタ内のphpMyAdminから、外部のMySQLにアクセスできました。