docke跨主机通信-overlay

docker-overlay网络的工作原理网卡设备

overlay的名词解释

Container eth0:eth0它是Overlay网络分配的唯一的IP地址,它是veth
pair虚拟设备对,作用是实现点对点的通信,通过桥接到br0这个网桥中,可以实现不同 NameSwitch之间容器进行通信。
br0:它是Overlay默认创建的网桥。 VETP:对VXLAN数据包的封装与街封装。 Container
eth1:eth1是容器主机的默认网络,主要提供容器访问外网所提供的服务,走的默认docker网络架构,只不过他创建了docker_gwbridge这个网桥。
docker_gwbridge:docker_gwbridge是容器所创建的网桥它替代了docker0的服务。
eth0:真机网卡与外界网卡连接得真机网卡,它用来转发,容器VXLAN与NAT两种网卡类型的数据包到指定的对端节点

(以上文档是以前看技术大佬的博客总结的,具体是谁忘记了,如有侵犯请联系作者!!)

overlay工作流程

vxlan是网络虚似化通道,
创建好overlay网络时,container里面会有两块网卡分别时overlay类型的和bridge类型,那他们的作用分别是什么呢
跨主机通信时走的时eth0网卡,因为每创建一个overlay网络时,系统就会创建一个network namespace
eth0和network namespace进行连接通过veth pair实现,一段连接到eth0上面另一端连接到network
namespace中的br0上面,对面docker主机同理,两台通过vxlan虚拟通道进行通信,容器另一个网卡的gwbridge是为overlay网络提供外网能力准备的

overlay网络(跨主机通信)实验试图

docke跨主机通信-overlay_第1张图片

实验环境

DockerHost-server1
192.168.43.60
DockerHost-server2
192.168.43.160

清空防火墙(两台相同操作)

[root@localhost ~]# iptables -F
[root@localhost ~]# iptables-save

server1第一台操作:

[root@localhost ~]# hostname server1
[root@localhost ~]# bash

server2第二台操作:

[root@localhost ~]# hostname server2
[root@localhost ~]# bash

server1,server2相同操作
注意如果docker主机没有处于docker swarm集群中,需要手动配置防火墙
集群管理通信TCP 2733
TCP/UDP端口7946
节点通信端口 4789

[root@server1 ~]# firewall-cmd  --permanent  --add-port=7946/tcp
success
[root@server1 ~]# firewall-cmd  --permanent  --add-port=7946/udp
success
[root@server1 ~]# firewall-cmd  --permanent  --add-port=4789/tcp
success
[root@server1 ~]# firewall-cmd  --permanent  --add-port=4789/udp
success
[root@server1 ~]# firewall-cmd  --permanent  --add-port=2733/tcp
success
[root@server1 ~]# firewall-cmd  --permanent  --add-port=2733/udp
success
[root@server1 ~]# firewall-cmd  --permanent  --add-port=2376/tcp
success
[root@server1 ~]# firewall-cmd  --permanent  --add-port=2376/udp
success
#让端口生效
[root@server1 ~]# firewall-cmd --reload 
success
#查看生效端口
[root@server1 ~]# firewall-cmd --list-port
7946/tcp 7946/udp 4789/tcp 4789/udp 2733/tcp 2733/udp 2376/tcp 2376/udp

server1操作:

下载一个consul数据库的镜像

[root@server1 ~]# docker pull progrium/consul

docke跨主机通信-overlay_第2张图片
启动镜像

[root@server1 ~]# docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --restart always -h  consul progrium/consul -server -bootstrap -ui-dir /ui
f07fe9aee4352e58efd68935825e76589cb0f39aca028833c7fb26ea6eb72277

修改docker的配置文件

[root@server1 ~]# vim /usr/lib/systemd/system/docker.service 

docke跨主机通信-overlay_第3张图片
把docker配置文件scp给docker server2

[root@server1 ~]# scp /usr/lib/systemd/system/docker.service 192.168.43.60:/usr/lib/systemd/system/docker.service

重新加载docker的配置文件和重启docker

[root@server1 ~]# systemctl daemon-reload 
[root@server1 ~]# systemctl restart  docker
[root@server2 ~]# systemctl daemon-reload 
[root@server2 ~]# systemctl  restart   docker

查看docker中的conusl服务

[root@server1 ~]# ps  -aux | grep docker

docke跨主机通信-overlay_第4张图片
然后访问consul并且查看节点

[root@server1 ~]# firefox 192.168.43.124:8500

docke跨主机通信-overlay_第5张图片docke跨主机通信-overlay_第6张图片docke跨主机通信-overlay_第7张图片
docke跨主机通信-overlay_第8张图片
开启网卡混杂模式(两台相同操作)

[root@server1 ~]# ifconfig   ens33 promisc
[root@server1 ~]# ifconfig  ens33

docke跨主机通信-overlay_第9张图片
创建一个网卡overlay类型的名称为ov_net1

[root@server1 ~]# docker network  create -d overlay  --attachable ov_net1
#--attachable独立网络 

docke跨主机通信-overlay_第10张图片
范围:全局范围global
这个网卡会同步到server2服务器上面,到server2服务器上面可以查看一下网卡

[root@server2 ~]# docker network ls

docke跨主机通信-overlay_第11张图片
查看网卡(ov_net1)信息
[root@server1 ~]# docker inspect ov_net1
表示ov_net1网段是10.0.0.0 网关是10.0.0.1

docke跨主机通信-overlay_第12张图片
开启路由转发功能

[root@server1 ~]# echo "net.ipv4.ip_forward= 1 " >> /etc/sysctl.conf
[root@server1 ~]# sysctl -p
net.ipv4.ip_forward = 1

在server1中创建bbox1容器,在server2中创建bbox2容器然后进行通信

[root@server1 ~]# docker run  -itd --name  bbox1 --network ov_net1  busybox
[root@server2 ~]# docker run  -itd --name  bbox2 --network ov_net1  busybox
[root@server1 ~]# docker exec  bbox1  ping  bbox2

docke跨主机通信-overlay_第13张图片表示欧克,跨主机之间的容器通信

以下内容是扩展
查看veth和peer的接口关系

[root@server1 ~]# brctl show

查看veth和peer的连接的关系(显示vetheac0c4b(16)和15是一对veth和peer)

[root@server1 ~]# ip a  | grep vetheac0c4b

docke跨主机通信-overlay_第14张图片
进入容器查看网卡信息表示

[root@server1 ~]# docker exec  bbox1 ip a

docke跨主机通信-overlay_第15张图片
查看vxlan(显示所有的network namespace)

[root@server1 ~]# ip netns  
[root@server1 ~]#  ln -s /var/run/docker/netns/ /var/run/netns
[root@server1 ~]# ip netns list
9ac58ae450b4 (id: 2)
1-60dbbff6f3 (id: 1)
ed88d85c5fe7 (id: 0)

查看vxlan的编号(显示)两台host相同vxlan简历通信

docke跨主机通信-overlay_第16张图片

你可能感兴趣的:(docker,docker,docker跨主机通信,docker-overlay)