|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
分布式混合或多云集群
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`然后运行:
|
与Tailscale VPN提供商的集成(实验性)
在v1.27.3、v1.26.6、v1.25.11及更新版本中可用。
K3s可以与https://tailscale.com/[Tailscale]集成,以便节点使用Tailscale VPN服务在节点之间建立网状网络。
在部署K3s之前,需要完成与Tailscale的四个步骤:
-
登录到您的Tailscale账户
-
在`Settings > Keys`中,生成一个身份验证密钥($AUTH-KEY),该密钥可以在集群中的所有节点中重复使用。
-
决定集群将使用的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"], }, }, -
在您的节点中安装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 子网。 |