首页 > 代码库 > docker容器互联并且暴露真实网络

docker容器互联并且暴露真实网络

bridge模式下,连在同一网桥上的容器可以相互通信(若出于安全考虑,也可以禁止它们之间通信,方法是在DOCKER_OPTS变量中设置--icc=false,这样只有使用--link才能使两个容器通信)。

               多台物理主机之间的容器互联(暴露容器到真实网络中)

技术分享

docker  默认的桥接网卡是 docker0 。它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 vethxxx,而 docker 只是把所有这些网卡桥接在一起

pipework工作原理分析
那么容器到底发生了哪些变化呢?我们docker attachtest1上,发现容器中多了一块eth1的网卡,并且配置了192.168.1.150/24IP,而且默认路由也改为了192.168.1.1。这些都是pipework帮我们配置的。

  ·首先pipework检查是否存在br0网桥,若不存在,就自己创建。
  ·创建veth pair设备,用于为容器提供网卡并连接到br0网桥。

  ·使用docker inspect找到容器在主机中的PID,然后通过PID将容器的网络命名空间链接到/var/run/netns/目录下。这么做的目的是,方便在主机上使用ip netns命令配置容器的网络。因为,在Docker容器中,我们没有权限配置网络环境。

 ·将之前创建的veth pair设备分别加入容器和网桥中。在容器中的名称默认为eth1,可以通过pipework-i参数修改该名称。

 ·然后就是配置新网卡的IP。若在IP地址的后面加上网关地址,那么pipework会重新配置默认路由。这样容器通往外网的流量会经由新配置的eth1出去,而不是通过eth0docker0(若想完全抛弃自带的网络设置,在启动容器的时候可以指定--net=none)

以上就是pipework配置Docker网络的过程,这和Dockerbridge模式有着相似的步骤。事实上,Docker在实现上也采用了相同的底层机制。
通过源代码,可以看出,pipework通过封装Linux上的ipbrctl等命令,简化了在复杂场景下对容器连接的操作命令,为我们配置复杂的网络拓扑提供了一个强有力的工具。当然,如果想了解底层的操作,我们也可以直接使用这些Linux命令来完成工作,甚至可以根据自己的需求,添加额外的功能。

2 单主机Docker容器VLAN划分
pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分。下面,就来简单演示一下,在单机环境下,如何实现Docker容器间的二层隔离。

使用link参数可以让容器之间安全的进行交换

创建容器使用--name指定自定义容器名

技术分享 

然后创建一个新的容器自定义为web,并将它连接到test1

然后使用docker  ps ---no-trunc 查看容器的连接状态

技术分享 

--link namealias name是要链接的容器名,alias是链接的别名

进入容器查看两个容器是否链接  查看hosts文件

技术分享 

有两个hosts证明成功了,第一个是web容器,第二个是test1容器的ip和主机名

实现多台物理机之间的容器互联

不同容器之间通讯可以使用pipework工具

技术分享 

技术分享 

使用yum安装下面相关依赖包

技术分享 

设置桥接网络

技术分享 

技术分享 

network-scripts目录下添加虚拟主机文件

技术分享 

写入下面内容

技术分享 

重启network服务 systemctl  restart  network

技术分享 

使用brctl命令查看虚拟网桥

技术分享 

修改配置文件,指向br0,需要停止docker

技术分享 

技术分享 

启动docker,创建容器时最好在加上--net-none,避免ip发生冲突

技术分享 

使用pipework指定网卡地址

技术分享 

技术分享 

使用外网ping容器ip

技术分享 

实现单主机docker容器VLAN划分

安装openvswitch,并安装相关依赖包

创建yum

技术分享技术分享 

解压与打包

技术分享 

技术分享 

技术分享 

查看目录是否有两个文件

技术分享 

安装里面的第一个软件包

技术分享 

启动openvswitch

技术分享 

查看状态

技术分享 

创建交换机 绑定物理接口(需要把br0接口删除)

技术分享 

启动ovs1

技术分享 

查看地址

技术分享 

在主机上创建4docker容器

技术分享 

test划分到vlan

技术分享 

进入容器后ping其他vlan,正确的test1能通test2,不通test3test4

技术分享


本文出自 “centos7” 博客,请务必保留此出处http://12832314.blog.51cto.com/12822314/1929936

docker容器互联并且暴露真实网络