目录
第一章 Docker网络架构核心原理
1.1 容器网络模型(CNM)体系
1.2 网络命名空间隔离机制
1.3 虚拟网络设备对(veth)
1.4 网桥驱动模型
第二章 Docker网络模式深度剖析
2.1 Bridge模式(默认模式)
2.1.1 架构实现
2.1.2 通信矩阵
2.1.3 高级配置
2.2 Host模式
2.2.1 技术特征
2.2.2 适用场景
2.2.3 性能对比
2.3 Overlay网络
2.3.1 VXLAN实现
2.3.2 数据平面优化
2.4 Macvlan/IPvlan
2.4.1 对比分析
2.4.2 配置示例
第三章 高级网络配置实践
3.1 自定义网络创建
3.2 多租户网络隔离
3.3 服务发现机制
第四章 网络性能优化
4.1 基准测试指标
4.2 优化策略
第五章 安全防护体系
5.1 网络威胁模型
5.2 防御机制
第六章 云原生网络演进
6.1 Service Mesh集成
6.2 eBPF技术革新
6.3 智能网络编排
第七章 典型场景实践
7.1 微服务网络架构
7.2 混合云网络互联
7.3 物联网边缘计算
Docker采用容器网络模型(Container Network Model,CNM)作为基础架构,该模型由三个核心组件构成:
Linux内核通过network namespace实现网络栈的完全隔离,每个Docker容器默认创建独立命名空间。隔离资源包括:
通过nsenter工具可验证隔离效果:
# 查看容器进程ID
docker inspect --format '{{.State.Pid}}' <container_id>
# 进入容器网络命名空间
nsenter -t <pid> -n ip addr show
veth pair是成对出现的虚拟网络设备,作为跨命名空间通信的”虚拟网线”。其技术特征包括:
典型应用场景:
# 创建veth pair
ip link add veth0 type veth peer name veth1
# 将veth1移入容器命名空间
ip link set veth1 netns <namespace>
# 配置IP地址并启用
ip netns exec <namespace> ip addr add 172.17.0.2/16 dev veth1
ip netns exec <namespace> ip link set veth1 up
Docker默认使用bridge驱动创建docker0虚拟网桥(三层交换机),关键技术实现:
数据流转路径示例:
容器eth0 → veth pair → docker0网桥 → iptables NAT → 物理网卡
网络配置参数示例:
docker run -p 8080:80 --net=bridge --ip=172.17.0.2 nginx
通信类型 |
是否可达 |
依赖条件 |
容器↔互联网 |
是 |
iptables NAT规则 |
容器↔宿主机 |
是 |
docker0网桥直连 |
容器间通信(同网桥) |
是 |
二层MAC寻址 |
跨网桥容器通信 |
否 |
需自定义路由或overlay网络 |
docker network create --opt com.docker.network.driver.mtu=1450 my_bridge
docker run --network my_bridge \
--sysctl net.core.somaxconn=1024 \
--ulimit nofile=65535:65535 \
nginx
指标 |
Bridge模式 |
Host模式 |
延迟 |
50-100μs |
<10μs |
吞吐量 |
5-8Gbps |
10-40Gbps |
连接建立速率 |
5k-10k/s |
50k-100k/s |
关键配置参数:
# docker-compose.yml示例
networks:
my-overlay:
driver: overlay
attachable: true
ipam:
config:
- subnet: 10.10.0.0/24
ifconfig eth0 mtu 1450
docker network create --opt encrypted=true my_secure_overlay
docker network create --driver=overlay \
--opt com.docker.network.driver.overlay.bgp.enable=true \
my_bgp_net
特性 |
Macvlan |
IPvlan |
MAC地址 |
每个容器独立MAC |
共享父接口MAC |
广播处理 |
需要父接口支持 |
无特殊要求 |
VLAN支持 |
原生支持 |
需配合802.1q |
网络性能 |
较高 |
极高 |
ARP代理需求 |
需要 |
不需要 |
# 创建Macvlan网络
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
my_macvlan
# 创建IPvlan L3模式
docker network create -d ipvlan \
--subnet=192.168.2.0/24 \
-o ipvlan_mode=l3 \
my_ipvlan
# 创建带子网定义的bridge网络
docker network create \
--driver=bridge \
--subnet=192.168.100.0/24 \
--gateway=192.168.100.1 \
--opt com.docker.network.bridge.name=mybr0 \
my-custom-net
实现方案:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: tenant-isolation
spec:
podSelector:
matchLabels:
tenant: A
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
tenant: A
egress:
- to:
- podSelector:
matchLabels:
tenant: A
DNS配置示例:
docker run --dns=8.8.8.8 \
--dns-search=example.com \
--dns-opt=ndots:2 \
nginx
指标 |
典型值 |
优化目标 |
延迟 |
50-200μs |
<100μs |
吞吐量 |
10-40Gbps |
>80%线速 |
连接建立速率 |
10k-50k/s |
>100k/s |
包转发率 |
1-5Mpps |
>10Mpps |
ethtool -L eth0 combined 8
echo 0f > /proc/irq/24/smp_affinity
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend
spec:
podSelector:
matchLabels:
role: frontend
ingress:
- from:
- podSelector:
matchLabels:
role: backend
ports:
- protocol: TCP
port: 6379
docker run --tlsverify \
--tlscacert=ca.pem \
--tlscert=cert.pem \
--tlskey=key.pem \
nginx
bpftrace -e 'tracepoint:net:netif_receive_skb { @[comm] = count(); }'
graph TD
A[API Gateway] --> B[Service A]
A --> C[Service B]
B --> D[Database]
C --> D
style A fill:#f9f,stroke:#333
style B fill:#ccf,stroke:#333
style C fill:#ccf,stroke:#333
style D fill:#f96,stroke:#333
ip link add vxlan0 type vxlan id 42 dev eth0 remote 10.0.0.2 dstport 4789
birdc configure
protocol bgp {
local as 64512;
neighbor 10.0.0.1 as 64513;
import all;
export all;
}