知识卡片

Docker六种网络模式的隔离程度与适用场景差异

普通读书笔记卡

内容

Docker把[[Linux-Bridge靠一条特殊转发规则同时充当交换机与三层网关入口]] 等底层机制封装成六种开箱即用或可自建的网络模式,隔离程度从高到低排列。 桥接模式(默认,bridge):为容器建独立网络名称空间,用veth pair一端 接容器一端接docker0网桥,同网桥内容器二层直连,网桥外要走网关做NAT。 主机模式(host):容器不建独立网络名称空间,直接用宿主机的网卡和网络 栈,没有NAT开销但端口号不能和宿主机冲突,隔离性最弱。空置模式(none): 建独立网络名称空间但不建任何虚拟网络设备,容器只能看到回环设备,留给 用户自己定制网络配置。容器模式(--network=container:容器名):新容器 加入指定容器的网络名称空间、共享全部网络资源(可用localhost通信), 但文件、PID等其他资源仍隔离,端口不能冲突。MACVLAN模式:给容器分配 副本网卡,通过MAC地址直接使用宿主机物理设备,是追求通信性能场合的 最佳选择,但Docker的实现只支持Bridge通信模式。Overlay模式:本质就是 VXLAN,主要用于Docker Swarm服务间通信,随着Docker Swarm败给Kubernetes 已经很少被实际使用。这六种模式的排列印证了一个反复出现的取舍:隔离性 越强(bridge/none)通信越安全但代价越高,隔离性越弱(host)性能越好但 风险和冲突可能性也越大。

参考来源

- 位置:《凤凰架构:构建可靠的大型分布式系统》第12章"容器间网络"12.1.4节 "容器间通信"(源文件:_epub-src对应OEBPS/Text/chapter148.xhtml) - 结论依据:原文逐一介绍桥接/主机/空置/容器/MACVLAN/Overlay六种Docker 网络模式的实现方式、隔离程度和适用场景,并指出Overlay模式因Docker Swarm败于Kubernetes而很少实际使用,直接支撑本卡片结论。 - 原始内容:桥接模式……Docker会为新容器分配独立的网络名称空间……主机 模式……容器一切的网络设施……都直接使用宿主机上的真实设施……MACVLAN 模式……在追求通信性能的场合,这种网络是最好的选择……Overlay模式…… 这种网络模式实际很少使用。