本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

分布式混合或多云集群

K3s集群仍然可以部署在不共享私有网络且未直接连接的节点上(例如,不同公有云中的节点)。实现这一点有两种选择:嵌入式k3s多云解决方案和与`tailscale` VPN提供商的集成。

节点之间的延迟会增加,因为外部连接需要更多的跳数。这将降低网络性能。如果延迟过高,还可能影响集群的健康状况。

在这种类型的部署中不支持嵌入式etcd。如果使用嵌入式etcd,所有服务器节点必须通过其私有IP相互可达。代理可以分布在多个网络上,但所有服务器应位于同一位置。

嵌入式k3s多云解决方案

K3s使用wireguard建立集群流量的VPN网状网络。每个节点必须具有一个唯一的IP,以便可以通过该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中),您必须修改`--node-external-ip`参数以反映新的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的四个步骤:

  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),您可以通过将`,controlServerURL=$URL`附加到vpn-auth参数来连接到它。

接下来,您可以使用以下命令创建服务器:

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

执行此命令后,访问Tailscale管理控制台以批准Tailscale节点和子网(如果尚未通过autoApprovers批准)。

服务器设置完成后,使用以下方式连接代理:

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

再次批准Tailscale节点和子网,就像您为服务器所做的那样。

如果您在Tailscale中激活了ACL,您需要添加一个"accept"规则以允许pods相互通信。假设您创建的身份验证密钥自动将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 集群,请创建适当的 ACLs 以避免 IP 冲突,或者为每个集群使用不同的 podCIDR 子网。