Bilanciamento del carico con Seesaw

Questa pagina mostra come configurare il bilanciatore del carico di Seesaw per un cluster GKE On-Prem.

I cluster GKE On-Prem possono essere eseguiti con una delle due modalità di bilanciamento del carico: integrata o manuale. Per utilizzare il bilanciatore del carico di Seesaw, devi utilizzare la modalità di bilanciamento del carico manuale.

Passaggi comuni a tutto il bilanciamento del carico manuale

Prima di configurare il bilanciatore del carico di Seesaw, esegui i passaggi riportati di seguito, che sono comuni a qualsiasi configurazione del bilanciamento del carico manuale:

Prenotazione di indirizzi IP e VIP per Seesaw VM

Prenota due indirizzi IP per una coppia di VM di Seesaw. Prenota anche un singolo VIP per la coppia di VM di Seesaw. Tutti e tre questi indirizzi devono trovarsi sulla stessa VLAN dei tuoi nodi cluster.

Creazione di VM Seesaw

Crea due VM pulite nel tuo ambiente vSphere per eseguire una coppia Seesaw attiva-passiva. Ubuntu 18.04 + Linux kernel 4.15 è consigliato per le VM di Seesaw, anche se esistono altre versioni del sistema operativo che funzionano con Seesaw.

I requisiti per le due VM sono i seguenti:

  • Ogni VM ha un NIC denominato ens192. Questo NIC è configurato con l'indirizzo IP della VM.

  • Ogni VM ha un NIC denominato ens224. Questo NIC non richiede un indirizzo IP.

  • Le VM devono trovarsi sulla stessa VLAN dei tuoi nodi cluster.

  • Il gruppo di porte di ens224 deve consentire le modifiche dell'indirizzo MAC e le trasmissioni contraffatte. Questo perché le VM di Seesaw utilizzano il protocollo di ridondanza virtuale (VRRP), il che significa che deve essere in grado di configurare gli indirizzi MAC delle interfacce di rete. In particolare, Seesaw deve essere in grado di impostare l'indirizzo MAC su un indirizzo MAC VRVR nel formato 00-00-5E-00-01-[VRID], dove [VIRD] è un identificatore di router virtuale per la coppia Seesaw.

    Puoi configurare questa opzione nell'interfaccia utente vSphere nelle impostazioni dei criteri del gruppo di porte.

    Screenshot che consente di consentire modifiche di indirizzi MAC e commit falsi
    Consentire modifiche agli indirizzi MAC e commit falsi (fai clic per ingrandire)

Compilazione di altalena

Per creare i programmi binari di Seesaw, esegui il seguente script su una macchina su cui è installato Golang:

#!/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

Viene generata una directory seesaw_files contenente i file binari di configurazione e di configurazione di Seesaw. Per vedere i file, esegui il comando tree:

tree seesaw_files

L'output mostra le directory e i file generati:

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

Esportazione delle variabili di ambiente

Prima di configurare le VM di Seesaw, devi esportare diverse variabili di ambiente.

In ogni VM di Seesaw, esporta le seguenti variabili di ambiente:

  • NODE_IP: l'indirizzo IP della VM di Seesaw.

  • PEER_IP: l'indirizzo IP dell'altra VM di Seesaw.

  • NODE_NETMASK: la lunghezza del prefisso dell'intervallo CIDR per i nodi del cluster.

  • VIP: il VIP che hai prenotato per la coppia Seesaw di VM.

  • VRID: l'identificatore del router virtuale che vuoi utilizzare per la coppia Seesaw.

Ecco un esempio:

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

Configurazione delle VM di Seesaw

Copia la directory seesaw_files nelle due VM di Seesaw.

Su ogni VM di Seesaw, nella directory seesaw_files, esegui il seguente script:

# 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

Riconfigurazione di Seesaw

La configurazione seguente specifica gli indirizzi IP per i nodi del cluster. Inoltre, specifica i VIP per i tuoi piani di controllo e i controller in entrata. Come spiegato, la configurazione specifica i seguenti indirizzi:

  • 100.115.222.143 è il VIP del piano di controllo dell'amministratore.

  • 100.115.222.144 è il VIP per il controller Ingress in cluster di amministrazione.

  • 100.115.222.146 è il VIP per il piano di controllo utente.

  • 100.115.222.145 è il VIP per il controller Ingress in cluster utente.

  • Gli indirizzi dei nodi del cluster di amministrazione sono 100.115.222.163, 100.115.222.164, 100.115.222.165 e 100.115.222.166.

  • Gli indirizzi dei nodi del cluster utente sono 100.115.222.167, 100.115.222.168 e 100.115.222.169.

Modifica la configurazione in modo che contenga i VIP e gli indirizzi IP che hai scelto per l'amministrazione e i cluster utente. Quindi, su ogni VM di Seesaw, aggiungi la configurazione a /etc/seesaw/cluster.pb:

Tieni presente che il piano di controllo del cluster utente è implementato come servizio nel cluster di amministrazione. Quindi gli indirizzi IP dei nodi in user-1-control-plane sono gli indirizzi dei nodi del cluster di amministrazione.

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"
    >
  >
>

Avvio del servizio Seesaw

Su ogni VM di Seesaw, esegui il comando seguente:

systemctl --now enable seesaw_watchdog.service

Seesaw è ora in esecuzione su entrambe le VM di Seesaw. Puoi controllare i log nella sezione /var/log/seesaw/.

Modifica del file di configurazione del cluster in corso...

Prima di creare un cluster, occorre generare un file di configurazione del cluster. Compila il file di configurazione del cluster come descritto in Modificare il file di configurazione.

In particolare, imposta lbmode su "Manuale". Inoltre, compila i campi manuallbspec e vips in admincluster e usercluster. Ecco un esempio:

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"

Problemi noti

Attualmente, la convalida del bilanciatore del carico di gkectl non supporta Seesaw e potrebbe restituire errori. Se stai installando o eseguendo l'upgrade dei cluster che utilizzano Seesaw, passa il flag --skip-validation-load-balancer.

Per ulteriori informazioni, consulta la sezione Risoluzione dei problemi.