Docker 中怎么搭建overlay 网络

发布时间:2021-07-30 14:05:21 作者:Leah
来源:亿速云 阅读:318
# Docker 中怎么搭建 Overlay 网络

## 1. Overlay 网络概述

### 1.1 什么是 Overlay 网络

Overlay 网络是一种构建在现有物理网络之上的虚拟网络层,它通过封装技术(如 VXLAN、GRE 等)在底层网络上创建一个逻辑网络。在 Docker 环境中,Overlay 网络允许多个 Docker 主机上的容器相互通信,就像它们在同一个网络中一样。

关键特性:
- 跨主机容器通信
- 网络隔离
- 自动服务发现
- 加密通信(可选)

### 1.2 Overlay 网络的应用场景

1. **多主机容器通信**:当容器分布在多个 Docker 主机上时
2. **微服务架构**:服务需要跨节点相互发现和通信
3. **混合云环境**:容器运行在不同云提供商或数据中心的场景
4. **网络隔离需求**:不同项目/团队需要独立的网络空间

## 2. 搭建前的准备工作

### 2.1 环境要求

- **Docker 版本**:17.06 或更高版本(推荐最新稳定版)
- **操作系统**:支持 Docker Engine 的 Linux 发行版
- **网络配置**:
  - 主机间 TCP/UDP 端口可达(默认 2377/tcp, 7946/udp, 4789/udp)
  - 关闭防火墙或配置适当规则

### 2.2 初始化 Docker Swarm 集群

Overlay 网络需要 Docker Swarm 模式支持,首先初始化 Swarm:

