LoginSignup
0
0

More than 1 year has passed since last update.

Red Hat OpenShift on IBM Cloudのプライベート・エンドポイントでの利用

Posted at

はじめに

これまで、IBM CloudのPower Systems Virtual ServerやVirtual Private CloudにOpenShiftをUPIインストールしてきました。この記事ではマネージドサービス「Red Hat OpenShift on IBM Cloud」をプライベート・エンドポイントで作成してざっくりと構成を見ていきます。

1. Red Hat OpenShiftクラスターの作成

1.1 クラスター作成

IBM CloudコンソールからRed Hat OpenShiftのクラスターを作成します。

事前に以下を作成しておきます。
・クラウド・オブジェクト・ストレージ
・仮想プライベート・クラウド(VPC)とVPC内のサブネットx3
・各サブネットのパブリック・ゲートウェイ

■ インフラストラクチャー(IBM Cloudコンソールより)
image.png
■ ロケーション(IBM Cloudコンソールより)
image.png
■ ワーカー・プール(IBM Cloudコンソールより)
image.png
image.png

インターネット側からSSL VPNで接続するためのclassicノードと、classicノードとVPC間を接続するためのTransit Gatewayを合わせて下図のような環境になりました。黄色丸はIBM Cloudコンソールの「VPCインフラストラクチャー」、「DNS Services」メニューからは確認できません。一方、赤丸は「VPCインフラストラクチャー」メニューで確認することができます。
image.png

1.2. クラスターへのアクセス

サービス・エンドポイントを「プライベート・エンドポイントのみ」としたため、このままでは、IBM Cloudの「OpenShift」メニューからOpenShift Webコンソールにアクセスすることができません。
image.png

classicノードに起動したプロキシを経由することで、OpenShift Webコンソールにアクセスすることができました。但し、直接ログインすることはできず、IBM Cloudへのログインを促されます。

アクセス経路
作業端末 → classicノード(squidフォワードプロキシ:3128)
        → OpenShiftルーターPod → Openshift WebコンソールPod

classcノードではsquidを起動しています。デフォルトDNSでOpenShift WebコンソールのURLを名前解決できています。これはロード・バランサーのIPアドレスです。

classicノード
dig @10.0.80.11 console-openshift-console.roks-jp-tok-3-bx2-4x16-~-i000.jp-tok.containers.appdomain.cloud
### 標準出力↓
10.244.160.6
10.244.32.6

コマンドライン操作に必要なkubeconfigは以下のように取得しました。

classicノード
ibmcloud ks cluster config --cluster roks-jp-tok-3-bx2.4x16 --admin -output yaml > /tmp/kubeconfig
export KUBECONFIG=/tmp/kubeconfig
oc get co
### 標準出力↓
NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE
console                                    4.8.14    True        False         False      6d19h
csi-snapshot-controller                    4.8.14    True        False         False      6d19h
dns                                        4.8.14    True        False         False      6d19h
image-registry                             4.8.14    True        False         False      6d19h
ingress                                    4.8.14    True        False         False      6d19h
kube-apiserver                             4.8.14    True        False         False      6d19h
kube-controller-manager                    4.8.14    True        False         False      6d19h
kube-scheduler                             4.8.14    True        False         False      6d19h
kube-storage-version-migrator              4.8.14    True        False         False      6d19h
marketplace                                4.8.14    True        False         False      6d19h
monitoring                                 4.8.14    True        False         False      3d21h
network                                    4.8.14    True        False         False      6d19h
node-tuning                                4.8.14    True        False         False      6d19h
openshift-apiserver                        4.8.14    True        False         False      6d19h
openshift-controller-manager               4.8.14    True        False         False      6d19h
openshift-samples                          4.8.14    True        False         False      6d19h
operator-lifecycle-manager                 4.8.14    True        False         False      6d19h
operator-lifecycle-manager-catalog         4.8.14    True        False         False      6d19h
operator-lifecycle-manager-packageserver   4.8.14    True        False         False      2d23h
service-ca                                 4.8.14    True        False         False      6d19h
storage                                    4.8.14    True        False         False      6d19h

2. 構成確認

2.1. ノード

Red Hat OpenShift on IBM Cloudは、ゾーンあたり1workerノードで作成しました。ノード一覧を確認するとROLESに「master,worker」と表示されていますが、実際にはworkerノードとしてのみ機能します。

