🐈

OpenShift 4.8 を vSphere 上にIPIインストールする

2021/10/01に公開約21,000字4件のコメント

はじめに

OpenShift 4.8 の vSphere へのインストールを試して見たいと思います。

ここでは IPI (installer Provisioned infrastructure) という方法を試します。IPIは、OpenShift のインストーラーが、vCenter 経由で Master Node / Worker Node のVM から作成してくれるというお手軽なインストール方法です。

OpenShift 4.8 のマニュアルの以下の部分を参考にしながら進めて行きます。

https://docs.openshift.com/container-platform/4.8/installing/installing_vsphere/installing-vsphere-installer-provisioned.html#installing-vsphere-installer-provisioned

最終的にできる環境は以下のような感じになっています。
vCenter と DNSサーバー、DHCPサーバーが構築されている環境です。

前提となる環境について

vCenter : Master/Worker Node が作成されるネットワークから名前解決できるようにしておきます。vCenterを通して、OpenShift のインストーラーが Master / Worker Node 等を作成します。

DHCP Server : Master/Worker ノードに IPアドレスを付けるために必要です。

DNS Server : vCenter や、インターネット上のレポジトリサーバー、OpenShift の外部アクセスドメインの名前解決等に使われます。

VMWare IPI を使った OpenShift のインストールでは、OpenShift クラスターにアクセスするための固定IPを2つ用意する必要があります。これらの固定IPは、自動で作成される Master Nodeアクセス用のロードバランサーと、ユーザーアプリ用のロードバランサーの入り口のIPとして使われます。

DHCP Server で、Master Node / Worker Node の IP が割り振られるので、ロードバランサー用のIPがこれらと衝突しないように、ロードバランサー用の固定IPは、DHCPサーバーが割り振るアドレスレンジを、サブネットより小さめにする事で、サブネット内のDHCP用のアドレスレンジの外から確保しています。

インターネットのアクセスについて

https://docs.openshift.com/container-platform/4.8/installing/installing_vsphere/installing-vsphere-installer-provisioned.html#cluster-entitlements_installing-vsphere-installer-provisioned
今回は普通にインターネットにHTTPで出られる環境に構築するので特に作業は必要ありませんでした。

必要な vCenter の要件について

https://docs.openshift.com/container-platform/4.8/installing/installing_vsphere/installing-vsphere-installer-provisioned.html#installation-vsphere-installer-infra-requirements_installing-vsphere-installer-provisioned

今回は vCenetr の管理者権限でインストールするので特に作業は必要ありませんでした。

また、マニュアルのこのセクションには、Storage vMotion や、Datastore をまたいだストレージの移動などはサポートしていな事がかかれていました。

インストーラー実行までの準備

DNS record の登録

今回は OpenShfit のクラスタ用に example.localdomain というドメインをベースドメインに使う事にします。

クラスタの名前をocp48とする事にします。このクラスタ名に先ほどのベースドメインを足したocp48.example.localcomain がこのクラスタで使われる基本となるドメインになります。

環境内のexample.localdomainゾーンの権威 DNSに、以下の2つの名前の Aレコードを登録します。

権威DNSとは、そのゾーンのレコードを管理しているDNSの事です。

$ORIGIN example.localdomain.
$TTL 3600
@       IN      SOA     ns1.example.localdomain. root.example.localdomain.(
                                2000091802      ; Serial
                                3600            ; Refresh
                                900             ; Retry
                                3600000         ; Expire
                                3600 )          ; Minimum
             IN   NS      ns1.example.localdomain.
api.ocp48.example.localdomain.       IN   A        172.16.0.111
*.apps.ocp48.example.localdomain.    IN   A        172.16.0.112

api.ocp48.example.localdomain は、Master サーバー (API Server) にアクセスする時に使用されるドメイン名です。kubectloc (OpenShift が kubectlを拡張したもの)のコマンドがアクセスしに行く先もこのドメインになります。

*.apps.ocp48.example.localdomain は、外部にユーザーが作ったアプリケーションを公開する時に使用されるドメイン名です。ユーザーが作ったコンテナをクラスター外にRoute(OpenShift で Ingress の立ち位置にいる人) を使って公開する時は、このドメインの*の所がそれぞれのアプリケーションの名前にしたものが使われます。

