知识点046-pipework与docker

邮差的信 提交于 2019-12-05 21:14:52

pipework是一个用软件来为linux容器定义网络的工具,pipework允许你在一个复杂的环境下把容器连接在一起,pipework使用cgroup和namespace来和LXC容器协同工作,当然也可以和docker来一起工作。

下载pipework

 

git clone https://github.com/jpetazzo/pipework.git

    在下载下来的pipework目录里面有一个pipework脚本,用shell编写的,就是把创建的网络的命令自动化,行数不多,感兴趣的可以看看。

    在动手前我们有些事要提醒一下:当你在docker中使用pipework之前,先去docker用户列表中询问一下,docker是否已经有了更加原生方法来实现相同的功能,这样你应该不用pipework,pipework后面应该被淘汰的。如果当前版本的docker真的没有办法使你的docker容器集中在一起,那么只能使用pipework了。

先看看原始网络配置:

下面的例子显示了pipework怎么来帮助你的容器

#创建两个容器
ssh11=$(docker run -d -P --name ssh1 ssh_service)
ssh22=$(docker run -d -P --name ssh2 ssh_service)

创建网桥

cd pipework
./pipework br8 $ssh33 192.168.1.10/24
./pipework br8 $ssh22 192.168.1.11/24

    先说说上面这个命令的作用:创建一个br8网桥,然后增加一个eth0名称的接口到$ssh11这个容器上面,配置一个192.168.1.10到该接口,然后把这个接口连接到br8上面。

    使用brctl查看docker创建两个虚拟网卡信息

    这时看看宿主机的网卡信息

    红色框中的是docker服务默认启动后使用docker0网桥创建容器的虚拟接口,绿色框中的是我们使用br8作为网桥,启动容器后生成的虚拟网卡信息

    利用docker ps查看容器的ssh端口都映射到docker主机的那个端口了

    可以看到ssh1是49153端口,ssh2是49154端口,现在我们登陆一下容器ssh1

    看起来很完美是不?注意我的登陆ip,为什么是172.17.42.1?这是docker0网桥的地址啊,我的容器是绑定的br8的,又不是绑定的docker0的,但是翻看上面的图,可以看到br8并没有ip地址,那是因为虽然用pipework创建了br8网桥,而且把容器的ip绑定到br8了,但是你并没有给br8网桥本身绑定ip,所以br8网桥肯定没ip了,只要给br8再绑定一个ip,应该就可以利用br8网桥的ip地址登陆了,但是为什么可以利用docker0的ip来登陆呢?docker ps看到的ssh映射的ip是0.0.0.0

pipework还可以解析docker容器的名称,如果pipework识别不了你输入的docker id,则docker会使用docker inspect来解析,例如

pipework br8 ssh11 192.168.1.11/24

如果想连接这些容器,而使用私网地址:

ip addr add 192.168.1.254/254 dev br1

默认情况下pipework在容器内部创建了一个eth1网络接口,如果你想改变这个接口的名称,或者设置多个接口:pipework br8 -i eht2...

传递给pipework的地址会被直接传递给ip addr工具,因此你可以直接在ip后面使用CIDR,不要忘记所有的额容器都使用相同的子网掩码

如果你有outbound的流量,比如容器需要连接外部世界,你需要改变容器的默认路由,这些都是可以被pipework自动解决的,只要在ip地址和掩码后面加上默认网关的地址即可:

pipework br1 $ssh11 192.168.1.10/24@192.168.1.254

如果你想连接容器到真实的物理网卡也是很容易的,比如你要连接容器ssh11到eth3上面:

pipework eht3 $ssh11 50.19.169.157/24

    这个用到了macvlan,所以你可以把多个容器绑定到同一个物理网卡上

有时候你希望额外的网卡在起来正常运转前你的服务已经启动,pipework脚本提供了一个参数--wait,它会直到你的网卡启动后,才会启动服务

还可以使用dhcp代替指定的ip:

 

pipework eth1 $ssh11 dhcp

还可以指定网卡的MAC地址:

 

pipework eth0 $ssh11 192.168.1.6/24 xx:xx:xx:xx:xx:xx



pipework可以做的事情很多,就不一一介绍了,有兴趣的可以看官网例子。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!