Docker 入门之overlay网络

Docker 入门之overlay网络

前序

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

  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网络

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

bash 复制代码
# 确认内核转发
sysctl -w net.ipv4.ip_forward=1

# docker版本
docker version

防火墙规则:

bash 复制代码
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. 管理节点
bash 复制代码
docker swarm init --advertise-addr xxxxx
  1. 工作节点(这条命令的token是上一个命令输出的)
bash 复制代码
docker swarm join --token  xxxx    xxx

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

检查节点:

在管理节点执行:

bash 复制代码
docker node ls

创建overlay网络

在管理节点上创建:

bash 复制代码
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字节的头部开销。为避免数据包分片导致性能下降

部署服务

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

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

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

bash 复制代码
docker ps

测试

找一个节点,进入容器:

bash 复制代码
docker exec -it 3498d1a71152 sh

ip addr show

curl http://web

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

bash 复制代码
bridge fdb show

可以看到vlan 信息

小结

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

其他常用命令

bash 复制代码
# 1. 节点操作
docker node update --availability pause <节点ID>   #暂停节点,不再接收新任务,但现有任务继续运行。
docker node update --availability drain <节点ID>   #排空节点,不接收新任务且现有任务迁移到其他节点。
docker node update --availability active <节点ID>  #恢复节点为活动状态

# 2. 节点退出集群
docker swarm leave

# 3. 查看服务状态
docker service ls
docker service ps my-app

# 4 缩减到2个副本
docker service scale web-service=2

# 5. 扩展服务
docker service scale my-app=5

# 6. 更新服务镜像
docker service update --image nginx:latest my-app

# 7. 监控服务日志
docker service logs -f my-app

# 8. 服务维护时排空节点
docker node update --availability drain <节点ID>

# 9. 删除服务
docker service rm my-app

欢迎关注:

Docker 入门之overlay网络

相关推荐
电气铺二表姐137744166152 小时前
路灯安全用电云平台——守护城市照明,筑牢用电安全防线
网络
老卢聊运维2 小时前
从零理解 CRD 与 Operator:如何扩展 Kubernetes
容器·kubernetes
刘~浪地球2 小时前
云原生与容器--Docker 容器化最佳实践
docker·云原生·容器
不一样的故事1262 小时前
Linux 系统网络配置
服务器·网络·php
蓝天白云下遛狗2 小时前
关于多网卡情况下docker内部网络通讯研究
运维·docker·容器
富士康质检员张全蛋2 小时前
安装完成Docker之后配置修改相关的内核参数
docker·容器
帐篷Li2 小时前
创建Controller HTTP测试脚本
网络·网络协议·http
wanhengidc2 小时前
服务器如何防范爬虫攻击?
运维·服务器·网络·爬虫·游戏·智能手机
捞的不谈~2 小时前
LUCID相机(HTR003S-001)更改IP地址
网络·网络协议·tcp/ip