手动创建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
两台虚拟机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
相关文章推荐
- centos6.5上安装docker
- docker容器的网络信息查看
- openstack kilo-with-dokcer
- 在windows下的安装Docker的教程
- 8个你可能不知道的Docker知识
- 在Docker中自动化部署Ruby on Rails的教程
- 搭建基于Docker的PHP开发环境的详细教程
- Docker容器的Tengine实践
- 利用OpenVSwitch在多台主机上部署Docker的教程
- ubuntu14.04+docker的安装及使用
- Docker 清理命令集锦
- 再Docker中架设完整的WordPress站点全攻略
- 基于 Docker 开发 NodeJS 应用
- 使用Docker来加速构建Android应用的基本部署思路解析
- 在Docker上部署Python的Flask框架的教程
- 在Docker上开始部署Python应用的教程
- 详解在Python和IPython中使用Docker
- python脚本监控docker容器
- 使用IPython来操作Docker容器的入门指引
- Alpine Linux Repository本地镜像制作