NOTE

En caso de tener que aislar las VMs en una red interna en 1.2. Montar Gateway hay instrucciones para montar una VM como una Gateway NAT entre la red interna (Host-Only) y la red de las máquinas Hosts (Bridged)

TIP

Se recomienda partir de los ficheros de https://github.com/cragr/okd4_files e ir cambiando las IPs según correspondan. (La configuración DHCP no se incluye)

git clone https://github.com/cragr/okd4_files

Importante

En AlmaLinux 9 si no se configura el firewall con lo contrario estará todo denegado por defecto. Por lo tanto los comandos de configuración firewall-cmd son fundamentales. Una forma intuitiva de saber que lo hicimos mal es si al intentar acceder al servicio desde otra máquina el puerto está fitered.

Configuración de DHCP

Reservar IP según MAC

Para reservar una IP según la MAC usando dhcpd en AlmaLinux, edita el archivo de configuración de dhcpd, normalmente ubicado en:

/etc/dhcp/dhcpd.conf

Se agregan entradas de “host” indicando la MAC y la IP reservada. Por ejemplo:

host nombre_del_host {
   hardware ethernet 00:11:22:33:44:55;
   fixed-address 192.168.1.100;
}

Asegurarse de que la IP esté dentro del subnet definido o sea coherente con la red configurada en dhcpd.conf. Ejemplo de un bloque subnet:

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8;
}

Nota

Como nosotros solo vamos a tener en la red máquinas con IPs reservadas según MAC así que podemos omitir el range.

subnet 192.168.1.0 netmask 255.255.255.0 {
   option routers 192.168.1.1;
   option domain-name-servers 8.8.8.8;
}

Ejemplo completo de configuración

Basado en los datos proporcionados Macs e ips vmware.csv:

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
 
 
default-lease-time 600;
max-lease-time 7200;
authoritative;
 
subnet 192.168.112.0 netmask 255.255.255.0 {
#   range 192.168.112.200 192.168.112.210;
#   option subnet-mask 255.255.255.0;
    option routers 192.168.112.254;
    option domain-name-servers 192.168.112.102;
    option domain-name "okd.local";
 
 
# Reservas estáticas
 
	host Manager {
	    hardware ethernet 00:0C:29:CE:C7:EA;
	    fixed-address 192.168.112.102;
	}
 
	host Compute1 {
	    hardware ethernet 00:0C:29:6D:79:61;
	    fixed-address 192.168.112.104;
	}
 
	host Compute2 {
	    hardware ethernet 00:0C:29:AB:F1:5F;
	    fixed-address 192.168.112.105;
	}
 
	host Bootstrap {
	    hardware ethernet 00:0C:29:F0:1C:B8;
	    fixed-address 192.168.112.101;
	}
 
	host Control {
	    hardware ethernet 00:0C:29:C4:66:56;
	    fixed-address 192.168.112.103;
	}
}
cp dhcpd.conf /etc/dhcp/dhcpd.conf
sudo systemctl enable dhcpd
sudo systemctl stop dhcpd
sudo systemctl start dhcpd
sudo systemctl status dhcpd

Configuración de DNS

Ficheros

Configuración de named.conf

Basado en la red 192.168.112.0/24:

options {
    listen-on port 53 { 127.0.0.1; 192.168.112.102; };
    # listen-on-v6 port 53 { ::1; };
    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.112.0/24; };
 
    recursion yes;
 
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };
 
    dnssec-enable yes;
    dnssec-validation yes;
 
    bindkeys-file "/etc/named.root.key";
    managed-keys-directory "/var/named/dynamic";
 
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};
 
logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
};
 
