分散型ハイブリッドまたはマルチクラウドクラスター
K3sクラスターは、共通のプライベートネットワークを共有せず、直接接続されていないノード(例:異なるパブリッククラウドにあるノード)にもデプロイできます。これを実現するためのオプションは2つあります:組み込みのk3sマルチクラウドソリューションと、tailscale
VPNプロバイダーとの統合です。
外部接続が必要なため、ノード間のレイテンシが増加します。これによりネットワークパフォーマンスが低下し、レイテンシが高すぎる場合はクラスターの健全性にも影響を与える可能性があります。 |
このタイプのデプロイメントでは、組み込みのetcdはサポートされていません。組み込みのetcdを使用する場合、すべてのサーバーノードはプライベートIPを介して相互に到達可能でなければなりません。エージェントは複数のネットワークに分散することができますが、すべてのサーバーは同じ場所にある必要があります。 |
組み込みのk3sマルチクラウドソリューション
K3sはWireGuardを使用してクラスターのトラフィック用のVPNメッシュを確立します。ノードはそれぞれ一意のIP(通常はパブリックIP)を持ち、それを通じて到達可能である必要があります。K3sのスーパーバイザートラフィックはWebSocketトンネルを使用し、クラスター(CNI)トラフィックはWireGuardトンネルを使用します。
このタイプのデプロイメントを有効にするには、サーバーに次のパラメータを追加する必要があります:
--node-external-ip=<SERVER_EXTERNAL_IP> --flannel-backend=wireguard-native --flannel-external-ip
エージェントには次のパラメータを追加します:
--node-external-ip=<AGENT_EXTERNAL_IP>
ここで、SERVER_EXTERNAL_IP
はサーバーノードに到達するためのIPであり、AGENT_EXTERNAL_IP
はエージェントノードに到達するためのIPです。エージェントのK3S_URL
設定パラメータは、接続するためにSERVER_EXTERNAL_IP
を使用する必要があることに注意してください。ネットワーキング要件を確認し、内部および外部アドレスのリストされたポートへのアクセスを許可することを忘れないでください。
SERVER_EXTERNAL_IP
とAGENT_EXTERNAL_IP
は相互に接続可能であり、通常はパブリックIPです。
動的IP
ノードに動的IPが割り当てられており、IPが変更された場合(例:AWS)、
|
Tailscale VPNプロバイダーとの統合(実験的)
v1.27.3、v1.26.6、v1.25.11以降で利用可能。
K3sはTailscaleと統合し、ノードがTailscale VPNサービスを使用してノード間のメッシュを構築できるようにします。
K3sをデプロイする前に、Tailscaleで次の4つのステップを実行する必要があります:
-
Tailscaleアカウントにログイン
-
設定 > キー
で、認証キー($AUTH-KEY)を生成します。このキーはクラスター内のすべてのノードで再利用可能です。 -
クラスターが使用するpodCIDRを決定します(デフォルトは
10.42.0.0/16
)。アクセスコントロールに次のスタンザを追加します:"autoApprovers": { "routes": { "10.42.0.0/16": ["your_account@xyz.com"], "2001:cafe:42::/56": ["your_account@xyz.com"], }, },
-
ノードにTailscaleをインストールします:
curl -fsSL https://tailscale.com/install.sh | sh
Tailscale統合を有効にしてK3sをデプロイするには、各ノードに次のパラメータを追加する必要があります:
--vpn-auth="name=tailscale,joinKey=$AUTH-KEY
または、情報をファイルに提供し、次のパラメータを使用します:
--vpn-auth-file=$PATH_TO_FILE
オプションとして、独自のTailscaleサーバー(例:headscale)を持っている場合、vpn-authパラメータにcontrolServerURL=$URL
を追加して接続することができます。
Next, you can proceed to create the server using the following command:
k3s server --token <token> --vpn-auth="name=tailscale,joinKey=<joinKey>" --node-external-ip=<TailscaleIPOfServerNode>
After executing this command, access the Tailscale admin console to approve the Tailscale node and subnet (if not already approved through autoApprovers).
Once the server is set up, connect the agents using:
k3s agent --token <token> --vpn-auth="name=tailscale,joinKey=<joinKey>" --server https://<TailscaleIPOfServerNode>:6443 --node-external-ip=<TailscaleIPOfAgentNode>
Again, approve the Tailscale node and subnet as you did for the server.
If you have ACLs activated in Tailscale, you need to add an "accept" rule to allow pods to communicate with each other. Assuming the auth key you created automatically tags the Tailscale nodes with the tag testing-k3s
, the rule should look like this:
"acls": [
{
"action": "accept",
"src": ["tag:testing-k3s", "10.42.0.0/16"],
"dst": ["tag:testing-k3s:*", "10.42.0.0/16:*"],
},
],
同じTailscaleネットワークを使用して複数のK3sクラスターを実行する予定がある場合、IPの競合を避けるために適切なACLを作成するか、各クラスターに異なるpodCIDRサブネットを使用してください。 |