Balanceo de cargas con Seesaw

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.

    Captura de pantalla de permitir cambios de direcciones MAC y confirmaciones falsificadas
    Permite los cambios de dirección MAC y las confirmaciones falsificadas (haz clic para ampliar)

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.