MENU

[zerotier组网]将动态ip的机器添加到rancher

之前将一些东西docker化之后,使用了rancher作为docker的集群管理面板,但是后来自己手里多了个动态ip的机器,然而rancher官方尚未有支援动态ip节点的方法,google一番后找到了一个解决办法.

前言

google搜索的时候发现rancher官方论坛有人已经有相同的问题,但是官方的回应为每变更一次ip都需要进行修改,显然这个方法不适应于通过pppoe获取动态ip的节点,因为ip总是在不确定时间的情况下改变,而且每次都需要修改docker节点的ip这已经违背了'自动化'这点,本来打算放弃了的,在下面看到了帖子的回复,有人通过openvpn将节点连接到rancher主控所在的机器,这样它们将在一个内网中,可以通过openvpn获得固定的ip,这时我立即想到了之前异地bgp使用的zerotier.

为什么选择zerotier

首先通过openvpn连接到主控机器意味着流量都将通过主控节点进行交换,尤其是在节点与节点间通信时,不但会增加流量成本还会提高延迟,而zerotier则是各个机器间通过p2p链接,只有当双方节点没有公网ip或者其他原因无法通过p2p传输数据时才会经过第三者(zerotier官方的服务器或者自己设置的月亮服务器)进行传输.

安装和使用过程

首先需要在zerotier官网注册一个账户并创建一个network(注册账户后会自动创建一个)
然后根据自己需求和场景选择一个私网ip块,选择私网ip块的时候应当避免和所有服务器现有的ip所在ip快冲突,并且尽量选择之后其它地方用不到的ip块,ipv6可根据自己的需求选择或者停用
然后为了避免'意外'设备加入network然后对network的设备进行'一些'操作,应当将network的类型改为private类型,这样每一个设备加入后都需要进行授权才可以访问这个network

network设置好之后即可开始主控和各节点的配置,将所有机器安装zerotier客户端,安装方法非常简单,只需要执行官方提供的一键安装命令(如下),当然也可以选择其它安装方法.

curl -s https://install.zerotier.com/ | sudo bash

安装后即可将其加入自己的network,只需要执行zerotier-cli join network_id,其中network_id为自己network的id,在官网找到自己的network详细页面,network名称上面的16位数字字母混合字符串即是network_id

将机器加入节点后,稍等几秒在官网network详情页面下面的members内即可看到刚刚加入的设备,勾选前面的auth即可同意设备加入,再等待几秒钟即可看到为设备分配的私网ip,network内的所有成员互相访问使用私网ip即可.

将主控和所有节点加入network之后在rancher面板内选择添加主机,然后在指定公网ip栏里填入network为你分配的私网ip即可.

更改现有主机的ip设置

只需要修改并运行以下命令,稍等一会后rancher面板就可以看到节点ip的变更

sudo docker run -d –e CATTLE_AGENT_IP=network为节点分配的私网ip --privileged 
-v /var/run/docker.sock:/var/run/docker.sock 
rancher/agent 你的rancher的api地址