En esta página, se muestra cómo configurar el balanceador de cargas de Seesaw para un clúster de GKE On-Prem.
Los clústeres de GKE On-Prem pueden ejecutarse con uno de los dos modos de balanceo de cargas: integrado o manual. Para usar el balanceador de cargas de Seesaw, usa el modo de balanceo de cargas manual.
Pasos comunes a todo el balanceo de cargas manual
Antes de configurar tu balanceador de cargas de Seesaw, realiza los siguientes pasos, que son comunes a cualquier configuración de balanceo de cargas manual:
Reserva direcciones IP y una VIP para VM de Seesaw
Reserva dos direcciones IP para un par de VM de Seesaw. También reserva una única VIP para el par de VM de Seesaw. Las tres direcciones deben estar en la misma VLAN que los nodos del clúster.
Crea VM de Seesaw
Crea dos VM seguras en tu entorno de vSphere para ejecutar un par activo-pasivo de Seesaw. Se recomienda el kernel 4.15 de Ubuntu 18.04 + Linux para las VM de Seesaw, aunque hay otras versiones de SO que funcionan con Seesaw.
Los requisitos para las dos VM son los siguientes:
Cada VM tiene una NIC llamada ens192. Esta NIC se configura con la dirección IP de la VM.
Cada VM tiene una NIC llamada ens224. Esta NIC no necesita una dirección IP.
Las VM deben estar en la misma VLAN que los nodos del clúster.
El grupo de puertos de ens224 debe permitir cambios de dirección MAC y transmisiones falsificadas. Esto se debe a que las VM de Seesaw usan el Protocolo de redundancia de router virtual (VRRP), lo que significa que Seesaw debe configurar las direcciones MAC de las interfaces de red. En particular, Seesaw debe poder configurar la dirección MAC como una dirección MAC de VRRP con el formato 00-00-5E-00-01-[VRID], donde [VIRD] es un identificador de router virtual del par de Seesaw.
Puedes configurarlo en la interfaz de usuario de vSphere de la configuración de la política del grupo de puertos.
Compilación de Seesaw
Para compilar los objetos binarios de Seesaw, ejecuta la siguiente secuencia de comandos en una máquina con Golang instalado:
#!/bin/bash
set -e
DEST=$PWD/seesaw_files
export GOPATH=$DEST/seesaw
SEESAW=$GOPATH/src/github.com/google/seesaw
mkdir -p $GOPATH
cd $GOPATH
sudo apt -y install libnl-3-dev libnl-genl-3-dev
git clone https://github.com/google/seesaw.git $SEESAW
cd $SEESAW
GO111MODULE=on GOOS=linux GOARCH=amd64 make install
cp -r $GOPATH/bin $DEST/
mkdir -p $DEST/cfg
cp etc/seesaw/watchdog.cfg etc/systemd/system/seesaw_watchdog.service $DEST/cfg/
sudo rm -rf $GOPATH
Esto genera un directorio seesaw_files
que contiene los archivos binarios y de configuración de Seesaw. Para ver los archivos, ejecuta el comando tree
:
tree seesaw_files
El resultado muestra los directorios y los archivos generados:
seesaw_files/ ├── bin │ ├── seesaw_cli │ ├── seesaw_ecu │ ├── seesaw_engine │ ├── seesaw_ha │ ├── seesaw_healthcheck │ ├── seesaw_ncc │ └── seesaw_watchdog └── cfg ├── seesaw_watchdog.service └── watchdog.cfg 2 directories, 9 files
Exporta variables de entorno
Antes de configurar tus VM de Seesaw, debes exportar muchas variables de entorno.
En cada VM de Seesaw, exporta las siguientes variables de entorno:
NODE_IP
: la dirección IP de la VM de Seesaw.PEER_IP
: la dirección IP de la otra VM de Seesaw.NODE_NETMASK
: La longitud del prefijo del rango de CIDR de los nodos de tu clúster.VIP
: el VIP que reservaste para el par de VM de Seesaw.VRID
: el identificador de router virtual que deseas usar para el par de Seesaw.
A continuación, se muestra un ejemplo:
export NODE_IP=203.0.113.2 export PEER_IP=203.0.113.3 export NODE_NETMASK=25 export VIP=203.0.113.4 export VIRD=128
Configura VM de Seesaw
Copia el directorio seesaw_files
a las dos VM de Seesaw.
En cada VM de Seesaw, en el directorio seesaw_files
, ejecuta la siguiente secuencia de comandos:
# execute_seesaw.sh
#!/bin/bash
set -e
# Tools
apt -y install ipvsadm libnl-3-dev libnl-genl-3-dev
# Module
modprobe ip_vs
modprobe nf_conntrack_ipv4
modprobe dummy numdummies=1
echo "ip_vs" > /etc/modules-load.d/ip_vs.conf
echo "nf_conntrack_ipv4" > /etc/modules-load.d/nf_conntrack_ipv4.conf
echo "dummy" > /etc/modules-load.d/dummy.conf
echo "options dummy numdummies=1" > /etc/modprobe.d/dummy.conf
# dummy interface
ip link add dummy0 type dummy || true
cat > /etc/systemd/network/10-dummy0.netdev <<EOF
[NetDev]
Name=dummy0
Kind=dummy
EOF
DIR=./seesaw_files
mkdir -p /var/log/seesaw
mkdir -p /etc/seesaw
mkdir -p /usr/local/seesaw
cp $DIR/bin/* /usr/local/seesaw/
chmod a+x /usr/local/seesaw/*
cp $DIR/cfg/watchdog.cfg /etc/seesaw
cat > /etc/seesaw/seesaw.cfg <<EOF
[cluster]
anycast_enabled = false
name = bundled-seesaw-onprem
node_ipv4 = $NODE_IP
peer_ipv4 = $PEER_IP
vip_ipv4 = $VIP
vrid = $VRID
[config_server]
primary = 127.0.0.1
[interface]
node = ens192
lb = ens224
EOF
cat > /etc/seesaw/cluster.pb <<EOF
seesaw_vip: <
fqdn: "seesaw-vip."
ipv4: "$VIP/$NODE_NETMASK"
status: PRODUCTION
>
node: <
fqdn: "node.$NODE_IP."
ipv4: "$NODE_IP/$NODE_NETMASK"
>
node: <
fqdn: "node.$PEER_IP."
ipv4: "$PEER_IP/$NODE_NETMASK"
>
EOF
cp $DIR/cfg/seesaw_watchdog.service /etc/systemd/system
systemctl --system daemon-reload
Reconfiguración de Seesaw
La siguiente configuración especifica las direcciones IP de los nodos del clúster. También especifica las VIP de los planos de control y los controladores de entrada. Como está escrita, la configuración especifica estas direcciones:
100.115.222.143 es el VIP para el plano de control del administrador.
100.115.222.144 es el VIP para el controlador de entrada del clúster del administrador.
100.115.222.146 es el VIP para el plano de control del usuario.
100.115.222.145 es la VIP del controlador de entrada del clúster de usuarios.
Las direcciones de los nodos del clúster de administrador son 100.115.222.163, 100.115.222.164, 100.115.222.165, y 100.115.222.166.
Las direcciones de nodo del clúster de usuario son 100.115.222.167, 100.115.222.168, y 100.115.222.169.
Edita la configuración para que contenga las direcciones IP y VIP que elegiste para tus clústeres del administrador y de usuarios. Luego, en cada VM de Seesaw, agrega la configuración en /etc/seesaw/cluster.pb
:
Observa que el plano de control del clúster de usuarios se implementa como un servicio en el clúster del administrador. Por lo tanto, las direcciones IP del nodo en user-1-control-plane
son las direcciones de los nodos del clúster del administrador.
vserver: <
name: "admin-control-plane"
entry_address: <
fqdn: "admin-control-plane"
ipv4: "100.115.222.143/32"
>
rp: "cloudysanfrancisco@gmail.com"
vserver_entry: <
protocol: TCP
port: 443
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
backend: <
host: <
fqdn: "admin-1"
ipv4: "100.115.222.163/32"
>
>
backend: <
host: <
fqdn: "admin-2"
ipv4: "100.115.222.164/32"
>
>
backend: <
host: <
fqdn: "admin-3"
ipv4: "100.115.222.165/32"
>
>
backend: <
host: <
fqdn: "admin-4"
ipv4: "100.115.222.166/32"
>
>
>
vserver: <
name: "admin-ingress-controller"
entry_address: <
fqdn: "admin-ingress-controller"
ipv4: "100.115.222.144/32"
>
rp: "cloudysanfrancisco@gmail.com"
vserver_entry: <
protocol: TCP
port: 80
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
vserver_entry: <
protocol: TCP
port: 443
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
backend: <
host: <
fqdn: "admin-1"
ipv4: "100.115.222.163/32"
>
>
backend: <
host: <
fqdn: "admin-2"
ipv4: "100.115.222.164/32"
>
>
backend: <
host: <
fqdn: "admin-3"
ipv4: "100.115.222.165/32"
>
>
backend: <
host: <
fqdn: "admin-4"
ipv4: "100.115.222.166/32"
>
>
>
vserver: <
name: "user-1-control-plane"
entry_address: <
fqdn: "user-1-control-plane"
ipv4: "100.115.222.146/32"
>
rp: "cloudysanfrancisco@gmail.com"
vserver_entry: <
protocol: TCP
port: 443
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
backend: <
host: <
fqdn: "admin-1"
ipv4: "100.115.222.163/32"
>
>
backend: <
host: <
fqdn: "admin-2"
ipv4: "100.115.222.164/32"
>
>
backend: <
host: <
fqdn: "admin-3"
ipv4: "100.115.222.165/32"
>
>
backend: <
host: <
fqdn: "admin-4"
ipv4: "100.115.222.166/32"
>
>
>
vserver: <
name: "user-1-ingress-controller"
entry_address: <
fqdn: "user-1-ingress-controller"
ipv4: "100.115.222.145/32"
>
rp: "cloudysanfrancisco@gmail.com"
vserver_entry: <
protocol: TCP
port: 80
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
vserver_entry: <
protocol: TCP
port: 443
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
backend: <
host: <
fqdn: "user-1"
ipv4: "100.115.222.167/32"
>
>
backend: <
host: <
fqdn: "user-2"
ipv4: "100.115.222.168/32"
>
>
backend: <
host: <
fqdn: "user-3"
ipv4: "100.115.222.169/32"
>
>
>
Inicia el servicio de Seesaw
En cada VM de Seesaw, ejecuta el siguiente comando:
systemctl --now enable seesaw_watchdog.service
Ahora, Seesaw se ejecuta en ambas VM de Seesaw. Puedes verificar los registros en /var/log/seesaw/
.
Modifica el archivo de configuración del clúster
Antes de crear un clúster, debes generar un archivo de configuración. Completa el archivo de configuración del clúster como se describe en Modifica el archivo de configuración.
En particular, configura lbmode
como “Manual”. Además, completa los campos manuallbspec
y vips
en admincluster
y usercluster
. Por ejemplo:
admincluster: manuallbspec: ingresshttpnodeport: 32527 ingresshttpsnodeport: 30139 controlplanenodeport: 30968 vips: controlplanevip: "100.115.222.143" ingressvip: "100.115.222.144" usercluster: manuallbspec: ingresshttpnodeport: 30243 ingresshttpsnodeport: 30879 controlplanenodeport: 30562 vips: controlplanevip: "100.115.222.146" ingressvip: "100.115.222.145" lbmode: "Manual"
Problemas conocidos
Por el momento, la validación del balanceador de cargas de gkectl
no es compatible con Seesaw y podría mostrar errores. Si estás instalando o actualizando clústeres que usan Seesaw, pasa la marca --skip-validation-load-balancer
.
Para obtener más información, consulta Soluciona problemas.