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

手动创建docker垮主机网络环境

2016-06-22 20:55 726 查看
环境:ubuntu14.04

两台虚拟机IP分别是10.166.224.209和10.166.224.211,分别命名为compute1和compute2

1. 先在两台虚拟机安装docker和openvswitch,安装docker部分请参考官方文档: https://docs.docker.com/engine/installation/linux/ubuntulinux/
apt-get install docker-engine openvswitch-switch bridge-utils -y

ovs-vsctl add-br br0

ovs-vsctl add-br br1

2. 两台虚拟机都配置eth0的IP到ovs网桥上:

ifconfig eth0 0 up && ifconfig br0 10.166.224.209/24 up && route add default gw 10.166.224.1 br0 && ovs-vsctl add-port br0 eth0

3. 配置br1网桥一个IP,为了测试后面的gre隧道是否有效

compute1:

ifconfig br1 192.168.4.10/24 up

compute2:

ifconfig br1 192.168.4.11/24 up

现在在compute上ping 192.168.4.11或者在compute2上ping 192.168.4.10是不会通的;

4.配置gre隧道

compute1:ovs-vsctl add-port br1 gre1 -- set interface gre1 type=gre option:remote_ip=10.166.224.211

compute2:ovs-vsctl add-port br1 gre1 -- set interface gre1 type=gre option:remote_ip=10.166.224.209

再次测试ping,在compute上ping 192.168.4.11或者在compute2上ping 192.168.4.10都是通的,至于原理可以自己去搜索;

5.创建docker需要的网桥,注意docker只能使用linux bridge,不能使用ovs bridge的,否则创建容器会收到adding interface vetha278830 to bridge obr0 failed:
operation not supported类似的错误

compute1:brctl
addbr mydocker&&ifconfig mydocker 172.17.42.1/16 up

compute2:brctl
addbr mydocker&&ifconfig mydocker 172.17.42.2/16 up

注意IP不要配置冲突了

6.划分网段,为了使得各个主机上的容器能够通信,必须实现划分各自的IP段避免冲突,这里两遍的my-docker网桥的IP都是172.17.0.0/16段的,容器会自动根据网桥的IP自己分配同一段IP内的IP,如果需要指定docker所能分配给容器的IP范围,需要在docker的配置文件中添加参数;这里我们划分172.17.64.0/18作为compute1上的docker使用的IP范围,172.17.128.0/18作为compute2上的docker使用的IP范围,分别修改compute1和comnpute2上的/etc/default/docker文件:

在文件最后添加以下内容:

BRIDGE=mydocker

CIDR=172.17.64.0/18

wait_ip() {

address=$(ip add show $BRIDGE | grep 'inet ' | awk '{print $2}')

[ -z "$address" ] && sleep $1 || :

}

wait_ip 5

wait_ip 15

DOCKER_OPTS="

-H unix:///var/run/docker.sock

-H tcp://0.0.0.0:2375

--fixed-cidr=$CIDR

--bridge $BRIDGE

--mtu 1462

"

注意compute2上需要把CIDR=172.17.64.0/18改为CIDR=172.17.128.0/18;

7.然后两台主机
service docker restart;创建容器验证:

compute1:docker
run -it busybox sh

compute2:docker
run -it busybox sh

compute上的容器获得的IP应该是172.17.64.0
compute2容器的IP应该是172.17.128.0,两个容器内部互相ping对方IP,是可以通的。垮主机的docker网络就配置好了;

8.其实kubernetes使用的flaaned就是这样的原理,没啥区别;只不过我们这里需要手工配置而已;另外这里有的同学可能会觉得172.17.64.0这样的容器IP很怪,觉得这是一个掩码,怎么会是一个IP呢,其实不要看见尾号为0的IP就觉得不是正常的IP,10.1.0.0这个IP在没有给出掩码的情况下无法说他是不是一个合法IP,如果是10.1.0.0/16,那么10.1.0.0当然不是IP,如果是10.1.0.0/8,那么10.1.0.0就是一个可以给虚拟机或者容器的网卡使用的合法IP
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker overlay 垮主机