当前位置: 首页 > news >正文

第五部分-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 网络

http://www.jsqmd.com/news/792950/

相关文章:

  • 模型压缩实战:剪枝、量化与蒸馏技术解析
  • Python微信机器人框架设计:插件化架构与异步消息处理实战
  • VSCode写Markdown遇到目录乱码?手把手教你搞定TOC插件和行尾符设置
  • GaN功率器件表征实战:从SOA曲线到动态测试与可靠性评估
  • React打字机动画组件:从状态机原理到工程实践
  • Godot游戏Lua模组沙盒安全集成指南
  • AI侧边栏扩展开发指南:从架构设计到安全实践
  • 解决方案:Noto Emoji - 一站式解决跨平台表情符号显示难题的完整指南
  • 数字孪生:破解工业AI数据瓶颈,生成高质量训练数据
  • 科技礼仪的商业价值:从餐厅手机寄存看体验经济新范式
  • STM32F3混合信号MCU实战:从ADC/DAC到传感器融合的嵌入式系统设计
  • 一二三思维导图
  • Zrolg项目部署
  • FPGA原型验证平台:现代SoC设计的核心工具与实战指南
  • 别再满世界找了!手把手教你用JetBrains官网和Toolbox App下载任意历史版本(IDEA/PyCharm等)
  • AI 视频生产力工具:Sulphur-2-GGUF 整合包深度评测与工作流分享》
  • Go语言游标分页库Kuysor:告别OFFSET性能瓶颈,实现高效大数据查询
  • SpringBoot参数验证
  • AI技能赋能:Crowdin本地化工作流自动化实战指南
  • 终极DLSS Swapper指南:3步掌握游戏性能优化利器,免费提升帧率
  • 从虚拟到物理:原型设计技术全景与实战指南
  • Chinese-LLaMA-Alpaca-2:从原理到实践,打造本地化中文大语言模型
  • Python自动化构建个人抖音技能库:合规爬虫与内容管理实践
  • 免费 IP 地址查询 API 接入实战_街道级归属接口调用与封装_ip geolocation api
  • Taotoken的TokenPlan套餐如何帮助个人开发者更可控地规划AI支出
  • 技术团队招聘与解雇实践:从Hire Slow Fire Fast到慧招快炒
  • 从零到一:在VS2019中高效部署OpenCV开发环境
  • Rust AI代理引擎hermes-rs:架构解析与高性能实践指南
  • 认知神经科学研究报告【20260045】
  • 算法复杂度的实验估算与误差分布建模的技术7