惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Microsoft Azure Blog
Microsoft Azure Blog
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
小众软件
小众软件
F
Fortinet All Blogs
Microsoft Security Blog
Microsoft Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
宝玉的分享
宝玉的分享
有赞技术团队
有赞技术团队
J
Java Code Geeks
WordPress大学
WordPress大学
The Cloudflare Blog

Mereith's Blog

记一次代理转发问题的排查与解决 PVE DataCenter Manager 端口号跳转错误修复 k8s + jenkins + gitlab 触发器 【转载】没有编程生产力这样的东西 【后续】居然被 ddos 了 居然被 ddos 了 Tagger - 让版本标签管理更简单 openclash 开启后端口转发失效 nextjs 启动时执行代码 买了太多VPS不知道干什么,干脆做个网站 juhost Level-1 测评 VMISS CN - Hong Kong VMISS JP - Tokyo - BGP 测评 VMISS CN - Hong Kong - BGP HomeLab 的终点是 最近在做的事情 因为选择艰难症,自己写了一套开源博客系统 手撸一个nodejs分布式爬虫,还要可视化 HomeLab 分享 我的个人工作流——开源项目推荐 动手写一个超简单的编译器 safari 插件开发 Safari Extensions Preferences 按钮无响应 设置移动端软键盘回车按钮文案 nginx proxy manager 非标准端口反代 Host 不对 监控 k8s ingress 自动添加域名 DNS 解析 使用 ingress 注解给 traefik ingress 添加中间件 使用流水线功能为文章添加固定结尾 为 VanBlog 添加一个小挂件 基于React/umi/egg自建博客系统 如何正确停止 NodeJS 子进程
混合云部署k3s集群(基于wireguard)
wanglu@mereith.com (mereith) · 2022-08-09 · via Mereith's Blog

请注意,本文编写于 1410 天前,最后修改于 1397 天前,其中某些信息可能已经过时。

之前经常撸云服务器羊毛,就想搭建 k8s集群,一开始手动搭建太折腾了还有小问题,后来用了kubekey,感觉占用资源太多。

后来发现了 k3s 这个好东西,占用资源低。

后来发现了 wireguard 这个好东西,混合云组网神器。

后来发现了 network-manager 这个好东西,wireguard 组网神器。

那就搞吧!

配置概览

为了避免烂七八糟毛病,操作系统最好统一,这里我统一采用了 ubuntu 20.04 系统。

所有服务器概览如下:

云厂商配置架构
腾讯2C4Gamd64
阿里1C2Gamd64
华为2C4Gamd64

网络搭建

首先需要搭建星状网络,参考:

# 使用 Netmaker 快速组建 WireGuard mesh 网络

wget -O docker-compose.yml https://raw.githubusercontent.com/gravitl/netmaker/master/compose/docker-compose.contained.yml sed -i 's/NETMAKER_BASE_DOMAIN/<your base domain>/g' docker-compose.yml sed -i 's/SERVER_PUBLIC_IP/<your server ip>/g' docker-compose.yml sed -i 's/COREDNS_IP/<default interface ip>/g' docker-compose.yml # 生成 master key tr -dc A-Za-z0-9 </dev/urandom | head -c 30 ; echo '' sed -i 's/REPLACE_MASTER_KEY/<your generated key>/g' docker-compose.yml # 配置 Caddy wget -O /root/Caddyfile https://raw.githubusercontent.com/gravitl/netmaker/master/docker/Caddyfile sed -i 's/NETMAKER_BASE_DOMAIN/<your base domain>/g' /root/Caddyfile sed -i 's/YOUR_EMAIL/<your email>/g' /root/Caddyfile # 启动 docker-compose up -d

emm,总之按照官方的就能很轻松的部署了。

踩坑

后面我部署集群的时候发现 k3sserviceLB 会破坏 wirguard 网络的连通性。所以部署的时候一定要禁用。。。

master

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_SELINUX_WARN=true \\ INSTALL_K3S_EXEC="--disable servicelb --disable traefik --node-ip '10.20.30.7' --node-external-ip '82.157.137.245' --flannel-backend wireguard --kube-proxy-arg proxy-mode=ipvs --kube-proxy-arg masquerade-all=true --kube-proxy-arg metrics-bind-address=0.0.0.0 --tls-san 'k3s.mereith.com' --tls-san '82.157.137.245' " sh - # 获取 token cat /var/lib/rancher/k3s/server/token

node

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://82.157.137.245:6443 INSTALL_K3S_EXEC="--node-ip '10.20.30.5' --node-external-ip '82.157.125.43' --kube-proxy-arg proxy-mode=ipvs --kube-proxy-arg masquerade-all=true --kube-proxy-arg metrics-bind-address=0.0.0.0 " K3S_TOKEN="05ed38e986ebf0cdeb97bec629d1b7c9" sh -

复写 ip

因为云服务器自己还有内网 ip,为了保证网络畅通性,需要:

kubectl annotate nodes tx3 flannel.alpha.coreos.com/public-ip-overwrite=10.20.30.7

测试

## curl busybox kubectl run busybox --image sequenceiq/busybox --command -- /bin/sh -c "while true;do echo hello docker;sleep 1;done" kubectl exec -it busybox -- sh ## nginx test kubectl run nginx --image nginx

卸载

/usr/local/bin/k3s-uninstall.sh /usr/local/bin/k3s-agent-uninstall.sh ip link delete kube-ipvs0

注意

  • 需要禁用 servicelb ,不然会影响跨集群的 pod 畅通
  • 禁用 traefik 是为了用自己的编排,不禁用也行。

参考

# 使用 k3s 和 WireGuard 网络部署 Kubernetes 集群