```bash
# 在第一个节点上初始化 Swarm
docker swarm init --advertise-addr <MANAGER-IP>

# 在其他节点上加入 Swarm
docker swarm join --token <TOKEN> <MANAGER-IP>:2377

验证 Swarm 状态:

docker node ls

3. 创建 Overlay 网络

3.1 基本创建命令

docker network create \
  --driver overlay \
  --subnet 10.0.0.0/24 \
  --attachable \
  my-overlay-net

参数说明: - --driver overlay:指定网络驱动类型 - --subnet:定义网络子网(可选) - --attachable:允许非 Swarm 服务容器连接 - my-overlay-net:自定义网络名称

3.2 高级配置选项

自定义 MTU 大小

docker network create \
  --driver overlay \
  --opt com.docker.network.driver.mtu=1400 \
  my-overlay-net

启用加密

docker network create \
  --driver overlay \
  --opt encrypted \
  secure-overlay

自定义 VXLAN ID

docker network create \
  --driver overlay \
  --opt com.docker.network.driver.overlay.vxlanid_list=4096 \
  custom-vxlan-net

4. 在服务中使用 Overlay 网络

4.1 创建服务并连接到网络

docker service create \
  --name web \
  --network my-overlay-net \
  -p 8080:80 \
  nginx:alpine

4.2 多服务互联示例

# 创建后端服务
docker service create \
  --name backend \
  --network my-overlay-net \
  redis:alpine

# 创建前端服务
docker service create \
  --name frontend \
  --network my-overlay-net \
  -p 80:80 \
  my-web-app-image

4.3 独立容器连接 Overlay 网络

docker run -itd \
  --name standalone-container \
  --network my-overlay-net \
  busybox

5. Overlay 网络管理

5.1 网络查看与诊断

查看所有网络:

docker network ls

查看网络详情:

docker network inspect my-overlay-net

5.2 容器网络测试

在容器内测试连通性:

docker exec -it <container-id> ping <another-container>

5.3 网络维护操作

删除网络:

docker network rm my-overlay-net

更新网络配置:

docker network update \
  --config-only \
  --subnet 10.0.0.0/24 \
  --gateway 10.0.0.1 \
  my-overlay-net

6. 安全配置

6.1 网络加密

创建加密的 Overlay 网络:

docker network create \
  --driver overlay \
  --opt encrypted \
  secure-overlay

6.2 访问控制

限制网络访问:

docker service create \
  --name db \
  --network my-overlay-net \
  --network-alias database \
  --label com.docker.network.allow.other_networks=false \
  postgres:13

6.3 防火墙配置

确保以下端口开放: - TCP 2377:集群管理通信 - TCP/UDP 7946:节点间通信 - UDP 4789:VXLAN 数据流量

7. 常见问题排查

7.1 网络连接问题

症状:容器间无法通信

排查步骤: 1. 检查 Swarm 节点状态:docker node ls 2. 验证网络连接:docker network inspect 3. 检查容器 IP 分配:docker inspect <container> 4. 测试基础连通性:pingtraceroute

7.2 性能问题

优化建议: - 调整 MTU 大小匹配底层网络 - 考虑使用 --opt encrypted=false 禁用加密(非敏感环境) - 确保主机间网络延迟低

7.3 常见错误解决

“network not manually attachable”: 添加 --attachable 标志重新创建网络

“endpoint already exists”: 重启 Docker 服务或删除冲突的网络端点

8. 高级主题

8.1 多子网 Overlay 网络

docker network create \
  --driver overlay \
  --subnet 10.0.1.0/24 \
  --subnet 10.0.2.0/24 \
  multi-subnet-overlay

8.2 与 ingress 网络的交互

Docker 默认会创建一个名为 ingress 的 Overlay 网络用于服务暴露。可以自定义:

docker network create \
  --driver overlay \
  --ingress \
  --subnet 10.11.0.0/16 \
  custom-ingress

8.3 IPv6 支持

docker network create \
  --driver overlay \
  --ipv6 \
  --subnet 2001:db8::/64 \
  ipv6-overlay

9. 实际应用案例

9.1 微服务架构部署

# 创建专用 Overlay 网络
docker network create --driver overlay microservices-net

# 部署各微服务
docker service create --name user-service --network microservices-net user-service:1.0
docker service create --name order-service --network microservices-net order-service:1.0
docker service create --name api-gateway --network microservices-net -p 80:8080 api-gateway:1.0

9.2 跨数据中心部署

# 在每个数据中心的 Swarm 节点上
docker network create \
  --driver overlay \
  --opt com.docker.network.driver.overlay.global=true \
  global-net

10. 性能优化建议

  1. 选择合适的 MTU

    docker network create --opt com.docker.network.driver.mtu=1400 my-overlay
    
  2. 控制网络范围:避免过大的子网分配

  3. 节点布局:将频繁通信的容器部署在同一物理节点

  4. 网络监控:使用 docker stats 或第三方工具监控流量

11. 替代方案比较

方案 适用场景 优点 缺点
Overlay 网络 跨主机通信 内置支持,配置简单 性能开销
Host 网络 单主机高性能 零开销 无隔离
Macvlan 需要直接暴露到物理网络 高性能 配置复杂
第三方网络插件 (Calico/Weave) 大规模生产环境 高级功能 额外依赖

12. 结论

Docker Overlay 网络为容器化应用提供了强大的跨主机通信能力,是构建分布式容器应用的理想选择。通过合理的配置和管理,可以实现: - 无缝的服务发现和通信 - 灵活的网络隔离 - 安全的跨数据中心连接

随着 Docker 技术的不断发展,Overlay 网络将继续成为容器网络解决方案的核心组件之一。


附录:常用命令速查表

命令 描述
docker network create --driver overlay 创建 Overlay 网络
docker network inspect <name> 查看网络详情
docker service create --network 创建连接到网络的服务
docker network ls 列出所有网络
docker network rm <name> 删除网络
docker network connect 连接容器到网络
docker network disconnect 从网络断开容器

进一步学习资源: - Docker 官方文档 - Overlay 网络 - Docker 网络设计模式 - 深入理解 Docker Overlay 网络 “`

推荐阅读:
  1. docker网络模式
  2. (七)Docker网络和 overlay跨主机通讯

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

docker overlay

上一篇:C++中char型变量地址输出的示例分析

下一篇:golang中log4go日志输出优化的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》