赞
踩
目前有4种方案实现,分别:
第一种docker原生网络驱动macvlan
第二种docker原生网络驱动Overlay+consul
第三种三方隧道方案:flannel(隧道)、weave、OpenvSwitch
第四种三方路由方案:Calico
今天主要讲第一种和第二种方式实现:
第一种macvlan实现:Docker 官方在1.12版本之后引入macvlan网络驱动,可以简单的为容器配置桥接网络,原理:在宿主机物理网卡上虚拟出多个子网卡,通过不同的MAC地址在数据链路层进行网络数据转发,但需要linux内核支持(Linux kernel v3.9–3.19 and 4.0+),macvlan模式不依赖网桥,所以brctl show查看并没有创建新的bridge
docker network create -d macvlan --subnet 172.19.0.0/24 --gateway 172.19.0.1 -o parent=网卡名 网络别名
3.docker-compose修改networks指定容器ip(根据创建macvlan网段)
第二种overlay+consul实现:
使用条件:docker运行在Swarm模式(Swarm是Docker的一个编排工具)或
1.集群中主机连接到键值存储,Docker支持Consul、Etcd和Zookeeper;
3.集群中主机必须具有唯一的主机名,因为键值存储使用主机名来标识集群成员;
4.集群中Linux主机内核版本3.12+,支持VXLAN数据包处理,否则可能无法通信
准备两台宿主机:192.168.2.7和192.168.2.63
STEP1:选择一台宿主机拉取consul镜像或直接运行命令(部分consul版本的KV访问异常)
docker run -di -h consul -p 8500:8500 --name=consul consul:1.5.2
#192.168.2.7 /etc/docker/daemon.json "cluster-store": "consul://192.168.2.7:8500", "cluster-advertise": "192.168.2.7:2376", "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"], "live-restore":true
修改保存2.7执行:systemctl daemon-reload
#192.168.2.63 /etc/docker/daemon.json "cluster-store": "consul://192.168.2.7:8500", "cluster-advertise": "192.168.2.63:2376", "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"], "live-restore":true
修改保存2.63执行:systemctl daemon-reload
2.7创建命令:docker network create -d overlay qsdi-net
该方式不需要指定IP,容器启动成功后,通过docker network inspect a34bf8d96d3e查看对应的IP,同时进入容器,通过ping 网络命名或IP均通
异常网络处理
原因:测试环境110,111(consul)当重启111服务,会导致110的qsdi-network丢失(scpoe状态由global变更为local),如下图
如果删除该本地的qsdi-network则无法删除,只能将注册到该网络上的服务全部删除后,然后重启docker,才可以重新创建qsdi-network,此时只能先删除该网络上的应用(查看网络内的应用:docker network inspect NETWORKID)
异常2:当删除集群docker中注册的consul时,此时110和111上的使用的qsdi-network则不存在了,此时如果想再创建该网络,则无法创建,可以尝试先重启docker(systemctl restart docker),然后查看网络列表是否还有docker_gwbridge的网络,如果没有,则可以重新创建,不然需要先删除所有涉及该网络的应用,然后重启docker,再创建qsdi-network
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。