
K3s マルチサイト クラスター用に Wireguard を設定しようとしましたが、ルーティングに問題があります。少なくとも 4 つのノードがあり、1 つの場所に 2 つ、別の場所に 1 つ、さらに別の場所に 1 つあります。
前提:
- 10.50.0.0/16ネットワークは物理ノード用です
- 10.42.0.0/16ネットワークはポッド用です
- 10.43.0.0/16ネットワークはサービス用です
- 各物理ノードは、10.42.0.0/16の範囲で一意のIPアドレスが割り当てられたポッドを作成できます。
- 各物理ノード上の各ポッドは互いにpingできる必要があります
デプロイされた構成は最後の 2 つのノード間でのみ機能し、残りのノードは互いに ping することさえできません。ルーティングに問題があるのではないかと思いますが、これを確認するための知識が足りません。
2 つのノードからの構成例:
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
何かヒントはありますか? Wireguard でこれをどのように設計すればよいですか? この構成が機能しないのはなぜですか?
ありがとう!
答え1
(申し訳ありませんが、これが正しいかどうか 100% 確信が持てないので、おそらくコメントするべきでしょうが、このサイトでコメントを使用するには、まだ十分な評判がありません。)
AllowedIPs
WireGuard が特定の送信パケットをどのピアにルーティングするかを認識する方法であるため、それぞれの IP 範囲は一意 (つまり、重複しない範囲) である必要があると思います[Peer]
。そうであれば、サイトごとに個別の IP 範囲 (ポッドとサービス用 - ノードは関係ありません) を設定する必要があります。
実際に重複範囲で試してみてどうなるかは見たことがありませんし、ドキュメントでも明確には説明されていませんが、これはサポートされていないようです。(サポートされている場合は、AllowedIPs
パケットの宛先アドレスを含むすべてのピアに各パケットをブロードキャストするか、ARP などを使用してルーティングを動的に判断する必要があります。)
私は にあまり詳しくないのでk3s
、マルチサイト クラスターがどのように機能するかはわかりません。これは基本的に、集中管理される複数の個別の Kubernetes クラスターなのでしょうか?