多主机Docker容器的VLAN划分

原文发表于cu:2016-06-06

参考文档:

  1. Docker网络的4种模式,pipework/ovs的简单使用等:http://www.infoq.com/cn/articles/docker-network-and-pipework-open-source-explanation-practice
  2. Dockerpool全文档:https://yeasy.gitbooks.io/docker_practice/content/index.html
  3. Ovs完全使用手册:http://my.oschina.net/tantexian/blog/648965?fromerr=C7Pp6sMs

ovs相对linux自身的brctl工具(yum install -y bridge-utils)功能上丰富许多,如vlan功能与分布式功能。

本文主要验证利用ovs的vlan功能实现跨主机的容器隔离与通信。

一.前置条件

1. 拓扑图

2. 环境说明

    1. Host1/2为VMware ESXi中的vm host,安装CentOS-7-x86_64-1511系统;
    2. 在宿主机Host1/2上各创建两个Container,为Container创建eth1端口;
    3. Container的eth1端口连接到ovs网桥,ovs网桥对接container的端口分别划分到vlan10/20;
    4. 宿主机Host1/2的网卡ens192分别桥接到各宿主机内部的 ovs网桥;
    5. 宿主机Host1/2的网卡ens192需要设置成混杂模式,并且对接的交换机端口设置为trunk端口。
    6. 网桥需要安装bridge-utils包;
    7. 常规情况下,加入bridge网络的宿主机网卡自动进入promiscuous mode,并进入forwarding state (可以使用dmesg查看);但如果宿主机是vm,需要注意调整宿主机的网卡为promiscuous mode,调整"伪传输"模式为"接受",对接虚拟网桥的端口为trunk端口。如VMware ESXi默认拒绝接受混杂模式下的数据包并且不对数据包打tag;伪传输"模式默认为"拒绝"表示出站数据的源mac地址不同于.vmx文件中的源mac地址时,vswitch会丢弃该出站数据;"mac地址更改"模式默认为"拒绝"表示vm在操作系统层面将网卡的mac地址更改为不同于.vmx配置文件中的mac地址时,丢弃所有入站数据。 

3. pipework

#pipework本质是一个shell脚本实现,相对docker自身比较薄弱的网络配置处理方式,其可以方便地对docker网络进行配置。
[[email protected] ~]# cd /usr/local/
[[email protected] local]# git clone https://github.com/jpetazzo/pipework

#可以使用软连接,复制,或增加环境变量的多种方式将pipework设为可执行命令
[[email protected] local]# ln -s /usr/local/pipework/pipework /usr/local/bin/ 

一.多主机Docker容器的vlan划分

以下操作没有特别说明,都表示在Host1上操作,Host2按照Host1操作微调即可。

1. 启动容器

#在Host1/2下启动容器test1/2/3/4;
#"--net=none"设置容器启动不带网络,由后期自定义,关于容器网络的模式请参考链接文档1
[[email protected] ~]# docker run -itd --net=none --name test1 centoswithssh
[[email protected] ~]# docker run -itd --net=none --name test2 centoswithssh
[[email protected] ~]# docker ps

2. 为容器配置网络

#用pipework添加ovs0网桥,test1网络划分到vlan10,test2网络划分到vlan20;
#pipework本质是采用shell脚本简化了ovs的操作,pipework及ovs的具体操作请参考链接文档3;
#这里并没有为ovs0网桥设置管理ip,可以根据需要设置,请参考链接1。
[[email protected] ~]# pipework ovs0 test1 192.168.1.11/24 @10
[[email protected] ~]# pipework ovs0 test2 192.168.1.12/24 @20

[[email protected] ~]# ovs-vsctl show
[[email protected] ~]# docker exec -it test1 ifconfig

3. 为网桥添加宿主机网卡

#Host1与Host2中的容器需要通信,需要把两边的网络打通,即将宿主机网卡添加到虚拟网桥中
[[email protected] ~]# ovs-vsctl add-port ovs0 ens192
[[email protected] ~]# ovs-vsctl show

4. 验证

[[email protected] ~]# docker exec -it test1 ping 192.168.1.12
[[email protected] ~]# docker exec -it test1 ping 192.168.1.13
[[email protected] ~]# docker exec -it test1 ping 192.168.1.14
[[email protected] ~]# docker exec -it test2 ping 192.168.1.13
[[email protected] ~]# docker exec -it test2 ping 192.168.1.14