vSphere 上の IPIインストールでは、OpenShift のクラスター外部に、Load Balancer を別途設置する必要はありません。上記のドメインのIPが、VIP (Virtual IP)として OpenShift クラスターに割り当てられます。ここで使う VIPのアドレスは、OpenShift の Nodeが存在するネットワークのアドレスレンジから取得する必要がありいます。

OpenShift のインストーラーの取得

マニュアルの以下のセクションを見ながら進めて行きます。

https://docs.openshift.com/container-platform/4.8/installing/installing_vsphere/installing-vsphere-installer-provisioned.html#installation-obtaining-installer_installing-vsphere-installer-provisioned

インターネット上のサービスである OCM(OpenShift Cluster Manager)のページでインストーラーをダウンロードします。Red Hat のアカウントが無い場合は作成が必要です(無料で作成できます)。https://console.redhat.com/openshift/install

「Datacenter」タブの「vSphere」を選びます。

「OpenShift isntaller」「Pull secret」「Command line interface」をそれぞれダウンロードします。自分の Platform に会わせたものをダウンロードします。

「OpenShift isntaller」と「Command line interface」についてはボタンを右クリックで、URLが取れるので curlでダウンロードできます。

curl https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/openshift-install-linux.tar.gz -o openshift-install-linux.tar.gz
 
curl https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/openshift-client-linux.tar.gz -o openshift-client-linux.tar.gz

ダウンロードしたら解凍しておきます。

[root@bastion openshift]# tar zxvf  openshift-install-linux.tar.gz
README.md
openshift-install
[root@bastion openshift]# tar zxvf openshift-client-linux.tar.gz
README.md
oc
kubectl
[root@bastion openshift]#

vCener の CAをダウンロードして、信頼できるCAに追加する

OpenShift のインストーラーが、vCenter とお話しするので、vCenter の証明書に署名しているCAを信頼できている必要があります。

マニュアルの以下を読みながら、vCenter が使用している CAの情報を取得して、信頼できるCAとして追加します。

https://docs.openshift.com/container-platform/4.8/installing/installing_vsphere/installing-vsphere-installer-provisioned.html#installation-adding-vcenter-root-certificates_installing-vsphere-installer-provisioned

私の環境では192.168.124.11 が vCenterです。

[root@bastion openshift]# curl -k https://192.168.124.11/certs/download.zip -o download.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5945  100  5945    0     0  45037      0 --:--:-- --:--:-- --:--:-- 45037
[root@bastion openshift]#
[root@bastion openshift]# unzip download.zip
Archive:  download.zip
  inflating: certs/lin/d064a1cf.0
  inflating: certs/mac/d064a1cf.0
  inflating: certs/win/d064a1cf.0.crt
  inflating: certs/lin/d064a1cf.r0
  inflating: certs/mac/d064a1cf.r0
  inflating: certs/win/d064a1cf.r0.crl
[root@bastion openshift]#
[root@bastion openshift]# cp certs/lin/* /etc/pki/ca-trust/source/anchors
[root@bastion openshift]# update-ca-trust extract

インストーラーの実行

下準備は整ったので、クラスターの作成を開始します。マニュアル的には以下のセクションです。

https://docs.openshift.com/container-platform/4.8/installing/installing_vsphere/installing-vsphere-installer-provisioned.html#installation-launching-installer_installing-vsphere-installer-provisioned

install 用のマニフェストの作成

OpenShift のインストーラーと対話形式で、install 用のYAMLを作成します。

Virtual IP Addressは、DNSにドメイン名を登録した時に使用したした IPアドレスです。

それ以外は選択式のため、それほど難しくないはずです。

openshift-install create install-config を実行します。

[root@bastion openshift]# ./openshift-install create install-config 
? SSH Public Key /root/.ssh/openshift_ssh_key.pub
? Platform vsphere
? vCenter vcenter.adp.nrt.example.com
? Username Administrator@vsphere.local
? Password [? for help] ********
INFO Connecting to vCenter vcenter.adp.nrt.example.com
INFO Defaulting to only available datacenter: NRT
INFO Defaulting to only available cluster: Cluster
? Default Datastore vsanDatastore  
? Network yhanada-int  # ここは自分の環境のVMware のネットワーク名
X Sorry, your reply was invalid: "API 172.16.0.111" is not a valid IP
? Virtual IP Address for API 172.16.0.111
? Virtual IP Address for Ingress 172.16.0.112
? Base Domain example.localdomain
? Cluster Name ocp48
? Pull Secret [? for help] *************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************INFO Install-Config created in: /root/openshift/vmware ******************************************************
[root@bastion openshift]#

