个人技术空间关于本站

K3S跨公网多云集群

K3S内置wireguard-native的插件来实现跨公网时的通信
https://docs.k3s.io/zh/networking/distributed-multicloud
但是这种方式在一些网络场景下配置很难做到定制化
比如在服务器有多个公网IP的情况下,想通过IPv4承接ingress流量,通过IPv6来做集群网络互通。

所以抛弃了内置的wireguard-native方案,自己搭建wireguard隧道,在隧道上再进行K3S组网

wireguard隧道

wireguard隧道搭建方式参考这篇文章
https://www.aliencn.net/archives/c911gjskly7abjb/cn/WireGuard-zuwang
需要注意的是要在两边机器的AllowedIPs配置中添加10.42.0.0/16

AllowedIPs = 192.168.1.0/24, 10.42.0.0/16

这个是默认情况下pod获取到IP段,如果不配置会导致跨节点的pod之间无法通信

如果是Ipv6搭建隧道,后续可能会出现K3S组建的网络不同的情况。
可以尝试将MTU改成1380,或者尝试其他的MTU

MTU = 1380

K3s的master部署

参考此文章
https://www.aliencn.net/archives/406/cn/Ubuntubushuk3s
需要在/etc/rancher/k3s/config.yaml中添加配置

flannel-backend: host-gw
flannel-iface: wg0

部署完成后,需要获取一下token,在agent加入集群的时候会用得到

root@k3s-master:~# cat /var/lib/rancher/k3s/server/token
K10313123decb1761231d5e65f812312337123123eac5adc6::server:1238123a912371212337915

K3s的agent部署

hosts配置

首先配置一下hosts,指向了master节点的wireguard网卡,可以通过域名访问master节点。
既然有隧道了就不通过公网IP传输数据了。

root@k3s-agent:/data/ops/k3sDeploy# cat /etc/hosts
192.168.1.2 k3s.aliencn.net

agent的配置文件

自定义一些 agent的配置,也基本上和master差不多

mkdir -p /etc/rancher/k3s/

tee /etc/rancher/k3s/config.yaml <<-'EOF'
debug: false
log: /var/log/k3s.log
alsologtostderr: true
docker: true
flannel-iface: wg0
kubelet-arg:
  - system-reserved=cpu=100m,memory=128Mi,ephemeral-storage=1024Mi,pid=100
  - kube-reserved=cpu=100m,memory=128Mi,ephemeral-storage=1024Mi,pid=100
  - eviction-hard=memory.available<128Mi,nodefs.available<10%,imagefs.available<10%
  - eviction-minimum-reclaim=memory.available=128Mi,nodefs.available=500Mi,imagefs.available=500Mi
  - max-pods=110
EOF

安装agent

#bin和镜像下载
mkdir -p /data/ops/k3sDeploy
cd /data/ops/k3sDeploy
#https://github.com/k3s-io/k3s/releases
k3sVer="v1.35.3+k3s1"
wget  -c "https://get.k3s.io" -O install.sh
baseURL="https://github.com/k3s-io/k3s/releases/download/$k3sVer"

wget  -c "$baseURL/k3s"
wget  -c "$baseURL/k3s-airgap-images-amd64.tar.zst"
wget  -c "$baseURL/k3s-images.txt"
wget  -c "https://github.com/k3s-io/k3s/releases/download/$k3sVer/sha256sum-amd64.txt"
#校验
cat sha256sum-amd64.txt|grep "k3s$"|sha256sum -c
cat sha256sum-amd64.txt|grep "k3s-airgap-images-amd64.tar.zst$"|sha256sum -c

cd /data/ops/k3sDeploy
#镜像&bin
docker load -i k3s-airgap-images-amd64.tar.zst
cp -f k3s /usr/local/bin/
chmod 700 /usr/local/bin/k3s
chmod 700 install.sh

执行安装命令
K3S_TOKEN内容替换为上面从master获取到的token

cd /data/ops/k3sDeploy
export INSTALL_K3S_SKIP_DOWNLOAD=true
export K3S_domain=k3s.aliencn.net
export K3S_URL=https://k3s.aliencn.net:6443
export K3S_TOKEN=K10313123decb1761231d5e65f812312337123123eac5adc6::server:1238123a912371212337915
./install.sh

验证安装

在master节点上执行
可以看到agent的状态是Ready

root@k3s-master:~# kubectl get nodes -A
NAME          STATUS   ROLES           AGE   VERSION
k3s-agent     Ready    <none>          28m   v1.35.3+k3s1
k3s-master    Ready    control-plane   4d    v1.35.3+k3s1
CreateBy:2026-04-22,UpdateBy:2026-04-22

评论

还没有评论,欢迎第一个留言。
← 请输入您的姓名
← 请输入常用邮箱(不会公开)
← 请输入个人网站(可选)
← 请输入评论内容,文明交流
← 请先完成人机验证