预期:

  1. test1 ping test2: fail
  2. test1 ping test3: success
  3. test1 ping test4: fail
  4. test2 ping test3: fail
  5. test2 ping test4: success

根据验证结果显示,结果符合预期,请见截图:

时间: 2024-10-18 02:08:10

多主机Docker容器的VLAN划分的相关文章

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

pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分.下面,就来简单演示一下,在单机环境下,如何实现Docker容器间的二层隔离.为了演示隔离效果,我们将4个容器放在了同一个IP网段中.但实际他们是二层隔离的两个网络,有不同的广播域. 安装openvswitch 安装基础环境 [[email protected] ~]# yum -y install gcc make python-devel opens

使用weave实现跨主机docker容器互联

关于weave的原理不做细致的说明,如果想了解weave可以登陆官网:https://www.weave.works/ In this post,使用阿里云3台ECS服务器进行weave搭建,并测试搭建weave后,跨主机docker容器的连通性. 场景:10.162.204.252 node110.171.31.181 node210.171.19.139 node3 一.在所有需要跨主机互通的docker宿主机安装weave.1.在node1上安装weave,并启动weave.wget -O

部署Flannel,实现跨主机Docker容器通信

flannel(flannel is a virtual network that attaches IP addresses to containers) 两个主机下的Docker容器之间是不互通的,通过部署flannel,对docker容器的ip进行规划,就能实现跨主机容器之间的通信. 官方文档:https://coreos.com/flannel/docs/latest/flannel-config.html 以下介绍Flannel的部署 机器配置如下 hostname ip 系统版本 e

使用openvswitch实现跨主机docker容器互联

安装openvswitch的步骤请参考上一篇文章:http://www.cnblogs.com/xkops/p/5568167.html 环境:192.168.3.201 node1192.168.3.202 node2 1.在node1上创建网桥obr0,然后增加端口gre0到obr0.ovs-vsctl add-br obr0ovs-vsctl add-port obr0 gre0ovs-vsctl set interface gre0 type=gre options:remote_ip=

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

本文通过3个样例 -- 将Docker容器配置到本地网络环境中.单主机Docker容器的VLAN划分.多主机Docker容器的VLAN划分,演示了如何使用pipework帮助我们进行复杂的网络设置,以及pipework是如何工作的. 1.pipework的使用以及源码分析 Docker自身的网络功能比较简单,不能满足很多复杂的应用场景.因此,有很多开源项目用来改善Docker的网络功能,如pipework.weave.flannel等.这里,就先介绍一下pipework的使用和工作原理. pip

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

在bridge模式下,连在同一网桥上的容器可以相互通信(若出于安全考虑,也可以禁止它们之间通信,方法是在DOCKER_OPTS变量中设置--icc=false,这样只有使用--link才能使两个容器通信). 多台物理主机之间的容器互联(暴露容器到真实网络中) docker  默认的桥接网卡是 docker0 .它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 vethxxx,而 docker 只是把所有这些网卡桥接在一起 pipework工作原理分析那么容器到底发生了哪些

docker容器VLAN划分

单主机docker容器VLAN划分 创建4个容器 [[email protected] ~]# docker run -itd --name con1 --net=none busybox:latest /bin/sh [[email protected] ~]# echo "1" > /proc/sys/net/ipv4/ip_forward[[email protected] ~]# sysctl -p[[email protected] ~]# docker run -it

如何让不同主机中docker容器可以相互访问

我们都知道同一台主机中的docker容器可以相互访问,那么不同主机中的docker容器间是否可以相互访问呢?答案是可以的,解决思路是在主机中把另外主机上docker容器的网段加入到路由表中. 现有主机A 192.168.124.51,主机B 192.168.124.55,具体步骤如下: 修改一台主机docker容器使用的网段(默认是172.17.x.x),如何修改请看上一篇. 假设已经修改好docker网段,例如主机A中docker容器使用10.1.x.x网段,主机B中docker使用172.1

阿里云主机部署Docker容器引擎

一.部分  通过阿里云软件市场一键部署 配置过程如下链接: https://market.aliyun.com/products/56014007/cmjj017110.html?spm=5176.2020520132.101.5.4MIrmY最终get到云主机+Docker容器引擎 云主机登录:ssh -p 22 [email protected]公网IP  user:root pass:[email protected] 容器远程登录:ssh –p9090 [email protected]