結果として以下のような install-config.yaml というYAMLファイルができます。
インタラクティブに聞かれずにデフォルトの値が入って居る所を手動で修正していきます。

machineNetwork:は、Node が接続されるネットワークです。デフォルト値は、10.0.0.0/16ですが、私の環境の172.16.0.0/24に合わせました。

[root@bastion openshift]# cat install-config.yaml.vmware 
apiVersion: v1
baseDomain: example.localdomain
compute:
- architecture: amd64
  hyperthreading: Enabled
  name: worker
  platform: {}
  replicas: 3
controlPlane:
  architecture: amd64
  hyperthreading: Enabled
  name: master
  platform: {}
  replicas: 3
metadata:
  creationTimestamp: null
  name: ocp48
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 172.16.0.0/24
  networkType: OpenShiftSDN
  serviceNetwork:
  - 172.30.0.0/16
platform:
  vsphere:
    apiVIP: 172.16.0.111
    cluster: Cluster
    datacenter: NRT
    defaultDatastore: vsanDatastore
    ingressVIP: 172.16.0.112
    network: yhanada-int
    password: xxxxx
    username: Administrator@vsphere.local
    vCenter: vcenter.adp.nrt.example.com
publish: External
sshKey: |
  ssh-rsa AAAAB3NzaC4Rm***** 省略
[root@bastion openshift]#

完成したinstall-config.yamlはバックアップを取っておきます。(インストールを実行するとこのファイル名のオリジナルが消されてしまいます)
このファイルを取って置けば、/openshift-install create cluster コマンドだけで、何度でも同じクラスタを作成する事が可能です。

[root@bastion openshift]# cp install-config.yaml install-config.yaml.bak

クラスターの作成

インストールを実行します。
openshift-install create clusterinstall-config.yaml のあるディレクトリで実行します。(--dir オプションで、install-config.yamlのあるディレクトリを指定する事もできます)

[root@bastion openshift]# ./openshift-install create cluster
INFO Consuming Install Config from target directory
INFO Obtaining RHCOS image file from 'https://releases-art-rhcos.svc.ci.openshift.org/art/storage/releases/rhcos-4.8/48.84.202106301921-0/x86_64/rhcos-48.84.202106301921-0-vmware.x86_64.ova?sha256='
INFO The file was found in cache: /root/.cache/openshift-installer/image_cache/rhcos-48.84.202106301921-0-vmware.x86_64.ova. Reusing...
INFO Creating infrastructure resources...
INFO Waiting up to 20m0s for the Kubernetes API at https://api.ocp48.example.localdomain:6443... 

ログをよく見ると Obtaining RHCOS image file from 'https://releases-art-rhcos.svc.ci.openshift.org/art/storage/releases/rhcos-4.8/48.84.202106301921-0/x86_64/rhcos-48.84.202106301921-0-vmware.x86_64.ova?sha256=' とあり、Red Hat Core OS の .ova をインターネット経由でダウンロードしている事がわかります。

暫くするとニョキニョキとVMが生えてきます。

最終的に bootstrap と書かれたノードは自動的に削除されます。ここまで来るともう一息です(と言ってもここから最大40分程かかるようです)。

コマンドラインが以下の状態になっていれば完了です。

[root@bastion openshift]# ./openshift-install create cluster
INFO Consuming Install Config from target directory
INFO Obtaining RHCOS image file from 'https://releases-art-rhcos.svc.ci.openshift.org/art/storage/releases/rhcos-4.8/48.84.202106301921-0/x86_64/rhcos-48.84.202106301921-0-vmware.x86_64.ova?sha256='
INFO Creating infrastructure resources...
INFO Waiting up to 20m0s for the Kubernetes API at https://api.ocp48.example.localdomain:6443...
INFO API v1.21.1+9807387 up
INFO Waiting up to 30m0s for bootstrapping to complete...
INFO Destroying the bootstrap resources...        
INFO Waiting up to 40m0s for the cluster at https://api.ocp48.example.localdomain:6443 to initialize... 
INFO Waiting up to 10m0s for the openshift-console route to be created... 
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/openshift/auth/kubeconfig' 
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp48.example.localdomain 
INFO Login to the console with user: "kubeadmin", and password: "aB4ZB-jE4Rh-HkcPq-7sp6t" 
INFO Time elapsed: 33m42s
[root@bastion openshift]# 

