使用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​

使用pipework实现docker扁平化网络_docker

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产生了绑定

使用pipework实现docker扁平化网络_docker_02

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扁平化网络的主要内容,如果未能解决你的问题,请参考以下文章

使用pipework将Docker容器桥接到本地网络环境中

Docker 网络之pipework 工具单主机Docker容器VLAN划分

Docker 网络之pipework 工具将Docker容器配置到本地网络环境中

虚拟化技术—docker容器—PIPEWORK解读与实践

Docker网络详解及pipework源码解读与实践

Docker容器学习梳理--容器间网络通信设置(Pipework和Open vSwitch)