1. 涉及到的虚拟网络设备
- bridge:网桥,可以理解为交换机。不同于传统的二层硬件交换机,bridge 可以配置 IP、具有三层能力,可作为端点 、网关。
- veth:虚拟以太网设备,总是成对创建(故也称为 veth pair),可以理解为虚拟的网线。是以太网设备形式的数据管道,从一端发送的数据会立刻出现在另一端,支持跨 namespace 。作为表面上的虚拟网卡,自然可以配置 IP,不过本质上还是网线的角色,不具备三层能力。
在容器网络场景下,二者是完美的搭档,通常结合起来使用:
- 宿主机 namespace 创建网桥,分配私网 IP 地址作为网关,支撑所有容器的对外网络访问;
- 每个容器都分别创建一对 veth pair,一端连接在宿主网桥,另一端作为容器 namespace 内的默认以太网设备。
2. K8s CNI 网络标准:
实现整个 K8s 集群中所有 Pod 的通信。分两个层级:
- 同一 Node 的多个 Pod 之间的通信:依靠宿主机的 bridge & veth pair 实现二层转发
- 不同 Node 间的 Pod 通信:使用宿主机的三层能力进行主机间通信
CNI 插件:实现 CNI 标准的软件,主要的任务就是创建各种虚拟网络设备并配置路由。接入 CRI runtime 并被其调用,所以是“插件”。
3. Flannel
最知名的 CNI 插件之一,设计思想简明直接。其网络模型为所有容器使用同一个 network,每个 node 分配一个子网。
