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