当前位置:   article > 正文

Docker容器实现跨宿主机通信方案_宿主机通过虚拟ip和容器网络进行通信

宿主机通过虚拟ip和容器网络进行通信

目前有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

实现方案步骤:

1.将物理网卡设置混杂模式

ip link set eno1 promisc on

2.创建macvlan,每台宿主机均执行

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的一个编排工具)或

使用键值存储docker主机集群。

使用键值实现需要满足以下条件:

1.集群中主机连接到键值存储,Docker支持Consul、Etcd和Zookeeper;

2.集群中主机运行一个Docker守护进程;

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

STEP2:修改宿主机docker配置文件,如图

#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

     systemctl restart docker

#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

      systemctl restart docker

STEP3:consul查看docker节点,如图

STEP4:在consul所在宿主机创建overlay网络

2.7创建命令:docker network create -d overlay qsdi-net

   另一台宿主机将同步2.7创建的overlay网络

STEP5:启动容器(docker-compose)

该方式不需要指定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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/258257
推荐阅读
相关标签
  

闽ICP备14008679号