
Tentei configurar o Wireguard para um cluster multisite K3s, meu problema é com roteamento. Existem pelo menos 4 nós, 2 em um local + 1 em outro local e + 1 em outro local.
Premissas:
- A rede 10.50.0.0/16 é para nós físicos
- A rede 10.42.0.0/16 é para pods
- A rede 10.43.0.0/16 é para serviços
- Cada nó físico pode criar um pod, ao qual foi atribuído um endereço IP exclusivo no intervalo 10.42.0.0/16
- Cada pod em cada nó físico deve ser capaz de executar ping entre si
A configuração implantada funcionou apenas entre os dois últimos nós, os demais nós não conseguem nem executar ping entre si. Acho que pode ser algo com o roteamento, mas não tenho conhecimento suficiente para verificar isso.
Exemplos de configurações de dois nós:
10.50.54.100:
[Interface]
# primary-1
Address = 10.50.54.100/24
PrivateKey = pr111111111111111111111111111111111111111111
ListenPort = 443
MTU = 1500
PostUp = sysctl -w net.ipv4.ip_forward=1
PostUp = echo 1 > /proc/sys/net/ipv4/ip_forward
PostUp = ufw allow 443/udp || true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = sysctl -w -q net.ipv4.ip_forward=0
PostDown = echo 0 > /proc/sys/net/ipv4/ip_forward
[Peer]
# infra-1
PublicKey = pub11111111111111111111111111111111111111111
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = xxxxxxxxxx:443
[Peer]
# compute-2
PublicKey = pub2222222222222222222222222222222222222222
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = yyyyyyyyyy:443
[Peer]
# storage-1
PublicKey = pub3333333333333333333333333333333333333333
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = zzzzzzzzzzz:443
10.50.54.2:
[Interface]
# infra-1
Address = 10.50.54.2/24
PrivateKey = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ListenPort = 443
MTU = 1500
PostUp = sysctl -w net.ipv4.ip_forward=1
PostUp = echo 1 > /proc/sys/net/ipv4/ip_forward
PostUp = ufw allow 51820/udp || true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PostDown = sysctl -w -q net.ipv4.ip_forward=0
PostDown = echo 0 > /proc/sys/net/ipv4/ip_forward
[Peer]
# primary-1
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = xxxxxxxxxxxx:443
[Peer]
# compute-2
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = yyyyyyyyyyy:443
[Peer]
# storage-1
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AllowedIPs = 10.50.54.0/16, 10.42.0.0/16, 10.43.0.0/16
PersistentKeepalive = 15
Endpoint = zzzzzzzzzzzz:443
Faz alguma ideia? Como isso deve ser projetado com o Wireguard? Por que esta configuração não funciona?
Obrigado!
Responder1
(Desculpas, provavelmente deveria ser um comentário, pois não tenho 100% de certeza se está correto, mas ainda não tenho representantes suficientes neste site para usar comentários.)
Acredito que AllowedIPs
for each [Peer]
precisa ser único (ou seja, intervalos não sobrepostos) porque é assim que o WireGuard sabe para qual peer rotear um determinado pacote de saída. Nesse caso, você precisaria configurar intervalos de IP separados (para pods e serviços - os nós não deveriam importar) para cada site.
Na verdade, nunca tentei com intervalos sobrepostos para ver o que faria, e a documentação não é exatamente clara sobre isso, mas parece implicar que isso não é suportado. (Se fosse suportado, teria que transmitir cada pacote para todos os pares que AllowedIPs
incluíssem o endereço de destino do pacote ou usar algo como ARP para descobrir o roteamento dinamicamente.)
Não estou muito familiarizado com o k3s
, então não tenho certeza de como funciona o cluster de vários sites - isso é basicamente apenas vários clusters Kubernetes separados que são gerenciados centralmente?