Docker入门之overlay网络

admin 2026-04-13 05:37:35 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍DockerOverlay网络的核心概念与实战应用,基于VXLAN技术实现跨主机容器通信。重点演示在DockerSwarm集群中创建overlay网络、部署多副本服务及网络测试的全流程,包含防火墙配置、MTU优化等关键技术要点,并提供节点管理、服务扩缩容等运维命令。适用于中小规模集群的轻量级容器编排场景。 综合评分: 78 文章分类: 云安全,解决方案,安全工具,安全建设,其他


cover_image

Docker 入门之overlay网络

原创

一只岸上的鱼 一只岸上的鱼

一只岸上的鱼

2026年4月10日 09:16 江苏

前序

推荐先看过之前的入门文章:

  1. Docker 入门之基本概念
  2. 入门之overlay网络

什么是什么是Overlay网络?

Overlay网络,顾名思义,是一种“覆盖”在现有物理网络(Underlay)之上的虚拟网络层。它通过在底层IP网络之上封装额外的网络层,实现逻辑上的网络隔离和扩展。

其核心工作原理基于**VXLAN(Virtual Extensible LAN)**技术。 这里省略一万字关于VXLAN的介绍,感兴趣的同学可以自行查阅。

什么时候用overlay网络?

当你知道overlay网络的基础就是vxlan之后,那么就差不多知道时候适用overlay网络了。

  1. 多主机的容器编排
  2. 分布式集群的容器编排
  3. 多租户的网络隔离

如何使用overlay网络?

适用overlay网络的方式和你使用的编排工具有关,他也需要各种插件的配合才能完成,但是今天就以最简单的docker swarm为例,来演示如何使用overlay网络。

这是Overlay网络最原生、最无缝的集成场景,也是最轻量级的场景,非常使用节点不多的集群,比如10个点以下的。不想资源被k8s这种重型的编排工具占据了。

搭建基于docker swarm的overlay网络

主机(节点)环境准备和确认:

# 确认内核转发sysctl -w net.ipv4.ip_forward=1
# docker版本docker version

防火墙规则:

iptables -A INPUT -p tcp -m multiport --dports 2377,7946,4789 -j ACCEPT

TCP 2377:Swarm集群管理端口,用于管理节点与工作节点的安全通信。 TCP/UDP 7946:用于节点间发现(Gossip协议),维护集群成员状态。 UDP 4789:VXLAN数据平面端口

为了实验环境,我直接关了防火墙!但是如果你没关,需要记得放行这些端口,最好是指定对端ip的放行

创建集群

  1. 管理节点
docker swarm init --advertise-addr xxxxx

  1. 工作节点(这条命令的token是上一个命令输出的)
docker swarm join --token  xxxx    xxx

管理节点不干活,所以至少准备2个work节点,才能正常使用overlay网络。

检查节点:

在管理节点执行:

docker node ls

创建overlay网络

在管理节点上创建:

docker network create -d overlay \  --attachable \  --subnet 10.10.0.0/24 \  --gateway 10.10.0.1 \  --opt com.docker.network.driver.mtu=1450 \  my-overlay

这里补充说一下mtu: VXLAN封装会增加约50字节的头部开销。为避免数据包分片导致性能下降

部署服务

# 部署一个Nginx服务,拥有2个副本,并自动接入my-overlay网络docker service create \  --name web \  --replicas 2 \  --network my-overlay \  nginx:alpine

Swarm调度器会将两个容器副本分配到集群中的节点上。它们通过my-overlay网络直接通信,并通过服务名web实现内部发现和负载均衡

查看一下每个节点上的容器:

docker ps

测试

找一个节点,进入容器:

docker exec -it 3498d1a71152 sh
ip addr show
curl http://web

在任一节点的宿主机上执行:

bridge fdb show

可以看到vlan 信息

小结

Overlay网络适用于Docker Swarm集群环境或需要简单配置且不依赖第三方工具的场景。

其他常用命令

# 1. 节点操作docker node update --availability pause <节点ID> &nbsp;&nbsp;#暂停节点,不再接收新任务,但现有任务继续运行。docker node update --availability drain <节点ID> &nbsp;&nbsp;#排空节点,不接收新任务且现有任务迁移到其他节点。docker node update --availability active <节点ID> &nbsp;#恢复节点为活动状态
# 2. 节点退出集群docker swarm leave
# 3. 查看服务状态docker service lsdocker service ps&nbsp;my-app
# 4 缩减到2个副本docker service scale web-service=2
# 5. 扩展服务docker service scale&nbsp;my-app=5
# 6. 更新服务镜像docker service update --image nginx:latest&nbsp;my-app
# 7. 监控服务日志docker service logs -f&nbsp;my-app
# 8. 服务维护时排空节点docker node update --availability drain <节点ID>
# 9. 删除服务docker service rm&nbsp;my-app

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:一只岸上的鱼 一只岸上的鱼 一只岸上的鱼《Docker 入门之overlay网络》

评论:0   参与:  0