以上でクラスターのインストールは完了です。非常に簡単でした。

本番環境で使うにはまだまだやる事があるのですが(Identity Provider のセットアップだったり etc) 簡単に触ってみるレベルであれば、これでインストールは完了です。

OpenShift にログインしてみる

クラスターのインストールログの最後に、環境のセットアップ方法や、管理ユーザー名、パスワードが記載されています。

***
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/openshift/auth/kubeconfig' 
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp48.example.localdomain 
INFO Login to the console with user: "kubeadmin", and password: "aB4ZB-jE4Rh-HkcPq-7sp6t" 
INFO Time elapsed: 33m42s
[root@bastion openshift]# 

これらの情報を使ってログインできる確認してみます。

[root@bastion openshift]# export KUBECONFIG=/root/openshift/auth/kubeconfig
[root@bastion openshift]# oc login -u kubeadmin -p aB4ZB-jE4Rh-HkcPq-7sp6t
Login successful.

You have access to 63 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "default".
[root@bastion openshift]# 

問題なさそうです。

このログイン情報は私はコピペしてlogin.txtというメモに保存しています。(インストールのログ自体は .openshift_install.log というファイルに記録されているので、一応、管理ユーザーのパスワードを忘れてもログから辿る事が可能です)

[root@bastion openshift]# cat << EOF > login.txt
> export KUBECONFIG=/root/openshift/auth/kubeconfig
> oc login -u kubeadmin -p aB4ZB-jE4Rh-HkcPq-7sp6t
> EOF
[root@bastion openshift]# 

何かコマンドを実行してみます。ocコマンドが OpenShift 標準ですが、kubectlも使えます。

[root@bastion openshift]# oc get nodes
NAME                       STATUS   ROLES    AGE   VERSION        
ocp48-h49p6-master-0       Ready    master   24m   v1.21.1+9807387
ocp48-h49p6-master-1       Ready    master   24m   v1.21.1+9807387
ocp48-h49p6-master-2       Ready    master   24m   v1.21.1+9807387
ocp48-h49p6-worker-2dmjq   Ready    worker   13m   v1.21.1+9807387
ocp48-h49p6-worker-9n5fg   Ready    worker   13m   v1.21.1+9807387
ocp48-h49p6-worker-l7lnn   Ready    worker   13m   v1.21.1+9807387
[root@bastion openshift]# kubectl get nodes
NAME                       STATUS   ROLES    AGE   VERSION        
ocp48-h49p6-master-0       Ready    master   24m   v1.21.1+9807387
ocp48-h49p6-master-1       Ready    master   24m   v1.21.1+9807387
ocp48-h49p6-master-2       Ready    master   24m   v1.21.1+9807387
ocp48-h49p6-worker-2dmjq   Ready    worker   13m   v1.21.1+9807387
ocp48-h49p6-worker-9n5fg   Ready    worker   13m   v1.21.1+9807387
ocp48-h49p6-worker-l7lnn   Ready    worker   13m   v1.21.1+9807387
[root@bastion openshift]# 

クラスタの削除

openshift-install destroy cluster でクラスタを削除できます。

[root@bastion openshift]# ./openshift-install destroy cluster 
INFO Destroyed                                     VirtualMachine=ocp48-vc6hb-rhcos
INFO Destroyed                                     VirtualMachine=ocp48-vc6hb-master-1
INFO Destroyed                                     VirtualMachine=ocp48-vc6hb-master-2
INFO Destroyed                                     VirtualMachine=ocp48-vc6hb-master-0
INFO Destroyed                                     VirtualMachine=ocp48-vc6hb-worker-9jtls
INFO Destroyed                                     VirtualMachine=ocp48-vc6hb-worker-vmc6s
INFO Destroyed                                     VirtualMachine=ocp48-vc6hb-worker-kzjlr
INFO Destroyed                                     Folder=ocp48-vc6hb
INFO Destroyed                                     Tag=ocp48-vc6hb
INFO Destroyed                                     TagCategory=openshift-ocp48-vc6hb
INFO Time elapsed: 11s
[root@bastion openshift]# 

クラスターを消すのも簡単ですが、インストール時に使用したinstall-config.yaml を取って置けば、同じクラスターを簡単に再作成する事ができます。

