news 2026/5/11 1:58:32

第五部分-DockerCompose——29. Swarm 网络

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第五部分-DockerCompose——29. Swarm 网络

29. Swarm 网络

1. Swarm 网络概述

Swarm 模式提供了多种网络驱动,用于解决跨主机容器通信问题。Overlay 网络是 Swarm 中最常用的网络驱动,它创建一个跨所有 Swarm 节点的虚拟网络。

┌─────────────────────────────────────────────────────────────┐ │ Swarm Overlay 网络 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Overlay Network │ │ │ │ 10.0.0.0/24 │ │ │ │ ┌─────────┐ ┌─────────┐ │ │ │ │ │ Node A │◄────────►│ Node B │ │ │ │ │ │10.0.0.2 │ VXLAN │10.0.0.3 │ │ │ │ │ └────┬────┘ └────┬────┘ │ │ │ │ │ │ │ │ │ │ ▼ ▼ │ │ │ │ ┌───────┐ ┌───────┐ │ │ │ │ │ web-1 │ │ web-2 │ │ │ │ │ │ 容器 │ │ 容器 │ │ │ │ │ └───────┘ └───────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ Overlay 网络特点: │ │ - 跨主机容器通信 │ │ - VXLAN 封装 │ │ - 加密选项 │ │ - 服务发现 │ │ │ └─────────────────────────────────────────────────────────────┘

2. Overlay 网络

2.1 创建 Overlay 网络

# 创建 Overlay 网络(不可附加)dockernetwork create-doverlay my-overlay# 创建可附加的 Overlay 网络(允许独立容器连接)dockernetwork create-doverlay--attachablemy-overlay# 创建带子网的 Overlay 网络dockernetwork create-doverlay\--subnet=10.0.10.0/24\--gateway=10.0.10.1\my-overlay# 创建带加密的 Overlay 网络dockernetwork create-doverlay\--optencrypted\my-overlay# 查看网络dockernetworklsdockernetwork inspect my-overlay

2.2 服务使用 Overlay 网络

# 创建服务并连接到 Overlay 网络dockerservicecreate--nameweb\--networkmy-overlay\--replicas3\nginx# 创建另一个服务,同一网络dockerservicecreate--nameapi\--networkmy-overlay\--replicas3\myapi# 访问验证dockerservicelogs web

3. 网络类型对比

网络驱动用途范围适用场景
overlay跨主机容器通信Swarm 集群服务间通信
overlay (attachable)独立容器连接Swarm 集群调试混用
bridge单机容器通信单节点本地开发
host共享宿主机网络单节点高性能
macvlan直接使用物理网络单节点特定 IP 需求

4. Ingress 网络

4.1 概述

Ingress 网络是 Swarm 默认创建的 overlay 网络,负责处理外部请求的负载均衡。

# 查看 Ingress 网络dockernetworkls|grepingress# Ingress 网络详情dockernetwork inspect ingress# 创建服务时自动使用 Ingress 网络(端口发布)dockerservicecreate--nameweb\--publish8080:80\--replicas3\nginx# 请求流程# 外部 → 任意节点 8080 → Ingress 网络 → 目标节点容器

4.2 Routing Mesh

# Routing Mesh 工作原理# 1. 服务发布端口 8080:80# 2. 所有节点监听 8080 端口# 3. 请求到达任一节点,Ingress 网络负载均衡到后端容器# 验证 Routing Mesh# 查询节点 IPdockernodels# 从任意节点访问curlhttp://node1:8080curlhttp://node2:8080curlhttp://node3:8080# 都能访问到服务

5. 服务发现与 DNS

5.1 内置 DNS

# Swarm 提供内置 DNS 服务# 服务名解析到 VIP# 创建服务dockerservicecreate--nameapi--replicas3myapi# 其他服务通过服务名访问# ping api# curl http://api:8080# 查看服务的 VIPdockerserviceinspect api--format'{{.Endpoint.VirtualIPs}}'

5.2 任务级别的 DNS

