Klaster OKD (OpenShift) na maszynach wirtualnych Proxmox
- część 1 https://itadmin.vblog.ovh/klaster-okd-openshift-na-maszynach-wirtualnych-proxmox-przygotowanie-dns/
- część 2 https://itadmin.vblog.ovh/klaster-okd-openshift-na-maszynach-wirtualnych-proxmox-przygotowanie-maszyny-bastion/
- część 3 https://itadmin.vblog.ovh/klaster-okd-openshift-na-maszynach-wirtualnych-proxmox-przygotowanie-maszyny-storage-nfs/
- część 4 https://itadmin.vblog.ovh/klaster-okd-openshift-na-maszynach-wirtualnych-proxmox-uruchomienie-maszyny-bootstrap/
- część 5 https://itadmin.vblog.ovh/klaster-okd-openshift-na-maszynach-wirtualnych-proxmox-uruchomienie-maszyn-control-plane/
- część 6 https://itadmin.vblog.ovh/klaster-okd-openshift-na-maszynach-wirtualnych-proxmox-uruchomienie-maszyn-compute/
- część 7 https://itadmin.vblog.ovh/klaster-okd-openshift-na-maszynach-wirtualnych-proxmox-zakonczenie-instalacji/
Spis treści
- Klaster OKD (OpenShift) na maszynach wirtualnych Proxmox
- Spis treści
- Konfiguracja sieciowa serwera Proxmox
- Konfiguracja maszyn wirtualnych Proxmox
- Przygotowanie maszyny wirtualnej dns1
- Konfiguracja usługi named
- Weryfikacja działania usługi dns dla domeny okdlab.local
- Wykorzystanie zasobów po instalacji i konfiguracji serwera dns1
Konfiguracja sieciowa serwera Proxmox

Na testowym serwerze Proxmox zdefiniowany jest osobny interfejs typu Linux Bridge o nazwie vmbr4 dla sieci okd network o adresacji 192.168.40.0/24.

Za obsługę DNS / DHCP dla kontenerów LXC oraz maszyn wirtualnych Proxmox odpowiedzialny jest kontener LXC o nazwie dnsmasq, który ma podłączonych 9 kart sieciowych. Każda podpięta jest do innego Linux Bridge na Proxmox. W tym przypadku interfejs net3 podpięty jest do vmbr4 Proxmox czyli do sieci okd network.
W kontenerze LXC opartym o system Debian 11 zainstalowany jest dnsmasq o następującej konfiguracji. Dla sieci okd network istotny jest fragment poniżej interfaces=eth4
# Set domain names domain=netapps.local expand-hosts domain-needed # Block private addresses from being forwarded bogus-priv # Enable DNS forwarding server=192.168.8.1 server=8.8.8.8 server=8.8.4.4 # Network 192.168.10.0/24 dhcp-range=192.168.10.100,192.168.10.200,48h interface=eth1 # Network 192.168.20.0/24 dhcp-range=192.168.20.100,192.168.20.200,48h interface=eth0 # Network 192.168.30.0/24 dhcp-range=192.168.30.100,192.168.30.200,48h interface=eth3 # Network 192.168.40.0/24 interface=eth4 dhcp-range=192.168.40.100,192.168.40.200,48h dhcp-option=eth4,3,192.168.40.1 # Router (default gateway) dhcp-option=eth4,6,192.168.40.10 # DNS server dhcp-option=eth4,15,okdlab.local # Domain name # static ip dhcp-host=bc:24:11:8e:8f:08,192.168.40.30,bootstrap dhcp-host=BC:24:11:5C:CE:E9,192.168.40.10,dns1 dhcp-host=bc:24:11:ad:f4:05,192.168.40.20,storage dhcp-host=BC:24:11:06:95:DF,192.168.40.40,bastion dhcp-host=bc:24:11:b6:02:03,192.168.40.51,control-plane-1 dhcp-host=bc:24:11:67:e1:67,192.168.40.52,control-plane-2 dhcp-host=bc:24:11:b1:47:91,192.168.40.53,control-plane-3 dhcp-host=bc:24:11:06:90:c7,192.168.40.61,compute-1 dhcp-host=bc:24:11:60:de:b9,192.168.40.62,compute-2
Konfiguracja maszyn wirtualnych Proxmox
Nazwa domeny: okdlab.local
Nazwa klastra: testcluster
| LP | Nazwa DNS | Adres ip | vCPU | vRAM | vHDD | System Operacyjny | Funkcja |
|---|---|---|---|---|---|---|---|
| 1 | dns1.okdlab.local | 192.168.40.10 | 2 | 2 GB | 16 GB | Fedora Server 41 | DNS dla klastra |
| 2 | storage.okdlab.local | 192.168.40.20 | 2 | 4 GB | 128 GB | Fedora Server 41 | Storage NFS dla klastra |
| 2 | bootstrap.testcluster.okdlab.local | 192.168.40.30 | 4 | 16 GB | 128 GB | Fedora CoreOS 39 | Bootstrap node |
| 3 | bastion.okdlab.local | 192.168.40.40 | 4 | 4 GB | 128 GB | Fedora Server 41 | Haproxy Load balancer / instalacja |
| 4 | control-plane-1.testcluster.okdlab.local | 192.168.40.51 | 4 | 16 GB | 128 GB | Fedora CoreOS 39 | Master node |
| 5 | control-plane-2.testcluster.okdlab.local | 192.168.40.52 | 4 | 16 GB | 128 GB | Fedora CoreOS 39 | Master node |
| 6 | control-plane-3.testcluster.okdlab.local | 192.168.40.53 | 4 | 16 GB | 128 GB | Fedora CoreOS 39 | Master node |
| 7 | compute-1.testcluster.okdlab.local | 192.168.40.61 | 4 | 16 GB | 128 GB | Fedora CoreOS 39 | Worker node |
| 8 | compute-2.testcluster.okdlab.local | 192.168.40.62 | 4 | 16 GB | 128 GB | Fedora CoreOS 39 | Worker node |
Przygotowanie maszyny wirtualnej dns1
Podstawą prawidłowego działania klastra OKD (OpenShift) jest sprawnie działający serwer DNS. W tym przypadku rolę serwera DNS będzie pełniła maszyna wirtualna z systemem Fedora Server 41 oraz usługą dns w postaci demona named (bind). Obraz systemu jest do pobrania z tego linku https://fedoraproject.org/server/download. Po przegraniu obrazu na isostore Proxmoxa możemy rozpocząć instalację systemu.