classicノード
oc get nodes
### 標準出力↓
NAME           STATUS   ROLES           AGE   VERSION
10.244.160.4   Ready    master,worker   93m   v1.21.1+a620f50
10.244.32.4    Ready    master,worker   93m   v1.21.1+a620f50
10.244.96.4    Ready    master,worker   93m   v1.21.1+a620f50

workerノードのOSはRHCOSでなくRHEL 7.9で、DNSサーバーは「DNS Services」インスタンスのIPアドレス、NTPサーバーはVPCで利用可能とされているNTPサーバーのIPアドレスになっていました。前述のようにIBM Cloudの「DNS Services」メニューでは何も確認できません。

classicノード
oc debug node/10.244.32.4
### 標準出力↓
Starting pod/10244324-debug ...
To use host binaries, run `chroot /host`

chroot /host
### 標準出力↓
Pod IP: 10.244.32.4
If you do not see a command prompt, try pressing enter.

cat /etc/redhat-release
### 標準出力↓
Red Hat Enterprise Linux Server release 7.9 (Maipo)

cat /etc/resolv.conf
### 標準出力↓
nameserver 161.26.0.7
nameserver 161.26.0.8

grep "^server" /etc/ntp.conf
### 標準出力↓
server time.adn.networklayer.com iburst minpoll 3 maxpoll 4
server  127.127.1.0 # local clock
server 161.26.0.6   # added by /sbin/dhclient-script

2.2. Pod

masterノード上のPodは表示されません。

classicノード
oc get pod -A -o wide | grep -v "10.244.32.4" | grep -v "10.244.96.4" | grep -v "10.244.160.4"
NAMESPACE                                          NAME                                                      READY   STATUS      RESTARTS   AGE     IP  NODE      NOMINATED NODE   READINESS GATES

ルーターPodは、LoadBalancerタイプのService経由で利用できるようになっており、Service「router-default」のNodePortの31050番ポートと32106番ポートは、VPCに作成されたロード・バランサーの負荷分散先になっていました。NodePortであるため、ルーターPodを起動していないworkerノード(10.244.96.4)でも同ポートでLISTENしてます。

classicノード
oc get svc -n openshift-ingress
### 標準出力↓
NAME                      TYPE           CLUSTER-IP      EXTERNAL-IP                          PORT(S)                      AGE
router-default            LoadBalancer   172.21.46.135   8aae851f-jp-tok.lb.appdomain.cloud   80:32106/TCP,443:31050/TCP   7d1h
router-internal-default   ClusterIP      172.21.218.93   <none>

oc describe svc router-default -n openshift-ingress
### 標準出力↓
Name:                     router-default
Namespace:                openshift-ingress
…
LoadBalancer Ingress:     8aae851f-jp-tok.lb.appdomain.cloud
Port:                     http  80/TCP
TargetPort:               http/TCP
NodePort:                 http  32106/TCP
Endpoints:                172.17.35.145:80,172.17.43.79:80
Port:                     https  443/TCP
TargetPort:               https/TCP
NodePort:                 https  31050/TCP
Endpoints:                172.17.35.145:443,172.17.43.79:443

oc get pod -n openshift-ingress -o wide
### 標準出力↓
NAME                              READY   STATUS    RESTARTS   AGE    IP              NODE           NOMINATED NODE   READINESS GATES
router-default-6bf59f86fd-ggrf2   1/1     Running   0          7d1h   172.17.43.79    10.244.160.4   <none>           <none>
router-default-6bf59f86fd-h8994   1/1     Running   0          7d1h   172.17.35.145   10.244.32.4    <none>           <none>

oc debug node/10.244.96.4
### 標準出力↓
Starting pod/10244964-debug ...
To use host binaries, run `chroot /host`

chroot /host
### 標準出力↓
Pod IP: 10.244.96.4
If you do not see a command prompt, try pressing enter.

ss -na | egrep "32106|31050"
### 標準出力↓
tcp    LISTEN     0      32768     *:31050                 *:*
tcp    LISTEN     0      32768     *:32106                 *:*

■ ロード・バランサー バックエンド・プール「tcp-443-31050」の負荷分散先
image.png
■ ロード・バランサー バックエンド・プール「tcp-80-32106」の負荷分散先
image.png

