您的位置:首页 > 运维架构 > Docker

采用ovs-docker为容器创建双外部网络

2015-07-28 10:26 711 查看
在之前一篇文章《利用iptables给Docker绑定一个外网IP》大致介绍了docker的默认网络配置,尝试了手动为docker绑定一个外部网络IP。

而在实际开发中可能不仅仅只有简单的一个网络,可能分为外部网络以及管理网络等多重网络,本文将介绍如何为docker容器创建双外部网络。

背景

docker默认的网络是桥接在创建好后的网桥docker0上的。docker0默认的典型地址为172.17.42.1,子网掩码为255.255.0.0。之后启动容器会给容器分配一个同一网段(172.17.0.0/16)的地址。然后启动docker容器时会创建一对veth pair。其中一端为容器内部的eth0,另外一端为挂载到docker0网桥并以veth开头命名。

环境

一台ubuntu 14.04 64位的服务器,

有2个网络,分别为外部网络与管理网络,

其中eth0为外部网络,所属网段为10.50.10.0/26,该网口的IP为10.50.10.26,网关为10.50.10.1,由于还使用了ovs,因此是该IP是在br-ex上的;

另外还有eth2为内部网络,所属网段为61.0.0.0/24,该网口IP为61.0.0.26,绑定在网桥br-eth2上.

目的

采用ovs-docker为容器创建双外部网络,其中eth0为外部网络,地址为10.50.10.56/26;还有eth2为管理网络,其地址分配为61.0.0.56/26

过程

1.下载ovs-docker脚本

#wget https://raw.githubusercontent.com/openvswitch/ovs/master/utilities/ovs-docker[/code] 
2.给予可执行权限,并放入系统目录中,这样可以直接使用该可执行程序

#chmod +x ovs-docker
#mv ovs-docker /usr/bin


3.创建docker容器

#docker run --net=none --privileged=true -it ubuntu:14.04


因为docker默认会将镜像创建在docker0网桥上,这一步参数–net=none作用为不给容器创建初始网络,–privileged=true是为了能够在操作容器时拥有对网络配置的权限,如果不加入该参数,则进入后即使是root也无权限修改网络配置。

然后可以查看创建好后的容器网络仅有lo本地回环:

# ifconfig
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


4.用ovs-docker为容器创建网络

# ovs-docker
ovs-docker: Performs integration of Open vSwitch with Docker.
usage: ovs-docker COMMAND

Commands:
add-port BRIDGE INTERFACE CONTAINER [--ipaddress="ADDRESS"]
[--gateway=GATEWAY] [--macaddress="MACADDRESS"]
[--mtu=MTU]

del-port BRIDGE INTERFACE CONTAINER
Deletes INTERFACE inside CONTAINER and removes its
connection to Open vSwitch BRIDGE. e.g.:
ovs-docker del-port br-int eth1 c474a0e2830e
del-ports BRIDGE CONTAINER
Removes all Open vSwitch interfaces from CONTAINER. e.g.:
ovs-docker del-ports br-int c474a0e2830e
set-vlan BRIDGE INTERFACE CONTAINER VLAN
Configures the INTERFACE of CONTAINER attached to BRIDGE
to become an access port of VLAN. e.g.:
ovs-docker set-vlan br-int eth1 c474a0e2830e 5


根据该命令,首先我通过#docker ps查看容器的ID号:

# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7670c6c0bdd2        ubuntu:14.04        "/bin/bash"         11 minutes ago      Up 11 minutes                           backstabbing_galileo


然后为容器创建外部网络eth0,绑定到br-ex这个网桥上:

# ovs-docker add-port br-ex eth0 7670c6c0bdd2


然后为容器创建外部网络eth2,绑定到br-eth2这个网桥上:

# ovs-docker add-port br-eth2 eth2 7670c6c0bdd2


然后可以通过#ovs-vsctl show查看是否创建成功:

5.进入配置容器网络

首先进入容器通过#ifconfig查看网络,发现出现了eth0与eth2这两个网络。

然后对其按照之前对要求进行配置即可:

配置eth0:

# ifconfig eth0 10.50.10.56/26


配置网关:

# route add default gw 10.50.10.1


配置eth2:

# ifconfig eth2 61.0.0.56/24


至此所有网络已经配置完成。

拓扑图

下图便为搭建好后对双网络容器的拓扑图,由于ovs-docker创建的port名称比较长,这里以vnet0和vnet2代替:



验证

从与这两个网络相关联对机器进行ICMP测试

# ping -c 4 10.50.10.56
PING 10.50.10.56 (10.50.10.56) 56(84) bytes of data.
64 bytes from 10.50.10.56: icmp_seq=1 ttl=63 time=1.35 ms
64 bytes from 10.50.10.56: icmp_seq=2 ttl=63 time=1.20 ms
64 bytes from 10.50.10.56: icmp_seq=3 ttl=63 time=0.256 ms
64 bytes from 10.50.10.56: icmp_seq=4 ttl=63 time=0.245 ms

--- 10.50.10.56 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.245/0.763/1.351/0.516 ms
# ping -c 4 61.0.0.56
PING 61.0.0.56 (61.0.0.56) 56(84) bytes of data.
64 bytes from 61.0.0.56: icmp_seq=1 ttl=64 time=0.653 ms
64 bytes from 61.0.0.56: icmp_seq=2 ttl=64 time=0.197 ms
64 bytes from 61.0.0.56: icmp_seq=3 ttl=64 time=0.199 ms
64 bytes from 61.0.0.56: icmp_seq=4 ttl=64 time=0.227 ms

--- 61.0.0.56 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.197/0.319/0.653/0.193 ms


参考

1,《Docker——从入门到实践》:高级网络配置

http://dockerpool.com/static/books/docker_practice/advanced_network/README.html

2,《Docker 使用 OpenvSwitch 网桥》

/article/1813418.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: