Nesta página, mostramos como configurar o balanceador de carga do Seesaw para um cluster do GKE On-Prem.
Os clusters do GKE On-Prem podem ser executados com um dos dois modos de balanceamento de carga: integrado ou manual. Para usar o balanceador de carga do Seesaw, use o modo de balanceamento de carga manual.
Etapas comuns a todos os balanceamentos de carga manuais
Antes de configurar o balanceador de carga Seesaw, execute as etapas a seguir, que são comuns a qualquer configuração de balanceamento de carga manual:
Como reservar endereços IP e um VIP para VMs do Seesaw
Reserve dois endereços IP para um par de VMs do Seesaw. Também reserve um único VIP para o par de VMs do Seesaw. Todos esses três endereços precisam estar na mesma VLAN que os nós do cluster.
Como criar VMs do Seesaw
Criar duas VMs novas no ambiente do vSphere para executar um par ativo-passivo do Seesaw. O Ubuntu 18.04 + Linux kernel 4.15 é recomendado para as VMs do Seesaw. No entanto, há outras versões do SO que funcionam com o Seesaw.
Os requisitos para as duas VMs são os seguintes:
Cada VM tem uma placa de rede (NIC, na sigla em inglês) chamada ens192. Essa NIC é configurada com o endereço IP da VM.
Cada VM tem uma NIC chamada ens224. Essa NIC não precisa de um endereço IP.
As VMs precisam estar na mesma VLAN que os nós do cluster.
O grupo de portas de ens224 precisa permitir alterações de endereço MAC e transmissões forjadas. Isso ocorre porque as VMs do Seesaw usam o Virtual Router Redundancy Protocol (VRRP). Isso significa que o Seesaw precisa ser capaz de configurar os endereços MAC das interfaces de rede. Em particular, o Seesaw precisa ser capaz de definir o endereço MAC como um endereço MAC VRRP do formato 00-00-5E-00-01-[VRID], em que [VIRD] é um identificador de roteador virtual para o par do Seesaw.
É possível configurá-lo na interface de usuário do vSphere nas configurações de política do grupo de portas.
Como permitir alterações de endereços MAC e confirmações forjadas (clique para ampliar)
Como compilar o Seesaw
Para criar os binários do Seesaw, execute o seguinte script em uma máquina com o 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
Isso gera um diretório seesaw_files
que contém os arquivos de configuração e
binários do Seesaw. Para ver os arquivos, execute o comando tree
:
tree seesaw_files
A saída mostra os diretórios e arquivos gerados:
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
Como exportar variáveis de ambiente
Antes de configurar as VMs do Seesaw, você precisa exportar várias variáveis de ambiente.
Em cada VM do Seesaw, exporte as seguintes variáveis de ambiente:
NODE_IP
: o endereço IP da VM do Seesaw.PEER_IP
: o endereço IP da outra VM do Seesaw.NODE_NETMASK
: o tamanho do prefixo do intervalo CIDR para os nós de cluster.VIP
: o VIP que você reservou para o par de VMs do Seesaw.VRID
: o identificador do roteador virtual que você quer usar para o par do Seesaw.
Veja um exemplo:
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
Como configurar VMs do Seesaw
Copie o diretório seesaw_files
para as duas VMs do Seesaw.
Em cada VM do Seesaw, no diretório seesaw_files
, execute o seguinte 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
Como reconfigurar o Seesaw
A configuração a seguir especifica endereços IP para os nós do cluster. Também especifica VIPs dos planos de controle e controladores de entrada. Na configuração, os endereços a seguir são especificados:
100.115.222.143 é o VIP do plano de controle do administrador.
100.115.222.144 é o VIP do controlador de entrada do cluster de administrador.
100.115.222.146 é o VIP do plano de controle do usuário.
100.115.222.145 é o VIP do controlador de entrada do cluster de usuário.
Os endereços de nó do cluster de administrador são 100.115.222.163, 100.115.222.164, 100.115.222.165 e 100.115.222.166.
Os endereços de nó do cluster de usuário são 100.115.222.167, 100.115.222.168 e 100.115.222.169.
Edite a configuração para que ela contenha os endereços IP e VIPs escolhidos
para os clusters de administrador e de usuário. Em seguida, em cada VM do Seesaw, anexe a
configuração a /etc/seesaw/cluster.pb
:
Observe que o plano de controle do cluster de usuário é implementado como um serviço no
cluster de administrador. Portanto, os endereços IP dos nós em user-1-control-plane
são os
endereços dos nós do cluster de 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"
>
>
>
Como iniciar o serviço do Seesaw
Em cada VM do Seesaw, execute o seguinte comando:
systemctl --now enable seesaw_watchdog.service
Agora, o Seesaw está em execução nas duas VMs do Seesaw. É possível verificar os registros em
/var/log/seesaw/
.
Como modificar o arquivo de configuração do cluster
Antes de criar um cluster, gere um arquivo de configuração do cluster. Preencha o arquivo de configuração do cluster conforme descrito em Modificar o arquivo de configuração.
Especificamente, defina lbmode
como "Manual". Além disso, preencha os campos manuallbspec
e
vips
em admincluster
e usercluster
. Veja um exemplo:
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 conhecidos
No momento, a validação do balanceador de carga de gkectl
não é compatível com o Seesaw e pode
retornar erros. Se você estiver instalando ou atualizando clusters que usem o Seesaw,
transmita na sinalização --skip-validation-load-balancer
.
Para mais informações, consulte Solução de problemas.