文章目录
docker 网络管理
docker 网络基础
docker 容器网络模型
- 1.7.0版本开始,Docker 将网络功能以插件化的形式剥离出来,成为独立的容器网络项目,被称为
libnetwork
,为不同容器定义统一规范的网络层标准 libnetwork
网络架构基于一套称为容器网络模型(CNM)的接口- CNM 的理念是为应用提供跨不同网络基础架构的可移植性
- 平衡了应用的可移植性
- 使用者更关心高层的实现,不用关心底层的具体实现
CNM 架构
CNM 高层架构
- 沙箱(虚线部分):也叫沙盒(SandBox),包含了容器的网络栈配置,涉及容器的接口、路由表、DNS管理等,是通过 Linux 网络名称空间、FreeBSD Jail(操作系统层虚拟化技术)、其他类似的机制实现,一个沙箱可以包含多个来自不同网络的端点
- 端点(Endpoint):也叫接入点,用来将沙箱连接到网络,端点架构将与网络的实际连接从应用中抽象出来,有助于移植,让服务无需关心如何连接网络就可以使用不同类型的网络驱动
- 网络(Network):CNM 没有定义 OSI 七层模型中的网络层,这里的网络可以使用由 Linux 网桥、虚拟局域网等来实现
CNM 驱动接口
提供了2个可插拔且开放的接口
- 网络驱动(Network Drivers):提供网络运行的具体实现
- 本地网络驱动:docker 引擎本身实现(overlay 网络、本地网络)
- 远程网络驱动:社区或者其他供应商提供的网络驱动
- 也可以自己创建网络驱动
- IPAM 驱动:IP 地址管理,内置的 IP地址管理驱动,如果没有明确指定,它会为网络和端点提供默认的子网或IP地址,远程 IPAM 驱动可提供工具整合
docker 本地网络驱动
常用本地网络驱动类型 | 说明 |
---|---|
bridge | 桥接网络 |
host | 主机网络 |
overlay | 覆盖网络 |
none | 关闭容器的所有网络连接 |
bridge:默认网络驱动程序
host:使用主机的网络栈
overlay:本地 Linux 桥接网络和 VxLAN技术的结合
网络的作用域
docker network ls
远程网络驱动
意思就是第三方网络插件,与 CNM 兼容的
- contive
- calico
- kuryr
- …
网络驱动选择推荐
场景 | 网络驱动 |
---|---|
同一个主机多个容器需要通信 | 自定义的桥接网络 |
容器网络不与主机隔离,其他方面需要被隔离 | 主机网络 |
不同主机上的容器需要通信 | overlay |
docker 与专用网络栈集成 | 第三方网络插件 |
Linux 网络基础
Linux 网桥
网桥是一种在网段之间转发流量的链路层设备,可以是硬件设备,也可以是运行在主机内核的软件设备,Linux 网桥是 Linux内核中用于物理交换机的虚拟化实现的二层网络设备,Docker 的 bridge 是 Linux 网桥的高层实现
网络名称空间
在内核中一个被隔离的网络栈,拥有自己的网络接口、路由、防火墙规则,网络名称空间可以确保同一个主机上的2个容器不能互相通信,设置与主机本身也不能通信,除非通过 docker 网络进行连接,主机的网络的名称空间也被称为全局的网络名称