install-config.yamlのバックアップがinstall-config.yaml.bakであれば…

[root@bastion openshift]# cp install-config.yaml.bak  install-config.yaml
[root@bastion openshift]# ./openshift-install create cluster

でクラスターを再作成できます。

補則1:インストール時に経験した失敗

インストールは、非常に簡単でした。と言いつつも、完成するまでに途中で幾つか失敗しています。参考までに遭遇したインストール時の失敗を書いておきます。

失敗1:デフォルトで作られる Machine Network (Kubernetes NodeのVMが置かれるNetwork) の CIDRと、実際の環境の CIDRが一致していなかった。

環境の CIDR に会うように会わせる必要がある。→ install-config.yaml を作って自分が使用する CIDR を記載する必用があった。

失敗2:vcenter や ESXの名前解決が installer の場所からできなかった。

OpenShift のインストーラーを置いている /etc/hosts に登録して解決(したように見えた。が失敗3に続く)

失敗3: Master Node ができ、BootStrap Node も消えるが、Worker Node ができない。

失敗2で OpenShift のインストーラーを動かしている Host の /etc/hosts に vCenter / ESX を登録しただけでは足りず、DNSサーバーに登録すると WorkerNode もデプロイされた。OpenShift インストーラーだけでなく、Master Node 達が名前解決を試みているのかもしれない。

補則2:PV のデプロイ

Default の SC(Storage Class) が存在していたので、PVをデプロイしてみます。

[root@bastion openshift]# oc get sc
NAME             PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
thin (default)   kubernetes.io/vsphere-volume   Delete          Immediate           false                  88m
[root@bastion openshift]#

以下のようなPVCのマニフェストを用意します。

apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:
  name: "vsphere-vol1"
spec:
  accessModes:
    - "ReadWriteOnce"
  resources:
    requests:
      storage: "10Gi"
  storageClassName: "thin"

マニフェストを apply してみると PVCで指定した通りの PV ができました。

[root@bastion openshift]# oc apply -f my-pvc-vsphere.yaml 
persistentvolumeclaim/vsphere-vol1 created
[root@bastion openshift]# oc get pvc
NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
vsphere-vol1   Bound    pvc-0e236c66-2f62-4074-b6dd-effa3126a161   10Gi       RWO            thin           3s
[root@bastion openshift]# oc get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                  STORAGECLASS   REASON   AGE
pvc-0e236c66-2f62-4074-b6dd-effa3126a161   10Gi       RWO            Delete           Bound    default/vsphere-vol1   thin                    7s
[root@bastion openshift]# 

DataStore にkubevolsというフォルダーができていました。ここに作成されたPVがファイルとして保管されているようです。

補則3: インストール後の実験 (ロードバランサーを探る)

ロードバランサー用のIPはどこに存在するのか

install 時に 172.16.0.111 を Master API 用、172.16.0.112を User Application 用の Load Balancer IPとして指定しました。

このIPが本当に存在しているのかを探って見ました。この環境では、Node間のネットワークは、172.16.0 で指定しているので、この値で各 Node にログインして grep をしていきます。

install 後の Node 構成は以下の通りです。

[root@bastion openshift]# oc get nodes
NAME                       STATUS   ROLES    AGE     VERSION
ocp48-vc6hb-master-0       Ready    master   2d14h   v1.21.1+9807387
ocp48-vc6hb-master-1       Ready    master   2d14h   v1.21.1+9807387
ocp48-vc6hb-master-2       Ready    master   2d14h   v1.21.1+9807387
ocp48-vc6hb-worker-9jtls   Ready    worker   2d14h   v1.21.1+9807387
ocp48-vc6hb-worker-kzjlr   Ready    worker   2d14h   v1.21.1+9807387
ocp48-vc6hb-worker-vmc6s   Ready    worker   2d14h   v1.21.1+9807387
[root@bastion openshift]# 

Master Node ocp48-vc6hb-master-2 で、172.16.0.111 を発見。サブネットが172.16.0.111/32 で、/32 になっていて、元々の Node 間のネットワークの172.16.0.0/24そのままでは無い事がわかります。

