Homelab篇章一:netmaker基础设施组网
在前言部分就提到了netmaker,官网首页口号就是你的统一的全互联网络平台,听着挺诱人的哈~综合考虑下来,其实同类的产品项目其实挺多的,比如OpenVPN、ZeroTier等~netmaker可以视作wireguard的管理层面的东西,所以这一套的mesh组网本质就是wireguard,因此wireguard的优势将完全保留。wireguard还是个年轻的项目,依然存在着争议与不足,但是几天使用下来确实还是挺香的~毕竟简介里面有for homelab口号加成!关于wg的介绍,不少都是从这里https://fuckcloudnative.io/了解的,有兴趣大家也去看看。
部署netmaker server
官方提供了多种部署方式,包括docker、裸金属服务器部署、集群部署,也有高可用的解决方案,本次计划只是homelab,所以直接选择一台服务器使用docker-compose进行部署。
部署基本需求
需求来自官方文档,有些不是必须的,推荐有的如下:
- 静态独立IP
- 至少1G内存,1核CPU
- 已备案域名(也不是必须,但是有最好)
安装
DNS设置
在服务器的云解析设置一个泛解析即可:*.netmaker.example.com ==> IP
软件
根据系统自行安装docker、docker-compose、wireguard
防火墙
开放443、53\tcp、53\udp、51821-51830\udp
安装netmaker
由于云服务器的IP一般是内网IP,获取实际ip,以供CoreDNS使用:
1 | ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p' |
- CoreDNS可以不部署,官网有说明,但是建议部署
获取docker-compose文件并进行修改:
1 | wget -O docker-compose.yml https://raw.githubusercontent.com/gravitl/netmaker/develop/compose/docker-compose.caddy.yml |
NETMAKER_BASE_DOMAIN
就是上面的通配符域名,即netmaker.example.com
COREDNS_IP
就是服务器的内网IP
删除这个docker-compose.yml文件里关于caddy的部分(包括两个卷申明),另外用docker-compose启动一个caddy容器对API进行代理。Caddyfile配置如下:
1 | wget -O Caddyfile https://raw.githubusercontent.com/gravitl/netmaker/develop/docker/Caddyfile |
如果不使用域名以及TLS,需要自己额外配置(将域名全部换成SERVER_PUBLIC_IP:PORT
)
建立网络并加入Client
建立网络
设置网络IP范围即可,可以选择IPv4和IPv6双栈,其他选择一般默认即可,列表里就有了新建的网络
此时NODES里面只有一个节点,就是NETMAKER本身。
在ACCESS KEYS
内为这个网络新建一个KEY,记下生成的TOKEN。
Client加入与配置
登陆Node节点,在https://github.com/gravitl/netmaker/releases/tag/latest/下载合适的netclient
客户端,用如下命令加入网络
1 | sudo ./netclient join -t TOKEN |
显示成功就可以了,dashboard上也会出现对应节点
对于具备静态公网IP的节点,需要如图修改设置
对于无公网IP的节点,关闭Is Static
,打开UDP Hole Punching
即可。其他的IP等也可以按需求修改。
验证
- m01-k3s:杭州机房阿里云节点,有公网IP
- s01-k3s:上海机房腾讯云节点,有公网IP
- s02-k3s:南京内网节点,无公网IP
两个具备公网IP之间的节点互相ping:
内网节点ping公网节点:
可以看到,与内网节点之间的通信确实还存在丢包现象,不过不是很明显,延迟还是挺漂亮的,毕竟低成本Homelab~并且后面在这些节点上配置k3s也并没有被网络影响。
注意事项
- 2C1G的服务器出现过一次OOM,导致netmaker全部被kill,平时内存占用一般也不过600M,为了防止再发生直接设置了2G的虚拟内存。
- netmaker容器重启后会新增一个netmaker节点,新的这个状态正常,老的那个还是重启前的节点信息并且一般是warning状态,直接把老的删除即可,感觉这是个bug?
- 如果netmaker挂了,似乎并不会影响已经加入网络的那些node的工作。
- 开启了UDP打洞的节点,wg会随机使用UDP端口进行内网穿透,所以防火墙需要注意。设置静态IP的节点,一般就用51821,即节点设置的Listen Port。