Équilibrage de charge avec Seesaw

Cette page explique comment configurer l'équilibreur de charge Seesaw pour un cluster GKE On-Prem.

Les clusters GKE On-Prem peuvent s'exécuter avec l'un des deux modes d'équilibrage de charge : intégré ou manuel. Pour utiliser l'équilibreur de charge Seesaw, utilisez le mode d'équilibrage de charge manuel.

Étapes communes à tout équilibrage de charge manuel

Avant de configurer votre équilibreur de charge Seesaw, suivez les étapes ci-après, qui sont communes à toute configuration d'équilibrage de charge manuel :

Réserver des adresses IP et une adresse IP virtuelle pour les VM Seesaw

Réservez deux adresses IP pour une paire de VM Seesaw. Réservez également une seule adresse IP virtuelle pour la paire de VM Seesaw. Ces trois adresses doivent se trouver sur le même réseau VLAN que les nœuds de votre cluster.

Créer des VM Seesaw

Créez deux VM propres dans votre environnement vSphere pour exécuter une paire active-passive Seesaw. Ubuntu 18.04 + noyau Linux 4.15 est recommandé pour les VM Seesaw, bien qu'il existe d'autres versions d'OS qui fonctionnent avec Seesaw.

Les exigences spécifiques aux deux VM sont les suivantes :

  • Chaque VM possède une carte d'interface réseau appelée ens192. Cette carte d'interface réseau est configurée avec l'adresse IP de la VM.

  • Chaque VM possède une carte d'interface réseau nommée ens224. Cette carte d'interface réseau n'a pas besoin d'adresse IP.

  • Les VM doivent se trouver sur le même réseau VLAN que les nœuds de votre cluster.

  • Le groupe de ports de l'objet ens224 doit autoriser les modifications de l'adresse MAC et les transmissions falsifiées. En effet, les VM Seesaw utilisent le protocole VRRP (Virtual Router Redundancy Protocol), ce qui signifie que Seesaw doit pouvoir configurer les adresses MAC des interfaces réseau. En particulier, Seesaw doit être en mesure de définir l'adresse MAC sur une adresse MAC VRRP au format 00-00-5E-00-01-[VRID], où [VRID] est un identifiant de routeur virtuel pour la paire Seesaw.

    Vous pouvez configurer cela dans l'interface utilisateur de vSphere dans les paramètres de stratégie du groupe de ports.

    Capture d'écran de l'autorisation des modifications d'adresses MAC et des commits falsifiés
    Autoriser les modifications d'adresse MAC et les commits falsifiés (cliquez pour agrandir)

Compiler Seesaw

Pour créer les binaires Seesaw, exécutez le script suivant sur une machine sur laquelle Golang est installé :

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

Cela génère un répertoire seesaw_files qui contient les binaires et les fichiers de configuration de Seesaw. Pour afficher les fichiers, exécutez la commande tree :

tree seesaw_files

Le résultat affiche les répertoires et les fichiers générés :

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

Exporter des variables d'environnement

Avant de configurer vos VM Seesaw, vous devez exporter plusieurs variables d'environnement.

Sur chaque VM Seesaw, exportez les variables d'environnement suivantes :

  • NODE_IP : Adresse IP de la VM Seesaw.

  • PEER_IP : Adresse IP de l'autre VM Seesaw.

  • NODE_NETMASK : Longueur du préfixe de la plage CIDR de vos nœuds de cluster.

  • VIP : Adresse IP virtuelle que vous avez réservée pour la paire de VM Seesaw.

  • VRID : Identifiant de routeur virtuel que vous souhaitez utiliser pour la paire Seesaw.

Voici un exemple :

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 VRID=128

Configurer des VM Seesaw

Copiez le répertoire seesaw_files sur les deux VM Seesaw.

Sur chaque VM Seesaw, dans le répertoire seesaw_files, exécutez le script suivant :

# 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

Reconfigurer Seesaw

La configuration suivante spécifie les adresses IP de vos nœuds de cluster. Elle spécifie également les adresses IP virtuelles de vos plans de contrôle et de vos contrôleurs d'entrée. Comme indiqué, la configuration spécifie les adresses suivantes :

  • 100.115.222.143 est l'adresse IP virtuelle du plan de contrôle d'administrateur.

  • 100.115.222.144 est l'adresse IP virtuelle du contrôleur d'entrée du cluster d'administrateur.

  • 100.115.222.146 est l'adresse IP virtuelle du plan de contrôle d'utilisateur.

  • 100.115.222.145 est l'adresse IP virtuelle du contrôleur d'entrée du cluster d'utilisateur.

  • Les adresses de nœuds de cluster d'administrateur sont 100.115.222.163, 100.115.222.164, 100.115.222.165 et 100.115.222.166.

  • Les adresses de nœuds de cluster d'administrateur sont 100.115.222.167, 100.115.222.168 et 100.115.222.169.

Modifiez la configuration de sorte qu'elle contienne les adresses IP et les adresses IP virtuelles que vous avez choisies pour vos clusters d'administrateurs et d'utilisateurs. Ensuite, sur chaque VM Seesaw, ajoutez la configuration à /etc/seesaw/cluster.pb :

Notez que le plan de contrôle du cluster d'utilisateur est mis en œuvre en tant que service dans le cluster d'administrateur. Par conséquent, les adresses IP des nœuds sous user-1-control-plane sont les adresses des nœuds du cluster d'administrateur.

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

Démarrer le service Seesaw

Sur chaque VM Seesaw, exécutez la commande suivante :

systemctl --now enable seesaw_watchdog.service

Seesaw fonctionne désormais sur les deux VM Seesaw. Vous pouvez consulter les journaux sous /var/log/seesaw/.

Modifier le fichier de configuration du cluster

Avant de créer un cluster, vous devez générer un fichier de configuration pour celui-ci. Remplissez le fichier de configuration du cluster comme décrit dans la section Modifier le fichier de configuration.

En particulier, définissez lbmode sur "Manuel". Remplissez également les champs manuallbspec et vips sous admincluster et usercluster. Exemple :

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"

Problèmes connus

Actuellement, la validation de l'équilibreur de charge de gkectl n'est pas compatible avec Seesaw et peut renvoyer des erreurs. Si vous installez ou mettez à jour des clusters utilisant Seesaw, transmettez l'option --skip-validation-load-balancer.

Pour en savoir plus, consultez Dépannage.