一、核心原则
原则 |
说明 |
关键实践 |
隔离性 |
不同服务/组件间网络隔离 |
按功能划分网络区域 (前端/后端/数据库) |
可观测性 |
全面监控网络状态 |
实现网络流量、性能、错误率监控 |
安全性 |
最小权限访问原则 |
网络策略限制 + 服务间加密 |
可维护性 |
简单清晰的网络结构 |
标准化命名 + 声明式配置 |
弹性 |
应对网络故障能力 |
重试机制 + 断路器模式 |
二、网络架构设计策略
1. 集群网络拓扑模型
2. 网络类型选择矩阵
使用场景 |
推荐网络类型 |
优势 |
注意事项 |
服务间通信 |
自定义 Bridge 网络 |
DNS 自动发现、隔离性好 |
单主机限制 |
跨节点通信 |
Overlay 网络 |
跨主机通信、内置加密 |
需要 Swarm 模式 |
高性能需求 |
Macvlan/IPvlan |
接近裸机性能 |
需要物理网络配合 |
监控/日志收集 |
专用监控网络 |
独立带宽保障 |
额外配置 |
数据库集群 |
独立数据网络 |
安全隔离、低延迟 |
严格访问控制 |
三、网络实施最佳实践
1. 网络创建规范
docker network create \
--driver overlay \
--subnet 10.5.0.0/24 \
--gateway 10.5.0.1 \
--opt encrypted \
--label env=production \
--label tier=application \
prod-app-network
2. 多网络连接策略
services:
webapp:
networks:
- frontend-net
- monitoring-net
database:
networks:
- backend-net
- monitoring-net
networks:
frontend-net:
driver: overlay
ipam:
config:
- subnet: "10.10.1.0/24"
backend-net:
driver: overlay
ipam:
config:
- subnet: "10.10.2.0/24"
monitoring-net:
driver: overlay
3. 服务发现对比
方法 |
适用场景 |
优点 |
缺点 |
DNS 名称解析 |
大多数服务间通信 |
自动维护、与网络生命周期同步 |
需要处理 DNS 缓存 |
嵌入式 DNS |
Docker 默认方案 |
开箱即用 |
定制能力有限 |
外部 DNS (Consul, etcd) |
混合环境/多集群 |
跨集群服务发现 |
增加运维复杂度 |
负载均衡 VIP |
Swarm 服务端点 |
自动负载均衡 |
仅限 Swarm 服务 |
四、安全加固措施
1. 网络访问控制矩阵
源网络 |
目标网络 |
允许协议 |
端口 |
目的 |
frontend-net |
app-net |
TCP |
8080 |
前端访问应用服务 |
app-net |
db-net |
TCP |
5432 |
应用访问数据库 |
monitoring-net |
all-net |
TCP |
9100 |
监控数据采集 |
db-net |
无 |
- |
- |
默认拒绝所有入站 |
2. 安全配置示例
docker network create \
--driver overlay \
--internal \
--opt com.docker.network.bridge.enable_icc=false \
secure-db-network
docker network create \
--opt encrypted \
--opt com.docker.network.driver.mtu=1400 \
secure-app-network
五、监控与诊断方案
1. 关键监控指标
指标类型 |
监控工具 |
告警阈值 |
网络延迟 |
Prometheus + Blackbox |
> 100ms |
丢包率 |
Node Exporter |
> 1% |
带宽利用率 |
cAdvisor |
> 80% 持续5min |
DNS 解析失败 |
coredns 指标 |
> 5次/分钟 |
连接错误 |
应用日志 + ELK |
连续错误 > 10次 |
2. 网络诊断工具箱
docker exec -it <container> \
sh -c "curl -I http://peer-service; dig peer-service; traceroute peer-service"
docker inspect <container> -f "{{.NetworkSettings.SandboxKey}}"
nsenter --net=<sandbox> netstat -tulpn
nsenter --net=<sandbox> tcpdump -i eth0 port 5432
六、多环境网络策略
环境隔离方案
环境 |
网络策略 |
隔离级别 |
典型配置 |
生产环境 |
严格隔离 |
网络级隔离 + 加密 |
独立VPC/子网 |
预发布环境 |
部分隔离 |
命名空间隔离 |
共享基础设施 |
开发环境 |
最小隔离 |
仅项目隔离 |
共享网络 |
CI/CD环境 |
临时隔离 |
动态创建销毁 |
docker-compose |
七、故障处理流程
八、进阶实践技巧
MTU 优化
docker network create --opt com.docker.network.driver.mtu=1400 optimized-net
双栈网络支持
docker network create --ipv6 --subnet=fd00::/64 dualstack-net
网络性能调优
docker run --network=host --ulimit nofile=100000:100000 high-perf-app
零信任网络模型
kind: NetworkPolicy
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress: []
egress: []
九、集群网络选择建议
集群规模 |
推荐方案 |
优点 |
工具链 |
中小集群 (<50节点) |
Docker Swarm Overlay |
简单易用、内置加密 |
Swarm + cAdvisor |
大型集群 |
Kubernetes + CNI |
丰富网络策略、行业标准 |
Calico/Cilium + Prometheus |
混合云环境 |
服务网格 |
跨集群通信、统一管理 |
Istio + Envoy |
高性能计算 |
SR-IOV CNI |
接近裸机性能 |
Kubernetes + SR-IOV CNI |
关键提示:当集群规模超过50节点或需要高级网络功能时,建议迁移到Kubernetes并使用专业CNI插件(如Cilium或Calico),它们提供:
- 基于eBPF的高性能网络
- L7网络策略
- 原生Kubernetes集成
- 深度可观测性
十、总结检查清单
- 所有服务使用自定义网络(非默认bridge)
- 按功能分区实现网络隔离
- 关键网络配置了加密选项
- 实现网络策略最小权限控制
- 建立网络监控和告警系统
- 定期进行网络故障演练
- 文档记录网络拓扑和IP规划
- 自动化网络创建和清理流程
for network in $(docker network ls -q); do
echo "Checking network $(docker network inspect -f '{{.Name}}' $network)"
docker network inspect $network | jq '.[].Containers[].IPv4Address' | uniq -c
ping -c 2 $(docker network inspect -f '{{.IPAM.Config[0].Gateway}}' $network)
done
优雅的Docker网络实践核心是:隔离确保安全,监控保障稳定,自动化提升效率。在生产集群中,应始终将网络视为一等公民进行设计和维护。