1.overlay网络是什么?
在Docker中,Overlay网络是一种容器网络驱动程序,它允许在多个Docker主机上创建一个虚拟网络,使得容器可以通过这个网络相互通信。
Overlay网络使用VXLAN(Virtual Extensible LAN)技术来实现多主机之间的通信。每个Docker主机上的容器都可以加入Overlay网络,并且它们可以像在同一台主机上一样进行通信,而不需要了解底层主机的网络配置。
当容器发送网络请求时,Overlay网络驱动程序将请求封装为VXLAN包,并通过底层主机的物理网络发送到目标容器所在的主机。目标主机上的Overlay网络驱动程序将VXLAN包解封,并将请求传递给目标容器。
Overlay网络具有以下特点:
- 跨主机通信:容器可以在不同的Docker主机上运行,并通过Overlay网络进行通信。
- 自动路由:Overlay网络驱动程序自动处理容器之间的路由,使得容器可以直接通过容器名称进行通信。
- 安全性:Overlay网络使用加密和身份验证来保护容器之间的通信,确保数据的安全性。
- 可扩展性:Overlay网络可以在多个主机上创建数千个容器,并且能够自动处理容器的动态添加和删除。
- 灵活性:Overlay网络可以与其他网络驱动程序(如Bridge、Host等)一起使用,以满足不同的网络需求。
Overlay网络是Docker中常用的网络驱动程序之一,它提供了跨主机通信的能力,使得容器在分布式环境中能够方便地进行网络通信。
实现overlay环境
部署环境
主机名 | IP |
consul | 192.168.2.5 |
node1 | 192.168.2.6 |
node2 | 192.168.2.7 |
1.在consul主机下载consul镜像
[root@localhost ~]# docker pull progrium/consul
2.启动consul容器
[root@localhost ~]# docker run -d --restart always -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul -server -bootstrap -ui-dir /ui 3ae189bff461fc03e004598c399b5746085918a84effc0cea8c15306bfa53e3b
3.将三台主机防火墙关闭
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# iptables -F [root@localhost ~]# iptables-save
4.在所有node上指定consul服务器选项
[root@localhost ~]# vi /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.2.5:8500 --cluster-advertise=ens33:2376 [root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl restart docker
注意:这里需要将docker版本降低才可以连接consul
[root@localhost ~]# yum -y remove docker-ce [root@localhost ~]# yum -y install docker-ce-20.10.24-3.el7
5.完成后,在node上其中一个
[root@localhost ~]# docker network create -d overlay --subnet 192.168.6.0/24 --gateway 192.168.6.254 ov_net1
6.分别在两个节点上创建的overlay网络生成容器,验证overlay网络
#node1操作 [root@localhost ~]# docker run -it --name test1 --network ov_net1 busybox #node2操作 [root@localhost ~]# docker run -it --name test2--network ov_net1 busybox
7.相互ping同网络
/ # ping 192.168.6.1 PING 192.168.6.1 (192.168.6.1): 56 data bytes 64 bytes from 192.168.6.1: seq=0 ttl=64 time=0.450 ms 64 bytes from 192.168.6.1: seq=1 ttl=64 time=0.272 ms 64 bytes from 192.168.6.1: seq=2 ttl=64 time=0.379 ms