使用pipework实现docker扁平化网络
Posted quietguoguo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pipework实现docker扁平化网络相关的知识,希望对你有一定的参考价值。
忽然冒出了一个想法,就是用docker 构建虚拟机,主要目的就是快速的搭建开发测试环境,其实是可以通过K8S来实现这个需求,但是基于成本考虑,直接用docker来实现可能更方便以及快捷。
其实,实现这个需求,最重要的就是实现网络模式的处理。实现的目标是:
- 每个容器拥有独立的IP,
- 可以使用IP在容器间通信
- 可以使用IP在容器宿主机间通信
我们知道,在默认情况下docker的网络模式主要有一下四种:
- bridge
- host
- container
- none
bridge可以实现某个端口的对外,但是IP还是宿主机的
host可以独占ip,但是背离了资源复用的初衷
container更多的是容器间的关联,而且还是单机的
none……没有网络
所以,以上的默认网络模式是没法直接满足我的需求的,经过一些之前的网络知识的检索与网络搜索,我找到了这个工具 pipework
pipework是一个用软件来为linux容器定义网络的工具,pipework允许你在一个复杂的环境下把容器连接在一起,pipework使用cgroup和namespace来和LXC容器协同工作,当然也可以和docker来一起工作,pipework的shell脚本来帮助你自动打通容器之间的网络连接,pipework的shell脚本来帮助你自动打通容器之间的网络连接.
本质上pipework只是一个shell脚本,可以去他的代码仓库看一下
https://github.com/jpetazzo/pipework
pipwork 需要与linux的网桥功能 结合使用,通过修改配置文件的方法创建一个网桥br0,并将现有的网卡enp0s3接入到br0上。
插播一下,关于网卡命名:
CentOS 7 开始对于网卡的编号有另外一套规则,网卡的代号与网卡的来源有关
eno1:代表由主板bios内置的网卡
ens1:代表有主板bios内置的PCI-E网卡
enp2s0: PCI-E独立网卡
eth0:如果以上都不使用,则回到默认的网卡名
0、准备工作
1、创建br0网桥配置
# 关闭selinux
setenforce 0
#
sed -i s/^ *SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
# 下载pipework
git clone https://github.com/jpetazzo/pipework.git
chomd +x pipework/pipework
cp pipework/pipework /usr/local/bin/pipework
注意,本文中示例内网ip使用的子网掩码为16位
cat > /etc/sysconfig/network-scripts/ifcfg-br0 << EOF
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.5.1
PREFIX=16
GATEWAY=192.168.0.1
DNS1=192.168.0.1
EOF
2、修改原有网卡配置,注释掉原有的IP配置,添加BRIDGE=br0
网卡名称以具体情况为准。
cat > /etc/sysconfig/network-scripts/ifcfg-enp0s3 << EOF
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
BRIDGE=br0
EOF
3、重启网络,使配置生效
注意:操作前记得对原有配置文件进行备份,并且保证能有其他方式(非ssh,或其他网络连接方式,例如带外方式)能在网络异常情况下连接此服务器。绝对不要在运行着业务的机器上执行此操作,风险极其高。
service network restart
4、 检查
以上操作完成后,如果一切正常网络是可用的,根绝brctl命令可以看到原有网卡已经与br0产生了绑定
5、创建网络模式为none的容器
docker run -d --name c72 --net none hub.c.163.com/public/centos:7.2.1511
6、为容器绑定内网IP
pipework br0 c72 192.168.11.1/16@192.168.0.1
br0 为网桥名称
c72为创建的容器名称
192.168.11.1/16为创建的ip
192.168.0.1 为默认网关
注意。如果使用virtualbox 注意将网卡设定为混杂模式,更多信息可以参考pipework的readme文档。
以上是关于使用pipework实现docker扁平化网络的主要内容,如果未能解决你的问题,请参考以下文章
Docker 网络之pipework 工具单主机Docker容器VLAN划分