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网络提供外网能力准备的
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
下载一个consul数据库的镜像
[root@server1 ~]# docker pull progrium/consul
[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
[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
[root@server1 ~]# firefox 192.168.43.124:8500
[root@server1 ~]# ifconfig ens33 promisc
[root@server1 ~]# ifconfig ens33
[root@server1 ~]# docker network create -d overlay --attachable ov_net1
#--attachable独立网络
范围:全局范围global
这个网卡会同步到server2服务器上面,到server2服务器上面可以查看一下网卡
[root@server2 ~]# docker network ls
查看网卡(ov_net1)信息
[root@server1 ~]# docker inspect ov_net1
表示ov_net1网段是10.0.0.0 网关是10.0.0.1
[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
以下内容是扩展
查看veth和peer的接口关系
[root@server1 ~]# brctl show
查看veth和peer的连接的关系(显示vetheac0c4b(16)和15是一对veth和peer)
[root@server1 ~]# ip a | grep vetheac0c4b
[root@server1 ~]# docker exec bbox1 ip a
查看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简历通信