分布式混合云或多云集群
K3s 集群仍然可以部署在没有共享公共私有网络且不直接连接的节点上(例如,不同公共云中的节点)。有两种方法可以实现这一点:嵌入式 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 发生了更改(例如在 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 可以与 Tailscale 集成,以便节点使用 Tailscale VPN 服务在节点之间构建网格。
在部署 K3s 之前,您需要使用 Tailscale 完成四个步骤
-
登录到您的 Tailscale 帐户
-
在
设置 > 密钥
中,生成一个身份验证密钥($AUTH-KEY),它可以重复用于集群中的所有节点 -
确定集群将使用的 podCIDR(默认情况下为
10.42.0.0/16
)。在访问控制中使用节区追加 CIDR(或双栈的 CIDR)
"autoApprovers": {
"routes": {
"10.42.0.0/16": ["[email protected]"],
"2001:cafe:42::/56": ["[email protected]"],
},
},
- 在您的节点中安装 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,您需要添加一个“接受”规则以允许 pod 相互通信。假设您创建的身份验证密钥自动将 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 集群,请创建适当的 ACL 以避免 IP 冲突或为每个集群使用不同的 podCIDR 子网。