2.3. Storage Class

アドオン「Block Storage for VPC」により、複数の「StorageClass」が用意されています。
「Block Storage for VPC」は、複数ゾーンに対応しないため注意が必要です。

classicノード
oc get sc
NAME                                          PROVISIONER            RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
ibmc-vpc-block-10iops-tier (default)          vpc.block.csi.ibm.io   Delete          Immediate              false                  7d1h
ibmc-vpc-block-5iops-tier                     vpc.block.csi.ibm.io   Delete          Immediate              false                  7d1h
ibmc-vpc-block-custom                         vpc.block.csi.ibm.io   Delete          Immediate              false                  7d1h
ibmc-vpc-block-general-purpose                vpc.block.csi.ibm.io   Delete          Immediate              false                  7d1h
ibmc-vpc-block-metro-10iops-tier              vpc.block.csi.ibm.io   Delete          WaitForFirstConsumer   false                  7d1h
ibmc-vpc-block-metro-5iops-tier               vpc.block.csi.ibm.io   Delete          WaitForFirstConsumer   false                  7d1h
ibmc-vpc-block-metro-custom                   vpc.block.csi.ibm.io   Delete          WaitForFirstConsumer   false                  7d1h
ibmc-vpc-block-metro-general-purpose          vpc.block.csi.ibm.io   Delete          WaitForFirstConsumer   false                  7d1h
ibmc-vpc-block-metro-retain-10iops-tier       vpc.block.csi.ibm.io   Retain          WaitForFirstConsumer   false                  7d1h
ibmc-vpc-block-metro-retain-5iops-tier        vpc.block.csi.ibm.io   Retain          WaitForFirstConsumer   false                  7d1h
ibmc-vpc-block-metro-retain-custom            vpc.block.csi.ibm.io   Retain          WaitForFirstConsumer   false                  7d1h
ibmc-vpc-block-metro-retain-general-purpose   vpc.block.csi.ibm.io   Retain          WaitForFirstConsumer   false                  7d1h
ibmc-vpc-block-retain-10iops-tier             vpc.block.csi.ibm.io   Retain          Immediate              false                  7d1h
ibmc-vpc-block-retain-5iops-tier              vpc.block.csi.ibm.io   Retain          Immediate              false                  7d1h
ibmc-vpc-block-retain-custom                  vpc.block.csi.ibm.io   Retain          Immediate              false                  7d1h
ibmc-vpc-block-retain-general-purpose         vpc.block.csi.ibm.io   Retain          Immediate              false                  7d1h
ibmc-vpcblock-odf-10iops                      vpc.block.csi.ibm.io   Delete          WaitForFirstConsumer   false                  7d1h
ibmc-vpcblock-odf-5iops                       vpc.block.csi.ibm.io   Delete          WaitForFirstConsumer   false                  7d1h
ibmc-vpcblock-odf-custom                      vpc.block.csi.ibm.io   Delete          WaitForFirstConsumer   false                  7d1h
ibmc-vpcblock-odf-general                     vpc.block.csi.ibm.io   Delete          WaitForFirstConsumer   false                  7d1h
ibmc-vpcblock-odf-ret-10iops                  vpc.block.csi.ibm.io   Retain          WaitForFirstConsumer   false                  7d1h
ibmc-vpcblock-odf-ret-5iops                   vpc.block.csi.ibm.io   Retain          WaitForFirstConsumer   false                  7d1h
ibmc-vpcblock-odf-ret-custom                  vpc.block.csi.ibm.io   Retain          WaitForFirstConsumer   false                  7d1h
ibmc-vpcblock-odf-ret-general                 vpc.block.csi.ibm.io   Retain          WaitForFirstConsumer   false                  7d1h

2.4. その他

ノードは「machinesets」として管理されていないため、OpenShift側からworkerノードをスケールさせることはできません。IBM Cloudコンソールからであればスケール可能です。

classicノード
oc get machinesets -n openshift-machine-api
### 標準出力↓
error: the server doesn't have a resource type "machinesets"

workerノードのOSがRHELであるためか、OpenShift Webコンソールからのバージョンアップはできないようです。IBM Cloudコンソールからであればバージョンアップ可能です。

image.png

3. 参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0