Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi.

Cluster hybride distribué ou multicloud

Un cluster K3s peut toujours être déployé sur des nœuds qui ne partagent pas de réseau privé commun et ne sont pas directement connectés (par exemple, des nœuds dans différents clouds publics). Il existe deux options pour y parvenir : la solution multicloud k3s intégrée et l’intégration avec tailscale le fournisseur de VPN.

La latence entre les nœuds augmentera car la connectivité externe nécessite plus de sauts. Cela réduira les performances du réseau et pourrait également affecter la santé du cluster si la latence est trop élevée.

Etcd intégré n’est pas pris en charge dans ce type de déploiement. Si vous utilisez etcd intégré, tous les nœuds serveurs doivent être accessibles les uns aux autres via leurs IP privées. Les agents peuvent être répartis sur plusieurs réseaux, mais tous les serveurs doivent être au même endroit.

Solution multicloud k3s intégrée

K3s utilise wireguard pour établir un maillage VPN pour le trafic du cluster. Les nœuds doivent chacun avoir une IP unique par laquelle ils peuvent être atteints (généralement une IP publique). Le trafic de supervision K3s utilisera un tunnel websocket, et le trafic du cluster (CNI) utilisera un tunnel wireguard.

Pour activer ce type de déploiement, vous devez ajouter les paramètres suivants sur les serveurs :

--node-external-ip=<SERVER_EXTERNAL_IP> --flannel-backend=wireguard-native --flannel-external-ip

et sur les agents :

--node-external-ip=<AGENT_EXTERNAL_IP>

SERVER_EXTERNAL_IP est l’IP par laquelle nous pouvons atteindre le nœud serveur et AGENT_EXTERNAL_IP est l’IP par laquelle nous pouvons atteindre le nœud agent. Notez que le paramètre de configuration K3S_URL dans l’agent doit utiliser le SERVER_EXTERNAL_IP pour pouvoir s’y connecter. N’oubliez pas de vérifier les Exigences Réseau et d’autoriser l’accès aux ports listés sur les adresses internes et externes.

Les SERVER_EXTERNAL_IP et AGENT_EXTERNAL_IP doivent avoir une connectivité entre eux et sont normalement des IP publiques.

IP dynamiques

Si des nœuds se voient attribuer des IP dynamiques et que l’IP change (par exemple, dans AWS), vous devez modifier le paramètre --node-external-ip pour refléter la nouvelle IP. Si vous exécutez K3s en tant que service, vous devez modifier /etc/systemd/system/k3s.service puis exécuter :

systemctl daemon-reload
systemctl restart k3s

Intégration avec le fournisseur VPN Tailscale (expérimental)

Disponible dans v1.27.3, v1.26.6, v1.25.11 et versions ultérieures.

K3s peut s’intégrer avec Tailscale afin que les nœuds utilisent le service VPN Tailscale pour établir un maillage entre les nœuds.

Il y a quatre étapes à réaliser avec Tailscale avant de déployer K3s :

  1. Connectez-vous à votre compte Tailscale

  2. Dans Settings > Keys, générez une clé d’authentification ($AUTH-KEY), qui peut être réutilisable pour tous les nœuds de votre cluster.

  3. Décidez du podCIDR que le cluster utilisera (par défaut 10.42.0.0/16). Ajoutez le CIDR (ou les CIDR pour le double empilement) dans les contrôles d’accès avec le bloc :

    "autoApprovers": {
         "routes": {
             "10.42.0.0/16":        ["your_account@xyz.com"],
             "2001:cafe:42::/56": ["your_account@xyz.com"],
         },
     },
  4. Installez Tailscale sur vos nœuds :

    curl -fsSL https://tailscale.com/install.sh | sh

Pour déployer K3s avec l’intégration Tailscale activée, vous devez ajouter le paramètre suivant sur chacun de vos nœuds :

--vpn-auth="name=tailscale,joinKey=$AUTH-KEY"

ou fournissez ces informations dans un fichier et utilisez le paramètre :

--vpn-auth-file=$PATH_TO_FILE

En option, si vous avez votre propre serveur Tailscale (par exemple, headscale), vous pouvez vous y connecter en ajoutant ,controlServerURL=$URL aux paramètres vpn-auth.

Ensuite, vous pouvez procéder à la création du serveur en utilisant la commande suivante :

k3s server --token <token> --vpn-auth="name=tailscale,joinKey=<joinKey>" --node-external-ip=<TailscaleIPOfServerNode>

Après avoir exécuté cette commande, accédez à la console d’administration Tailscale pour approuver le nœud Tailscale et le sous-réseau (s’il n’a pas déjà été approuvé via autoApprovers).

Une fois le serveur configuré, connectez les agents en utilisant :

k3s agent --token <token> --vpn-auth="name=tailscale,joinKey=<joinKey>" --server https://<TailscaleIPOfServerNode>:6443 --node-external-ip=<TailscaleIPOfAgentNode>

Encore une fois, approuvez le nœud Tailscale et le sous-réseau comme vous l’avez fait pour le serveur.

Si vous avez des ACL activées dans Tailscale, vous devez ajouter une règle "accept" pour permettre aux pods de communiquer entre eux. En supposant que la clé d’authentification que vous avez créée étiquette automatiquement les nœuds Tailscale avec le tag testing-k3s, la règle devrait ressembler à ceci :

"acls": [
    {
        "action": "accept",
        "src":    ["tag:testing-k3s", "10.42.0.0/16"],
        "dst":    ["tag:testing-k3s:*", "10.42.0.0/16:*"],
    },
],

Si vous prévoyez d’exécuter plusieurs clusters K3s en utilisant le même réseau Tailscale, veuillez créer des ACLs appropriés pour éviter les conflits d’IP ou utiliser des sous-réseaux podCIDR différents pour chaque cluster.