OpenShift Origin (OKD) 3.10 : 外部からのアクセスを許可する2018/08/22 |
OpenShift クラスター内のアプリケーションへ、外部からアクセスできるよう設定します。
HTTP や HTTPS アクセスであれば、Router
で対応可能です。
当例では以下のような環境を例に OpenShift クラスターを構成しています。
-----------+-----------------------------+-----------------------------+------------ |10.0.0.25 |10.0.0.51 |10.0.0.52 +----------+-----------+ +----------+-----------+ +----------+-----------+ | [ ctrl.srv.world ] | | [ node01.srv.world ] | | [ node02.srv.world ] | | (Master Node) | | (Compute Node) | | (Compute Node) | | (Infra Node) | | | | | | (Compute Node) | | | | | +----------------------+ +----------------------+ +----------------------+ |
[1] | |
[2] | Master ノードの設定を変更します。 |
# 135行目:必要に応じて自身の環境の外部ネットワーク範囲に変更
externalIPNetworkCIDRs:
- 10.0.0.0/24
[origin@ctrl ~]$ |
[3] | 任意のユーザーでアプリケーションをデプロイし、外部からのアクセス許可の設定をします。 |
[cent@ctrl ~]$ oc whoami cent [cent@ctrl ~]$ oc get project NAME DISPLAY NAME STATUS test-project Active # [nodejs-ex] デプロイ [cent@ctrl ~]$ oc new-app https://github.com/openshift/nodejs-ex --> Found image 3e763e7 (5 weeks old) in image stream "openshift/nodejs" under tag "8" for "nodejs" Node.js 8 --------- Node.js 8 available as container is a base platform for building and running various Node.js 8 applications and frameworks. Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. Tags: builder, nodejs, nodejs8 * The source repository appears to match: nodejs * A source build using source code from https://github.com/openshift/nodejs-ex will be created * The resulting image will be pushed to image stream "nodejs-ex:latest" * Use 'start-build' to trigger a new build * This image will be deployed in deployment config "nodejs-ex" * Port 8080/tcp will be load balanced by service "nodejs-ex" * Other containers can access this service through the hostname "nodejs-ex" --> Creating resources ... imagestream "nodejs-ex" created buildconfig "nodejs-ex" created deploymentconfig "nodejs-ex" created service "nodejs-ex" created --> Success Build scheduled, use 'oc logs -f bc/nodejs-ex' to track its progress. Application is not exposed. You can expose services to the outside world by executing one or more of the commands below: 'oc expose svc/nodejs-ex' Run 'oc status' to view your app. # しばらくすると Pod が稼働状態となる [cent@ctrl ~]$ oc get pods NAME READY STATUS RESTARTS AGE nodejs-ex-1-58p8c 1/1 Running 0 49s nodejs-ex-1-build 0/1 Completed 0 1m # クラスターIP 確認 [cent@ctrl ~]$ oc get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nodejs-ex ClusterIP 172.30.37.224 <none> 8080/TCP 1m # 内部アクセスして確認 [cent@ctrl ~]$ curl 172.30.37.224:8080 <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>Welcome to OpenShift</title> ..... ..... </section> </body> </html> # サービスを外部に公開 [cent@ctrl ~]$ oc expose service nodejs-ex route "nodejs-ex" exposed # アクセスパス確認 [cent@ctrl ~]$ oc get routes NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD nodejs-ex nodejs-ex-test-project.apps.srv.world nodejs-ex 8080-tcp None # 外部公開を中止する場合はルートを削除すればよい [cent@ctrl ~]$ oc delete routes nodejs-ex route "nodejs-ex" deleted |
[4] | 確認したアクセスパスのホスト名が名前解決可能な任意のクライアントから Web アクセスし、アプリケーションが応答するか確認します。 |
[5] |
名前解決についての補足です。
当例では、Openshift デフォルト
サブドメインは、クラスター構成時に YML ファイルで指定した [apps.srv.world] としており、別ホストで稼働する
BIND のゾーンに以下のような別名を定義することで、[apps.srv.world] の頭にどのような文字列がきても Openshift Router
が稼働する Master ホストへアクセスさせるようにしています。
外部アクセスの場合や、クラスター内部アクセスでも名前でアクセスする場合は、クライアント側で名前解決できることが必要ですが、 Openshift のようにアプリケーションが大量に生成可能なシステムでは、一つ一つの名前を各ローカルホストの /etc/hosts や BIND などの名前解決システムに、都度、登録していくのは現実的に難しいため、Openshift アプリケーション用に割り当てたサブドメインに対してワイルドカード指定で DNS 登録をしておくと便利です。ただし、ワイルドカードは /etc/hosts では使用できないため、BIND や Dnsmasq などの名前解決システムへの登録が必要となります。 |
[root@dns ~]# cat /var/named/srv.world.lan $TTL 86400 ..... ctrl IN A 10.0.0.30 *.apps IN CNAME ctrl.srv.world.[cent@ctrl ~]$ dig ruby-ex.test-project.apps.srv.world ..... ;; QUESTION SECTION: ;ruby-ex.test-project.apps.srv.world. IN A ;; ANSWER SECTION: ruby-ex.test-project.apps.srv.world. 86400 IN CNAME ctrl.srv.world. ctrl.srv.world. 86400 IN A 10.0.0.30 .....[cent@ctrl ~]$ dig nodejs.test-project.apps.srv.world ..... ;; QUESTION SECTION: ;nodejs.test-project.apps.srv.world. IN A ;; ANSWER SECTION: nodejs.test-project.apps.srv.world. 86400 IN CNAME ctrl.srv.world. ctrl.srv.world. 86400 IN A 10.0.0.30 .....[cent@ctrl ~]$ dig test.test.test.apps.srv.world ..... ;; QUESTION SECTION: ;test.test.test.apps.srv.world. IN A ;; ANSWER SECTION: test.test.test.apps.srv.world. 86400 IN CNAME ctrl.srv.world. ctrl.srv.world. 86400 IN A 10.0.0.30 ..... |
Sponsored Link |