# 访问特定任务dockerservicecreate--nameweb--replicas3nginx# 任务 DNS 格式:<task-name>.<service-name># web.1.web# web.2.web# web.3.web# 解析任务 IPdockerexec-it<container>nslookupweb.1.web

6. 网络加密

6.1 启用加密

# 创建加密的 Overlay 网络dockernetwork create-doverlay\--optencrypted\encrypted-net# 查看加密状态dockernetwork inspect encrypted-net|grepencrypted# 使用加密网络dockerservicecreate--namesecure-app\--networkencrypted-net\--replicas3\myapp

6.2 加密配置

# Swarm 加密参数# --opt encrypted: 启用 IPSec 加密# 自动处理密钥轮换# 验证加密dockernetwork inspect encrypted-net|grep-A10Options

7. 网络隔离

7.1 多网络隔离

# 创建不同网络dockernetwork create-doverlay frontend-netdockernetwork create-doverlay backend-netdockernetwork create-doverlay database-net# 前端服务(只能访问前端网络)dockerservicecreate--nameweb\--networkfrontend-net\nginx# API 网关(连接前端和后端)dockerservicecreate--nameapi\--networkfrontend-net\--networkbackend-net\myapi# 数据库(只能被后端访问)dockerservicecreate--namedb\--networkbackend-net\mysql# 通信路径# web → api (通过 frontend-net)# api → db (通过 backend-net)# web 无法直接访问 db

7.2 内部网络

# 创建内部网络(无外网访问)dockernetwork create-doverlay\--internal\internal-net# 服务只能与内部网络通信,无法访问外网dockerservicecreate--nameinternal-app\--networkinternal-net\myapp

8. 负载均衡

8.1 内置负载均衡

# Swarm 提供两种负载均衡# 1. Ingress 负载均衡(外部请求)# 2. 服务 VIP 负载均衡(内部请求)# 创建服务dockerservicecreate--nameweb\--publish8080:80\--replicas5\nginx# 查看负载均衡配置dockerserviceinspect web--format'{{.Endpoint.Spec}}'

8.2 外部负载均衡

# 使用外部负载均衡(如 Nginx、HAProxy)# 方案1:配置外部负载均衡器指向所有 Swarm 节点dockerservicecreate--nameweb\--publish80:80\--modeglobal\nginx# 方案2:使用 DNS 轮询dockerservicecreate--nameweb\--endpoint-mode dnsrr\--replicas5\nginx

9. 网络调试

9.1 查看网络

# 列出所有网络dockernetworkls# 查看网络详情dockernetwork inspect my-overlay# 查看网络连接的容器dockernetwork inspect my-overlay--format'{{range .Containers}}{{.Name}} {{.IPv4Address}}{{"\n"}}{{end}}'# 查看服务网络信息dockerserviceinspect web--format'{{.Endpoint.Spec}}'

9.2 网络诊断

# 进入容器测试网络dockerexec-it<container>bash# 安装网络工具apt-getupdate&&apt-getinstall-yiputils-ping dnsutilscurl# 测试连通性pingapinslookupapicurlhttp://api:8080# 查看路由iproute# 查看网络统计netstat-tuln

10. 网络性能优化

10.1 调整 MTU

# 创建 Overlay 网络时指定 MTUdockernetwork create-doverlay\--optcom.docker.network.driver.mtu=1450\my-overlay

10.2 使用 Host 网络

# 高性能场景使用 host 网络dockerservicecreate--namehigh-perf\--networkhost\--modeglobal\myapp

11. 完整网络示例

#!/bin/bash# 创建完整的多层网络架构# 1. 创建三层网络dockernetwork create-doverlay frontend-netdockernetwork create-doverlay backend-netdockernetwork create-doverlay database-net# 2. Web 层(只能访问前端)dockerservicecreate\--nameweb\--networkfrontend-net\--publish80:80\--replicas3\nginx# 3. API 层(前后端通信)dockerservicecreate\--nameapi\--networkfrontend-net\--networkbackend-net\--replicas5\--limit-cpu0.5\myapi# 4. 缓存层redis_service# 5. 数据库层dockerservicecreate\--namedb\--networkbackend-net\--mounttype=volume,src=db-data,dst=/var/lib/postgresql/data\--replicas1\postgres# 6. 监控代理(全局)dockerservicecreate\--namemonitor\--modeglobal\--networkmonitoring-net\prom/node-exporter# 验证网络dockerservicelsdockernetworklsdockernetwork inspect frontend-net