zone "." IN {
    type hint;
    file "named.ca";
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/named/named.conf.local";

Configuración de named.conf.local

zone "okd.local" {
    type master;
    file "/etc/named/zones/db.okd.local"; # zone file path
};
 
zone "112.168.192.in-addr.arpa" {
    type master;
    file "/etc/named/zones/db.192.168.112";  # 192.168.112.0/24 subnet
};

Configuración de db.okd.local

$TTL    604800
@       IN      SOA     okd4-services.okd.local. admin.okd.local. (
                  1     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800     ; Negative Cache TTL
)
 
; name servers - NS records
    IN      NS      okd4-services
 
; name servers - A records
okd4-services.okd.local.          IN      A       192.168.112.102
 
; OpenShift Container Platform Cluster - A records
okd4-bootstrap.lab.okd.local.        IN      A      192.168.112.101
okd4-control-plane-1.lab.okd.local.  IN      A      192.168.112.103
okd4-compute-1.lab.okd.local.        IN      A      192.168.112.104
okd4-compute-2.lab.okd.local.        IN      A      192.168.112.105
 
; OpenShift internal cluster IPs - A records
api.lab.okd.local.                   IN    A    192.168.112.102
api-int.lab.okd.local.                IN    A    192.168.112.102
*.apps.lab.okd.local.                 IN    A    192.168.112.102
etcd-0.lab.okd.local.                 IN    A    192.168.112.103
console-openshift-console.apps.lab.okd.local.     IN     A     192.168.112.102
oauth-openshift.apps.lab.okd.local.                IN     A     192.168.112.102
 
; OpenShift internal cluster IPs - SRV records
_etcd-server-ssl._tcp.lab.okd.local.    86400     IN    SRV     0    10    2380    etcd-0.lab

Configuración de db.192.168.112

$TTL    604800
@       IN      SOA     okd4-services.okd.local. admin.okd.local. (
                  6     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800     ; Negative Cache TTL
)
 
; name servers - NS records
    IN      NS      okd4-services.okd.local.
 
; name servers - PTR records
102    IN    PTR    okd4-services.okd.local.
 
; OpenShift Container Platform Cluster - PTR records
101    IN    PTR    okd4-bootstrap.lab.okd.local.
103    IN    PTR    okd4-control-plane-1.lab.okd.local.
104    IN    PTR    okd4-compute-1.lab.okd.local.
105    IN    PTR    okd4-compute-2.lab.okd.local.
 
102    IN    PTR    api.lab.okd.local.
102    IN    PTR    api-int.lab.okd.local.

Donde colocar los ficheros de configuración y lanzado del servicio.

sudo cp named.conf /etc/named.conf 
sudo cp named.conf.local /etc/named/ 
sudo mkdir /etc/named/zones 
sudo cp db* /etc/named/zones

sudo systemctl enable named
sudo systemctl start named
sudo systemctl status named

sudo firewall-cmd --permanent --add-port=53/udp 
sudo firewall-cmd --reload

HAproxy

Para configurar haproxy según el esquema anterior uso el fichero de configuración /etc/haproxy/haproxy.cfg:

# Global settings
global
    maxconn     20000
    log         /dev/log local0 info
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          300s
    timeout server          300s
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 20000

listen stats
    bind :9000
    mode http
    stats enable
    stats uri /

frontend okd4_k8s_api_fe
    bind :6443
    default_backend okd4_k8s_api_be
    mode tcp
    option tcplog

backend okd4_k8s_api_be
    balance source
    mode tcp
    server okd4-bootstrap 192.168.112.101:6443 check
    server okd4-control-plane-1 192.168.112.103:6443 check

frontend okd4_machine_config_server_fe
    bind :22623
    default_backend okd4_machine_config_server_be
    mode tcp
    option tcplog

backend okd4_machine_config_server_be
    balance source
    mode tcp
    server okd4-bootstrap 192.168.112.101:22623 check
    server okd4-control-plane-1 192.168.112.103:22623 check

frontend okd4_http_ingress_traffic_fe
    bind :80
    default_backend okd4_http_ingress_traffic_be
    mode tcp
    option tcplog

backend okd4_http_ingress_traffic_be
    balance source
    mode tcp
    server okd4-compute-1 192.168.112.104:80 check
    server okd4-compute-2 192.168.112.105:80 check

frontend okd4_https_ingress_traffic_fe
    bind :443
    default_backend okd4_https_ingress_traffic_be
    mode tcp
    option tcplog

backend okd4_https_ingress_traffic_be
    balance source
    mode tcp
    server okd4-compute-1 192.168.112.104:443 check
    server okd4-compute-2 192.168.112.105:443 check

En el siguiente bloque de código se descarga el binario, se establece la configuración, se permite establecer conexiones salientes a cualquier IP y puerto (Explicacion setsebool) y se modifican las reglas del firewall necesarias.

sudo dnf install haproxy -y
sudo cp haproxy.cfg /etc/haproxy/haproxy.cfg
sudo setsebool -P haproxy_connect_any 1 
sudo systemctl enable haproxy
sudo systemctl start haproxy
sudo systemctl status haproxy

sudo firewall-cmd --permanent --add-port=6443/tcp 
sudo firewall-cmd --permanent --add-port=22623/tcp 
sudo firewall-cmd --permanent --add-service=http 
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

HTTPD

Se instala Apache, se cambia el puerto de escucha al 8080 para no ocupar el 80 que usaremos más tarde con algún servicio de OKD (creo jajas). Sirve para permitir que el servidor web pueda leer archivos del directorio del usuario (lo usan en la guía de Craig, no sé porqué en verdad).

sudo dnf install -y httpd
sudo sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf
sudo setsebool -P httpd_read_user_content 1 
sudo systemctl enable httpd
sudo systemctl start httpd

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload