【OKD 5.0】 踏み台サーバーの構築(DNS・HAProxy・NFS・iSCSI ターゲット・インストール用ツール)

OKD のクラスタを作る前に用意する踏み台サーバー(Rocky Linux 9)の構築手順です。DNS(dnsmasq)、ロード バランサー(HAProxy)、仮想マシンのディスク用の NFS と iSCSI ターゲット、インストール用のツール(oc・openshift-install)を 1 台にまとめます。

目次

この記事の前提

  • 参照: OKD Documentation(Installing an on-premise cluster with the Agent-based Installer)
  • 踏み台サーバーに Rocky Linux 9 を最小構成で入れ、root でログインできること
  • 踏み台サーバーからインターネットに出られること(オフラインのクラスタでも、踏み台だけはインターネットに出られる構成にします)

構成

役割内容
DNSクラスタの API・Ingress(*.apps)・ノードの名前を引く。それ以外の名前は LAN の DNS へ転送
HAProxyplatform: none のクラスタ用の、API・Machine Config Server・Ingress のロード バランサー(platform: baremetal では使わない)
NFS仮想マシンのディスク用の RWX(複数ノードから同時に使える)ストレージ
iSCSI ターゲット仮想マシンのディスク用のブロック ストレージ。2 系統のネットワークでマルチパスにする
ツールoc(クラスタの操作)、openshift-install(インストール用の ISO の作成と完了待ち)
NICネットワークIP アドレス
ens18LAN(インターネットに出られる)192.168.1.190/24
ens19オフラインのクラスタ用(インターネットに出られない)10.30.0.1/24
ens20iSCSI の 1 系統目10.40.81.1/24
ens21iSCSI の 2 系統目10.40.82.1/24

この連載で作るクラスタと名前は次のとおりです。

クラスタ方式APIIngress(*.apps)
okdbmオンライン、platform: baremetal192.168.1.194(クラスタが持つ VIP)192.168.1.195(VIP)
okdnoneオンライン、platform: none192.168.1.190(踏み台の HAProxy)192.168.1.190(HAProxy)
okdoffオフライン、platform: baremetal10.30.0.4(VIP)10.30.0.5(VIP)

追加の NIC の設定

実行する場所:踏み台サーバー(root)

# nmcli connection add type ethernet ifname ens19 con-name cluster-off ipv4.method manual ipv4.addresses 10.30.0.1/24 ipv6.method disabled
# nmcli connection add type ethernet ifname ens20 con-name iscsi-a ipv4.method manual ipv4.addresses 10.40.81.1/24 ipv6.method disabled
# nmcli connection add type ethernet ifname ens21 con-name iscsi-b ipv4.method manual ipv4.addresses 10.40.82.1/24 ipv6.method disabled
# ip -br addr

期待する出力(抜粋):

ens18            UP             192.168.1.190/24
ens19            UP             10.30.0.1/24
ens20            UP             10.40.81.1/24
ens21            UP             10.40.82.1/24

オフラインのクラスタ用のネットワーク(ens19)では、踏み台サーバーはルーター(IP 転送)として動かしません。クラスタのノードはインターネットに出られず、踏み台のレジストリや DNS だけを使います。

DNS(dnsmasq)

OKD は、API(api.<クラスタ名>.<ベース ドメイン>)、クラスタ内部の API(api-int)、アプリケーション(*.apps)の名前が引けることを前提にしています。

実行する場所:踏み台サーバー(root)

# dnf -y install dnsmasq bind-utils
# cat > /etc/dnsmasq.d/okd.conf <<'EOF'
domain-needed
bogus-priv
no-resolv
server=192.168.1.254
listen-address=127.0.0.1,192.168.1.190,10.30.0.1
bind-interfaces
local=/hvdoc.lab/
domain=hvdoc.lab

host-record=bastion.hvdoc.lab,192.168.1.190
host-record=registry.hvdoc.lab,10.30.0.1

host-record=master-1.hvdoc.lab,192.168.1.191
host-record=master-2.hvdoc.lab,192.168.1.192
host-record=master-3.hvdoc.lab,192.168.1.193

# okdbm(platform: baremetal)
host-record=api.okdbm.hvdoc.lab,192.168.1.194
host-record=api-int.okdbm.hvdoc.lab,192.168.1.194
address=/apps.okdbm.hvdoc.lab/192.168.1.195

# okdnone(platform: none)
host-record=api.okdnone.hvdoc.lab,192.168.1.190
host-record=api-int.okdnone.hvdoc.lab,192.168.1.190
address=/apps.okdnone.hvdoc.lab/192.168.1.190