Tworzymy nową maszynę wirtualną o id 4010 i nazwie dns1 z podanymi parametrami:
- Machine : q35, Qemu Agent (włączone)
- 16 GB HDD, SCSI VirtIO Single, Cache: Write Back
- 2 vCPU – 2 x Sockets, Enable NUMA (włączone) , Type: Host
- 2 GB RAM , Balloning Device (włączone)
- Bridge: vmbr4, Model: VirtIO
Przed pierwszym uruchomieniem kopiujemy MAC address maszyny do /etc/dnsmasq.d/vnet na maszynie LXC dnsmasq

Na czas aktualizacji systemu oraz instalacji potrzebnego oprogramowania ustawiamy tymczasowy dns. W tym przypadku jest to adres głównego routera dla całej sieci czyli 192.168.8.1
# enp6s18 to nazwa interfejsu sieciowego, a 192.168.8.1 to adres działającego serwera DNS w sieci np. głównego routera resolvectl dns enp6s18 192.168.8.1 # aktualizacja systemu dnf update # w razie problemów z działaniem internetu po aktualizacji ponownie wykonać resolvectl # instalacja serwera dns named dnf -y install bind bind-utils
Konfiguracja usługi named
Po skończonej instalacji i aktualizacji można teraz teraz ustawić odpowiednią konfigurację serwera dns named dla poprawnej obsługi zapytań forward i rewerse dla domeny okdlab.local.
options {
listen-on port 53 { 127.0.0.1; 192.168.40.10; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { localhost; 192.168.40.0/24; };
allow-transfer { localhost; };
allow-recursion { localhost; 192.168.40.0/24; };
recursion yes;
forwarders {
192.168.8.1; # local router dns
1.1.1.1; # cloudflare-dns
8.8.8.8; # google-public-dns-a
8.8.4.4; # google-public-dns-b
};
dnssec-validation auto;
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
geoip-directory "/usr/share/GeoIP";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
include "/etc/crypto-policies/back-ends/bind.config";
max-ncache-ttl 0;
};
logging {
category notify { zone_transfer_log; };
category xfer-in { zone_transfer_log; };
category xfer-out { zone_transfer_log; };
channel zone_transfer_log {
file "/var/named/log/transfer.log" versions 10 size 50m;
print-time yes;
print-category yes;
print-severity yes;
severity info;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "okdlab.local" {
type primary;
file "/etc/named/zones/db.okdlab.local";
allow-update { none; };
};
zone "40.168.192.in-addr.arpa" {
type primary;
file "/etc/named/zones/db.192.168.40";
allow-transfer { none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";Przygotowujemy plik strefy dla domeny okdlab.local
$TTL 4h
@ IN SOA dns1.okdlab.local. root.okdlab.local. (
2024111707 ; Serial
2H ; Refresh
30M ; Retry
2W ; Expire
1W ; Minimum TTL
)
; name servers - NS records
IN NS dns1.okdlab.local.
; name servers - A records
dns1.okdlab.local. IN A 192.168.40.10
; bastion, storage A records
bastion.okdlab.local. IN A 192.168.40.40
storage.okdlab.local. IN A 192.168.40.20
; OpenShift Container Platform Cluster - A records
bootstrap.testcluster.okdlab.local. IN A 192.168.40.30
control-plane-1.testcluster.okdlab.local. IN A 192.168.40.51
control-plane-2.testcluster.okdlab.local. IN A 192.168.40.52
control-plane-3.testcluster.okdlab.local. IN A 192.168.40.53
compute-1.testcluster.okdlab.local. IN A 192.168.40.61
compute-2.testcluster.okdlab.local. IN A 192.168.40.62
; OpenShift internal cluster IPs - A records
api.testcluster.okdlab.local. IN A 192.168.40.40
api-int.testcluster.okdlab.local. IN A 192.168.40.40
*.apps.testcluster.okdlab.local. IN A 192.168.40.40
etcd-0.testcluster.okdlab.local. IN A 192.168.40.51
etcd-1.testcluster.okdlab.local. IN A 192.168.40.52
etcd-2.testcluster.okdlab.local. IN A 192.168.40.53
console-openshift-console.apps.testcluster.okdlab.local. IN A 192.168.40.40
oauth-openshift.apps.testcluster.okdlab.local. IN A 192.168.40.40
; OpenShift internal cluster IPs - SRV records
_etcd-server-ssl._tcp.testcluster.okdlab.local. 86400 IN SRV 0 10 2380 etcd-0.testcluster
_etcd-server-ssl._tcp.testcluster.okdlab.local. 86400 IN SRV 0 10 2380 etcd-1.testcluster
_etcd-server-ssl._tcp.testcluster.okdlab.local. 86400 IN SRV 0 10 2380 etcd-2.testclusterPrzygotowujemy plik strefy odwrotnej dla adresacji 192.168.40
$TTL 4h
@ IN SOA dns1.okdlab.local. root.okdlab.local. (
2024111707 ; Serial
2H ; Refresh
30M ; Retry
2W ; Expire
1W ; Minimum TTL
)
; name servers - NS records
IN NS dns1.okdlab.local.
10 IN PTR dns1.okdlab.local.
; name servers - PTR records
40 IN PTR bastion.okdlab.local.
20 IN PTR storage.okdlab.local.
; OpenShift Container Platform Cluster - PTR records
30 IN PTR bootstrap.testcluster.okdlab.local.
51 IN PTR control-plane-1.testcluster.okdlab.local.
52 IN PTR control-plane-2.testcluster.okdlab.local.
53 IN PTR control-plane-3.testcluster.okdlab.local.
61 IN PTR compute-1.testcluster.okdlab.local.
62 IN PTR compute-2.testcluster.okdlab.local.
40 IN PTR api.testcluster.okdlab.local.
40 IN PTR api-int.testcluster.okdlab.local.Na koniec należy ustawić odpowiednie uprawnienia i uruchomić usługę dns.
chown -R root:named /etc/named/ chmod 640 /etc/named/zones/* mkdir /var/named/log/ chown named:named /var/named/log/ chmod 700 /var/named/log/ restorecon -RFv /var/named/log/ sudo systemctl enable named sudo systemctl start named sudo systemctl status named
Dodać odpowiednie zezwolenia na ruch w firewallu.
firewall-cmd --permanent --add-service=dns firewall-cmd --reload firewall-cmd --list-all
Aby poprawnie działało lokalne rozwiązywanie nazw należy wyłączyć split dns usuwając usługę systemd-resolved
systemctl status systemd-resolved systemctl stop systemd-resolved systemctl disable systemd-resolved # usunąć link sudo rm /etc/resolv.conf # utworzyć od nowa vim /etc/resolv.conf search okdlab.local nameserver 127.0.0.1 # restart servera reboot
Od tej pory to usługa NetworkManager przejmie generowanie /etc/resolv.conf. Teraz należy zdefiniować domyślny adres serwera dns 127.0.0.1 dla maszyny dns1.okdlab.local
resolvectl dns enp6s18 127.0.0.1
oraz zapisać konfigurację dns na stałe. Jeśli tego nie zrobiliśmy wcześniej to należy również ustawić tutaj statystyczny adres ip używając polecenia
nmcli connection modify enp6s18 ipv4.addresses 192.168.40.10/24 ipv4.gateway 192.168.40.1 ipv4.dns 127.0.0.1 ipv4.method manual
lub edytując bezpośrednio
[connection] id=enp6s18 uuid=2f649e27-efa1-3f4a-82b4-4b942c271910 type=ethernet autoconnect-priority=-999 interface-name=enp6s18 timestamp=1732016574 [ethernet] [ipv4] address1=192.168.40.10/24,192.168.40.1 dns=127.0.0.1; method=manual [ipv6] method=ignore [proxy]
Zmiany w konfiguracji sieciowej należy odświeżyć poleceniem
nmcli connection reload systemctl restart NetworkManager
Weryfikacja działania usługi dns dla domeny okdlab.local
dig +short @localhost A dns1.okdlab.local dig +short @localhost A bastion.okdlab.local dig +short @localhost A api.testcluster.okdlab.local dig +short @localhost A control-plane-1.testcluster.okdlab.local dig +short @localhost A compute-1.testcluster.okdlab.local dig +short @localhost -x 192.168.40.52 dig +short @localhost -x 192.168.40.62 nslookup bastion.okdlab.local ping dns1.okdlab.local

Wykorzystanie zasobów po instalacji i konfiguracji serwera dns1
Informacje tu zawarte pozwolą w przyszłości określić dokładne zapotrzebowanie na zasoby vCPU/vRAM/vHDD maszyny wirtualnej.