[root@bastion openshift]# oc debug node/ocp48-vc6hb-master-2
Starting pod/ocp48-vc6hb-master-2-debug ...
To use host binaries, run `chroot /host`
Pod IP: 172.16.0.51
If you don't see a command prompt, try pressing enter.
sh-4.4# ip addr show | grep -A2 172.16
    inet 172.16.0.51/24 brd 172.16.0.255 scope global dynamic noprefixroute ens192
       valid_lft 76455sec preferred_lft 76455sec
    inet 172.16.0.111/32 scope global ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::8150:c409:fcb:e0e4/64 scope link noprefixroute
sh-4.4# 

Worker Node ocp48-vc6hb-worker-kzjlr で、172.16.0.112 を発見。

[root@bastion openshift]# oc debug node/ocp48-vc6hb-worker-kzjlr
Starting pod/ocp48-vc6hb-worker-kzjlr-debug ...
To use host binaries, run `chroot /host`
Pod IP: 172.16.0.53
If you don't see a command prompt, try pressing enter.
sh-4.4# ip addr show | grep -A2 172.16
    inet 172.16.0.53/24 brd 172.16.0.255 scope global dynamic noprefixroute ens192
       valid_lft 76827sec preferred_lft 76827sec
    inet 172.16.0.112/32 scope global ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::2c41:727d:2ca5:f432/64 scope link noprefixroute
sh-4.4#

これらの VIP は、keepalived によって提供されているそうです。keepalived は、Podとして全Nodeで稼働しています。

[root@bastion openshift]# oc get pods -n openshift-vsphere-infra | grep keepalived
keepalived-ocp48-h49p6-master-0       2/2     Running   2          3d22h
keepalived-ocp48-h49p6-master-1       2/2     Running   2          3d22h
keepalived-ocp48-h49p6-master-2       2/2     Running   2          3d22h
keepalived-ocp48-h49p6-worker-2dmjq   2/2     Running   2          3d22h
keepalived-ocp48-h49p6-worker-9n5fg   2/2     Running   2          3d22h
keepalived-ocp48-h49p6-worker-l7lnn   2/2     Running   2          3d22h
[root@bastion openshift]# 

Node を意図的に倒した時に、Failover するのか等のテストはまた時間があった時に…

こちらのブログ記事が VIP の仕組みについて掘り下げてくれていました。keepalivedは、Static Podとして生成されていて、Machine Config Operatorによって構成されてるんですね。

https://rcarrata.com/openshift/ocp4_ipi_vmware_deep_dive/

補則4: ユーザードアプリドメインをインターネットに公開する

ユーザーアプリのドメインをインターネットに公開できますか?という質問を受けました。
環境の都合で実験できていませんが、以下のような感じでいけるのではないかと思ってます。

  1. インターネットに公開するドメインを取得。Global IPをアサイン。
  2. インターネット- イントラネット間の NATを構成
    インターネット上の Global IPと、イントラネットのユーザー・アプリ用のVIPを関連付ける。
  3. ユーザーアプリ用のRoute リソース (OpenShift で Ingress の立ち位置にある Custom Resource) を、インターネットに公開するドメインからのリクエストを受けられるように設定。

とは言えこういうのは実機確認しないと怪しさが残りますよね…

もし「こうすればできましたよー」という方がいらっしゃいましたらコメント欄で教えて下さると嬉しいです。

Discussion

こんにちは!こちらの記事大変参考になりました!
お伺いしたいのですがDHCPサーバは既にあるという理解であっているでしょうか?

お疲れ様です!はい!DHCPサーバーは既にあります!
vCenter と DHCPサーバーと、DNSサーバーがある状態がスタート時点になります。
私は DHCPサーバー(dhcpd) とDNSサーバー(BIND) を同居させています。

すみません、構成図について質問させてください。VIPのアドレスがLANのサブネットと違うIPになっているように見えるのですが、この構成でVIPへのアクセスできるのでしょうか?

こんばんは。

構成図の方に Node が所属するネットワークそのものを書いてない気がするのですが、どこの辺りですかね…(あった方がいいですね。時間がある時に追加しておきます)

Node が所属するネットワークは、途中に出てくる install-config.yaml 内の

machineNetwork:
  - cidr: 172.16.0.0/24

の部分になります。

仮想 IP (VIP) は、構成図中にあるように以下の通りで、172.16.0.0/24 内のレンジでアサインしています。

api.ocp48.example.localdomain 172.16.0.111
*.apps.ocp48.example.localdomain 172.16.0.112

(実際には DHCPでこれらのIPが他の人にアサインされないように、DHCPでIPを配布するレンジは、/24より狭くしています)

ログインするとコメントできます