# okdoff(オフライン)
host-record=off-master-1.hvdoc.lab,10.30.0.11
host-record=off-master-2.hvdoc.lab,10.30.0.12
host-record=off-master-3.hvdoc.lab,10.30.0.13
host-record=api.okdoff.hvdoc.lab,10.30.0.4
host-record=api-int.okdoff.hvdoc.lab,10.30.0.4
address=/apps.okdoff.hvdoc.lab/10.30.0.5
EOF
# systemctl enable --now dnsmasq firewalld
# firewall-cmd --permanent --add-service=dns
# firewall-cmd --permanent --zone=public --add-interface=ens19 --add-interface=ens20 --add-interface=ens21
# firewall-cmd --reload
設定説明
server自分で持たない名前の転送先(LAN の DNS)
listen-address / bind-interfaces待ち受ける IP アドレス。LAN とオフライン用のネットワークの両方で答える
local / domainhvdoc.lab は自分だけで答える(外へ転送しない)
host-record名前と IP アドレス(逆引きも作られる)
address=/apps…/*.apps のワイルドカード。apps の下のすべての名前を同じ IP アドレスで返す

確認

# dig +short @192.168.1.190 api.okdbm.hvdoc.lab
# dig +short @192.168.1.190 test.apps.okdbm.hvdoc.lab
# dig +short @192.168.1.190 -x 192.168.1.191
# dig +short @192.168.1.190 quay.io

期待する出力:

192.168.1.194
192.168.1.195
master-1.hvdoc.lab.
54.167.152.27
44.199.60.112

HAProxy(platform: none のクラスタ用)

platform: none では、クラスタは API と Ingress の VIP を持ちません。外部のロード バランサーで、API(6443)、Machine Config Server(22623)、Ingress(80・443)をマスター(コントロール プレーン)へ振り分けます。この連載のクラスタは 3 台構成(マスターが Ingress も動かす)なので、すべてマスターへ振り分けます。

実行する場所:踏み台サーバー(root)

# dnf -y install haproxy
# cat > /etc/haproxy/haproxy.cfg <<'EOF'
global
    log         127.0.0.1 local2
    maxconn     4000
    daemon
defaults
    mode                    tcp
    log                     global
    option                  tcplog
    timeout connect         10s
    timeout client          1m
    timeout server          1m

frontend api
    bind *:6443
    default_backend api
backend api
    balance roundrobin
    option  httpchk GET /readyz HTTP/1.0
    http-check expect status 200
    default-server check check-ssl verify none inter 5s fall 3 rise 2
    server master-1 192.168.1.191:6443
    server master-2 192.168.1.192:6443
    server master-3 192.168.1.193:6443

frontend machine-config
    bind *:22623
    default_backend machine-config
backend machine-config
    balance roundrobin
    server master-1 192.168.1.191:22623 check
    server master-2 192.168.1.192:22623 check
    server master-3 192.168.1.193:22623 check

frontend ingress-http
    bind *:80
    default_backend ingress-http
backend ingress-http
    balance source
    server master-1 192.168.1.191:80 check
    server master-2 192.168.1.192:80 check
    server master-3 192.168.1.193:80 check

frontend ingress-https
    bind *:443
    default_backend ingress-https
backend ingress-https
    balance source
    server master-1 192.168.1.191:443 check
    server master-2 192.168.1.192:443 check
    server master-3 192.168.1.193:443 check

listen stats
    bind *:9000
    mode http
    stats enable
    stats uri /stats
EOF
# setsebool -P haproxy_connect_any 1
# haproxy -c -f /etc/haproxy/haproxy.cfg
# systemctl enable --now haproxy
# firewall-cmd --permanent --add-port=6443/tcp --add-port=22623/tcp --add-port=9000/tcp
# firewall-cmd --permanent --add-service=http --add-service=https
# firewall-cmd --reload
設定説明
mode tcpTLS を終端せず、そのまま転送する(証明書はクラスタが持つ)
option httpchk GET /readyzAPI サーバーの準備ができたノードにだけ振り分ける
balance source同じクライアントは同じノードへ(Ingress)
setsebool -P haproxy_connect_any 1SELinux で HAProxy が 6443・22623 などに接続・待ち受けできるようにする
listen stats振り分け先の状態を http://192.168.1.190:9000/stats で見る

firewall-cmd の --add-port と --add-service は 1 回のコマンドに混ぜられません(「argument –add-service: not allowed with argument –add-port」になります)。2 行に分けて実行します。

NFS(RWX ストレージ)

仮想マシンのライブ マイグレーションには、複数のノードから同時に使えるディスク(RWX)が必要です。NFS の CSI ドライバー(csi-driver-nfs)が、この下にボリュームごとのディレクトリを作ります。

実行する場所:踏み台サーバー(root)

# dnf -y install nfs-utils
# mkdir -p /srv/nfs/okd
# chmod 777 /srv/nfs/okd
# cat > /etc/exports.d/okd.exports <<'EOF'
/srv/nfs/okd 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check) 10.30.0.0/24(rw,sync,no_root_squash,no_subtree_check)
EOF
# systemctl enable --now nfs-server
# exportfs -rav
# firewall-cmd --permanent --add-service=nfs --add-service=mountd --add-service=rpc-bind
# firewall-cmd --reload
# exportfs -v

期待する出力:

/srv/nfs/okd  	192.168.1.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/srv/nfs/okd  	10.30.0.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

iSCSI ターゲット(2 系統)

iSCSI のターゲット(LIO)を作り、ポータル(待ち受けの IP アドレス)を 2 系統のネットワークに 1 つずつ置きます。クライアント(クラスタのノード)は両方のポータルにログインし、マルチパスで 1 本の経路が切れても使い続けます。LUN と接続を許すノード(ACL)は、クラスタを作った後で追加します。

実行する場所:踏み台サーバー(root)

# dnf -y install targetcli
# systemctl enable --now target
# targetcli /iscsi create iqn.2026-10.lab.hvdoc:okd
# targetcli /iscsi/iqn.2026-10.lab.hvdoc:okd/tpg1/portals delete 0.0.0.0 3260
# targetcli /iscsi/iqn.2026-10.lab.hvdoc:okd/tpg1/portals create 10.40.81.1 3260
# targetcli /iscsi/iqn.2026-10.lab.hvdoc:okd/tpg1/portals create 10.40.82.1 3260
# targetcli saveconfig
# firewall-cmd --permanent --add-service=iscsi-target
# firewall-cmd --reload
# targetcli ls /iscsi

期待する出力:

o- iscsi .......................................................... [Targets: 1]
  o- iqn.2026-10.lab.hvdoc:okd ....................................... [TPGs: 1]
    o- tpg1 ............................................. [no-gen-acls, no-auth]
      o- acls ........................................................ [ACLs: 0]
      o- luns ........................................................ [LUNs: 0]
      o- portals .................................................. [Portals: 2]
        o- 10.40.81.1:3260 ................................................ [OK]
        o- 10.40.82.1:3260 ................................................ [OK]
項目説明
iqn.2026-10.lab.hvdoc:okdターゲットの名前(IQN)
portals delete 0.0.0.0 3260既定の「すべての IP アドレスで待ち受け」を消し、iSCSI 用のネットワークだけで待ち受ける
no-gen-aclsACL に登録したノードだけが接続できる(既定)

待ち受けの確認

# systemctl is-active dnsmasq haproxy nfs-server target
# ss -ltnp | grep -E ':(53|80|443|6443|22623|3260|2049|9000) '

期待する出力(抜粋):

active
active
active
active
LISTEN 0 256   10.40.81.1:3260  ...
LISTEN 0 4096     0.0.0.0:2049  ...
LISTEN 0 4000     0.0.0.0:22623 ... ("haproxy",...)
LISTEN 0 32  192.168.1.190:53   ... ("dnsmasq",...)
LISTEN 0 4000     0.0.0.0:6443  ... ("haproxy",...)
LISTEN 0 32     10.30.0.1:53    ... ("dnsmasq",...)
LISTEN 0 4000     0.0.0.0:443   ... ("haproxy",...)
LISTEN 0 256   10.40.82.1:3260  ...

インストール用のツール

OKD のリリース(GitHub の okd-project/okd)から、oc と openshift-install を取得します。openshift-install は、そのリリースのイメージを使うように作られているため、インストールする版と同じものを使います。

実行する場所:踏み台サーバー(root)

# dnf -y install nmstate tar
# V=5.0.0-okd-scos.3
# U=https://github.com/okd-project/okd/releases/download/$V
# mkdir -p /root/okd/bin && cd /root/okd/bin
# for f in openshift-client-linux-$V.tar.gz openshift-install-linux-$V.tar.gz sha256sum.txt; do curl -sSLO $U/$f; done
# sha256sum --ignore-missing -c sha256sum.txt
# tar xzf openshift-client-linux-$V.tar.gz oc kubectl
# tar xzf openshift-install-linux-$V.tar.gz openshift-install
# install -m 755 oc kubectl openshift-install /usr/local/bin/
# openshift-install version
# ssh-keygen -t ed25519 -N '' -f /root/.ssh/id_ed25519

期待する出力(抜粋):

openshift-client-linux-5.0.0-okd-scos.3.tar.gz: OK
openshift-install-linux-5.0.0-okd-scos.3.tar.gz: OK
openshift-install 5.0.0-okd-scos.3
release image quay.io/okd/scos-release@sha256:85785ae62b7f9b2cea64a80b2f748e502fed7c67a41f5500797f725e1ce6dd62
release architecture amd64
項目説明
nmstateopenshift-install が、agent-config.yaml のネットワーク設定(nmstate 形式)を検査するのに使う
ssh-keygenノード(core ユーザー)に SSH でログインするための鍵。公開鍵を install-config.yaml に書く

次の手順

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次