Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official.

Cluster híbrido distribuído ou cluster multinuvem

Um cluster K3s ainda pode ser implantado em nós que não compartilham uma rede privada comum e não estão diretamente conectados (por exemplo, nós em diferentes nuvens públicas). Existem duas opções para alcançar isso: a solução multinuvem k3s incorporada e a integração com o tailscale provedor de VPN.

A latência entre os nós aumentará à medida que a conectividade externa exigir mais saltos. Isso reduzirá o desempenho da rede e também pode impactar a saúde do cluster se a latência for muito alta.

O etcd incorporado não é suportado nesse tipo de implantação. Se estiver usando o etcd incorporado, todos os nós do servidor devem ser acessíveis entre si por meio de seus IPs privados. Os agentes podem ser distribuídos em várias redes, mas todos os servidores devem estar na mesma localização.

Solução multinuvem k3s incorporada

O K3s usa wireguard para estabelecer uma malha VPN para o tráfego do cluster. Os nós devem ter cada um um IP único pelo qual podem ser alcançados (geralmente um IP público). O tráfego do supervisor K3s usará um túnel websocket, e o tráfego do cluster (CNI) usará um túnel wireguard.

Para habilitar esse tipo de implantação, você deve adicionar os seguintes parâmetros nos servidores:

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

e nos agentes:

--node-external-ip=<AGENT_EXTERNAL_IP>

onde SERVER_EXTERNAL_IP é o IP pelo qual podemos alcançar o nó do servidor e AGENT_EXTERNAL_IP é o IP pelo qual podemos alcançar o nó do agente. Observe que o parâmetro de configuração K3S_URL no agente deve usar o SERVER_EXTERNAL_IP para poder se conectar a ele. Lembre-se de verificar os Requisitos de Rede e permitir acesso às portas listadas em ambos os endereços internos e externos.

Tanto SERVER_EXTERNAL_IP quanto AGENT_EXTERNAL_IP devem ter conectividade entre si e normalmente são IPs públicos.

IPs dinâmicos

Se os nós forem atribuídos a IPs dinâmicos e o IP mudar (por exemplo, na AWS), você deve modificar o parâmetro --node-external-ip para refletir o novo IP. Se estiver executando o K3s como um serviço, você deve modificar /etc/systemd/system/k3s.service e então executar:

systemctl daemon-reload
systemctl restart k3s

Integração com o provedor de VPN Tailscale (experimental)

Disponível nas versões v1.27.3, v1.26.6, v1.25.11 e mais recentes.

O K3s pode se integrar com Tailscale para que os nós utilizem o serviço de VPN Tailscale para construir uma malha entre os nós.

Existem quatro etapas a serem realizadas com o Tailscale antes de implantar o K3s:

  1. Faça login na sua conta Tailscale

  2. Em Settings > Keys, gere uma chave de autenticação ($AUTH-KEY), que pode ser reutilizável para todos os nós no seu cluster

  3. Decida sobre o podCIDR que o cluster usará (por padrão 10.42.0.0/16). Anexe o CIDR (ou CIDRs para dual-stack) no controle de acesso com a estrofe:

    "autoApprovers": {
         "routes": {
             "10.42.0.0/16":        ["your_account@xyz.com"],
             "2001:cafe:42::/56": ["your_account@xyz.com"],
         },
     },
  4. Instale o Tailscale nos seus nós:

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

Para implantar o K3s com a integração do Tailscale habilitada, você deve adicionar o seguinte parâmetro em cada um dos seus nós:

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

ou forneça essas informações em um arquivo e use o parâmetro:

--vpn-auth-file=$PATH_TO_FILE

Opcionalmente, se você tiver seu próprio servidor Tailscale (por exemplo, headscale), pode se conectar a ele anexando ,controlServerURL=$URL aos parâmetros vpn-auth

Em seguida, você pode prosseguir para criar o servidor usando o seguinte comando:

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

Após executar este comando, acesse o console de administração do Tailscale para aprovar o nó Tailscale e a sub-rede (se ainda não tiver sido aprovado através de autoApprovers).

Uma vez que o servidor esteja configurado, conecte os agentes usando:

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

Novamente, aprove o nó Tailscale e a sub-rede como você fez para o servidor.

Se você tiver ACLs ativadas no Tailscale, precisará adicionar uma regra de "aceitar" para permitir que os pods se comuniquem entre si. Assumindo que a chave de autenticação que você criou automaticamente marca os nós do Tailscale com a tag testing-k3s, a regra deve ser assim:

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

Se você planeja executar vários clusters K3s usando a mesma rede Tailscale, por favor, crie ACLs apropriadas ACLs para evitar conflitos de IP ou use sub-redes podCIDR diferentes para cada cluster.