この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

分散型ハイブリッドまたはマルチクラウドクラスター

K3sクラスターは、共通のプライベートネットワークを共有せず、直接接続されていないノード(例:異なるパブリッククラウドのノード)にもデプロイできます。これを実現するための2つのオプションがあります:組み込みのk3sマルチクラウドソリューションと`tailscale` VPNプロバイダーとの統合です。

外部接続にはより多くのホップが必要なため、ノード間のレイテンシが増加します。これによりネットワークパフォーマンスが低下し、レイテンシが高すぎる場合はクラスターの健康にも影響を与える可能性があります。

このタイプのデプロイメントでは、組み込みetcdはサポートされていません。組み込みetcdを使用する場合、すべてのサーバーノードはプライベートIPを介して互いに到達可能でなければなりません。エージェントは複数のネットワークに分散することができますが、すべてのサーバーは同じ場所にあるべきです。

組み込みのk3sマルチクラウドソリューション

K3sは、クラスターのトラフィックのためにVPNメッシュを確立するためにwireguardを使用します。ノードは、それぞれが到達可能なユニークなIP(通常はパブリックIP)を持っている必要があります。K3sのスーパーバイザートラフィックはウェブソケットトンネルを使用し、クラスター(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で)、新しいIPを反映するために`--node-external-ip`パラメータを修正する必要があります。K3sをサービスとして実行している場合は、`/etc/systemd/system/k3s.service`を修正してから、次のコマンドを実行する必要があります:

systemctl daemon-reload
systemctl restart k3s

Tailscale VPNプロバイダーとの統合(実験的)

v1.27.3、v1.26.6、v1.25.11およびそれ以降のバージョンで利用可能です。

K3sはhttps://tailscale.com/[Tailscale]と統合でき、ノードがTailscale VPNサービスを使用してノード間にメッシュを構築します。

K3sをデプロイする前に、Tailscaleで行うべき4つのステップがあります。

  1. Tailscaleアカウントにログインします。

  2. `Settings > Keys`で、クラスター内のすべてのノードで再利用可能な認証キー($AUTH-KEY)を生成します。

  3. クラスターが使用するpodCIDRを決定します(デフォルトでは`10.42.0.0/16`です)。アクセス制御にCIDR(またはデュアルスタック用のCIDR)を追加し、次のスタンザを使用します。

    "autoApprovers": {
         "routes": {
             "10.42.0.0/16":        ["your_account@xyz.com"],
             "2001:cafe:42::/56": ["your_account@xyz.com"],
         },
     },
  4. ノードに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`を追加して接続できます。

次に、次のコマンドを使用してサーバーを作成できます。

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

このコマンドを実行した後、Tailscale管理コンソールにアクセスして、Tailscaleノードとサブネットを承認します(自動承認者を通じてすでに承認されていない場合)。

サーバーが設定されたら、エージェントを次のように接続します。

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

再度、サーバーのために行ったように、Tailscaleノードとサブネットを承認します。

TailscaleでACLが有効になっている場合、ポッドが相互に通信できるように「accept」ルールを追加する必要があります。作成した認証キーが自動的にTailscaleノードにタグ`testing-k3s`を付けると仮定すると、ルールは次のようになります。

"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 サブネットを使用してください。