CentOS 7
Sponsored Link

OpenShift Origin (OKD) 3.11 : 外部からのアクセスを許可する2018/11/20

 
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 ノードの設定を変更します。
[origin@ctrl ~]$
sudo vi /etc/origin/master/master-config.yaml
# 139行目:必要に応じて自身の環境の外部ネットワーク範囲に変更

  externalIPNetworkCIDRs:
  - 10.0.0.0/24

[origin@ctrl ~]$
sudo /usr/local/bin/master-restart api

[origin@ctrl ~]$
sudo /usr/local/bin/master-restart controllers

[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 93de123 (4 weeks old) in image stream "openshift/nodejs" under tag "10" for "nodejs"

    Node.js 10.12.0
    ---------------
    Node.js  available as docker container is a base platform for building and running various Node.js  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, nodejs-10.12.0

    * 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 tag "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.image.openshift.io "nodejs-ex" created
    buildconfig.build.openshift.io "nodejs-ex" created
    deploymentconfig.apps.openshift.io "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-build   0/1       Completed   0          1m
nodejs-ex-1-rfp2j   1/1       Running     0          11s

# クラスターIP 確認

[cent@ctrl ~]$
oc get svc

NAME        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
nodejs-ex   ClusterIP   172.30.195.97   <none>        8080/TCP   1m

# 内部アクセスして確認

[cent@ctrl ~]$
curl 172.30.195.97: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 のようにアプリケーションが大量に生成可能なシステムでは、一つ一つの名前を各ローカルホストの /etc/hosts や BIND などの名前解決システムに、都度、登録していくのは現実的に難しいため、Openshift アプリケーション用に割り当てたサブドメインに対してワイルドカード指定で DNS 登録をしておくと便利です。ただし、ワイルドカードは /etc/hosts では使用できないため、BIND や Dnsmasq などの名前解決システムへの登録が必要となります。
当例では、Openshift デフォルト サブドメインは、クラスター構成時に YML ファイルで指定した [apps.srv.world] としており、別ホストで稼働する BIND のゾーンに以下のような別名を定義することで、[apps.srv.world] の頭にどのような文字列がきても Openshift Router が稼働する Master ホストへアクセスさせるようにしています。
[root@dns ~]#
cat /var/named/srv.world.lan

$TTL 86400

.....

ctrl     IN  A       10.0.0.25

*.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.25

.....
[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.25

.....
[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.25

.....
関連コンテンツ