12. 常用命令速查

操作命令
创建 Overlay 网络docker network create -d overlay
创建可附加网络docker network create -d overlay --attachable
创建加密网络docker network create -d overlay --opt encrypted
创建内部网络docker network create -d overlay --internal
列出网络docker network ls
查看网络docker network inspect
删除网络docker network rm
服务连接网络docker service create --network

13. 常见问题

Q1: Overlay 网络无法 ping 通?

检查防火墙是否允许 VXLAN 端口 (4789) 通信。

Q2: 如何让容器访问外网?

使用非内部网络,默认 Overlay 可以访问外网。

Q3: 服务之间如何通信?

通过服务名,Swarm DNS 自动解析。

14. 小结

  • Overlay 网络:跨主机容器通信
  • Ingress 网络:处理外部请求负载均衡
  • Routing Mesh:任意节点访问服务
  • 网络加密:IPSec 加密 Overlay 流量
  • 网络隔离:多网络实现安全隔离
  • 服务发现:内置 DNS 解析服务名
  • 负载均衡:内置 VIP 负载均衡
  • 性能优化:调整 MTU、使用 host 网络

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 1:54:33

Dify插件集成Mem0 AI:为LLM应用构建长期记忆系统的实践指南

1. 项目概述与核心价值最近在折腾AI应用开发&#xff0c;特别是想给聊天机器人或者智能助手加上一个“长期记忆”的能力&#xff0c;让它们能记住和用户之前的对话历史、用户偏好&#xff0c;甚至是一些个性化的上下文信息。这听起来像是给AI装上一个“大脑皮层”&#xff0c;让…

作者头像 李华
网站建设 2026/5/11 1:40:43

基于WebRTC与Socket.IO构建本地化低延迟摄像头流媒体应用

1. 项目概述&#xff1a;一个本地化的WebRTC摄像头流媒体方案最近在折腾一个挺有意思的小项目&#xff0c;起因很简单&#xff1a;我需要在一个内部工作坊里&#xff0c;把一台笔记本电脑的摄像头画面&#xff0c;实时、低延迟地分享给会议室里的另一台设备&#xff0c;比如一台…

作者头像 李华
网站建设 2026/5/11 1:40:31

量子神经网络在噪声环境下的逼近理论与优化实践

1. 量子神经网络与噪声环境下的UAT理论概述量子神经网络&#xff08;QNN&#xff09;作为量子计算与经典机器学习交叉领域的前沿研究方向&#xff0c;其核心价值在于利用量子态的叠加性和纠缠特性&#xff0c;实现对高维函数的高效逼近。在理想情况下&#xff0c;量子神经网络遵…

作者头像 李华
网站建设 2026/5/11 1:36:50

高速串行链路中的自适应均衡与PAM4/DFE硬件复用技术

1. 双模PAM2/4收发器中的自适应均衡技术解析在高速串行链路设计中&#xff0c;信号完整性始终是工程师面临的核心挑战。随着数据传输速率突破5Gb/s大关&#xff0c;FR4背板等传统互连介质的高频损耗特性成为制约系统性能的关键瓶颈。我在实际项目中发现&#xff0c;仅靠传统的固…

作者头像 李华
网站建设 2026/5/11 1:34:59

Instrukt框架:本地大模型的指令编排与智能体开发实战

1. 项目概述&#xff1a;一个为本地大模型打造的“指令中心”最近在折腾本地大模型应用开发的朋友&#xff0c;估计都绕不开一个核心问题&#xff1a;如何让模型精准地理解并执行我们复杂的、多步骤的指令&#xff1f;比如&#xff0c;你想让模型帮你分析一份财报PDF&#xff0…

作者头像 李华