一、通信网络
1.1 Overlay 网络
Overlay 网络是在底层网络之上构建的一种网络架构。它是一种虚拟网络,通过在底层网络上部署节点、建立连接等方式,形成一个新的逻辑网络。Overlay 网络可以通过建立虚拟节点之间的隧道、加密、压缩等方式来提高数据传输的安全性和性能。Overlay 网络常用于实现分布式系统、P2P 网络、VPN 等。
在 k8s 的 Overlay 网络中,每个容器都具有自己的 IP 地址,并且可以在不同的节点上运行。Overlay 网络通过在每个节点上创建虚拟网络,将不同节点上的容器连接起来,从而实现容器之间的通信。
k8s 支持多种 Overlay 网络实现,如 Flannel、Calico 等。其中,Flannel 是最常用的一种实现方式,它通过创建虚拟网络并分配每个节点一个唯一的子网地址范围来实现 Overlay 网络。Calico 则使用了更高级的路由技术,并将安全策略与网络层集成在一起,从而提供更好的安全性和可扩展性。
优点:
- 易于部署和管理;
- 不受底层网络结构限制;
- 适应各种应用场景。
缺点:
- 需要额外的控制开销;
- 可能会引入一定的网络延迟。
1.2 Underlay 网络
Underlay 网络是指底层网络架构,它是一个物理网络,由路由器、交换机、光纤等组成。Underlay 网络提供基础的网络连接和路由功能,所有的数据传输都要经过 Underlay 网络。
容器网络中的 Underlay 网络是指借助驱动程序将宿主机的底层网络接口直接暴露给容器使用的一种网络构建技术,较为常见的解决方案有 MAC VLAN、 IP VLAN 和直接路由等。
优点:
- 较高的传输性能和可靠性。
缺点:
- 网络结构复杂;
- 部署成本高。
1.3 k8s 网络通信模式
- Overlay
- Flannel Vxlan、 Calico BGP、 Calico Vxlan
- 将 pod 地址信息封装在宿主机地址信息以内,实现跨主机且可跨 node 子网的通信报文。
- 直接路由
- Flannel Host-gw、 Flannel VXLAN Directrouting、 Calico Directrouting
- 基于主机路由实现报文从源主机到目的主机的直接转发,不需要进行报文的叠加封装,性能比 overlay 更好。
- Underlay
- 需要为 pod 启用单独的虚拟机网络,直接使用宿主机物理网络,pod 甚至可以在 k8s 环境之外的节点直接访问(与 node节点的网络被打通), 相当于把 pod 当桥接模式的虚拟机使用,比较方便 k8s 环境以外的服务访问 k8s 环境中的 pod 中的服务, 而且由于主机使用的宿主机网络,其性能最好。
二、kubernetes 网络组件
2.1 Flannel
Flannel 是一个用于容器网络的开源组件,它可以为容器提供可扩展、可靠的二层网络。
Flannel 的基本原理:借助于 etcd 维护网络 IP 地址分配,为每一个 node 服务器分配一个不同的 IP 地址段,将每个节点上的容器 IP 地址空间映射到整个集群的 IP 地址空间中,容器之间通过网络隧道进行通信,从而实现跨主机的容器网络互联。
Flannel 组件:
- Cni0
- 网桥设备,每创建一个pod都会创建一对 veth pair,其中一端是 pod 中的 eth0,另一端是 Cni0 网桥中的端口(网卡),Pod 中从网卡 eth0 发出的流量都会发送到 Cni0 网桥设备的端口(网卡)上,Cni0 设备获得的 ip 地址是该节点分配到的网段的第一个地址。
- Flannel.1
- overlay 网络的设备,用来进行 vxlan 报文的处理(封包和解包),不同 node 之间的 pod 数据流量都从 overlay 设备以隧道的形式发送到对端。
优点:
- Flannel 非常适合部署在大规模的容器集群中,因为它具有高可用性、高扩展性和高性能等优点。同时,Flannel 还支持多种后端网络驱动程序,可以与不同的网络架构和云平台集成。
缺点:
- Flannel 的网络隧道可能会导致一些性能问题,例如延迟和丢包。此外,Flannel 需要与底层网络架构进行协调,可能需要进行一些额外的配置和调优工作。
2.2 Calico
Calico 是一个用于容器、虚拟机和主机的纯三层的开源网络组件。它使用 BGP 协议实现了高性能的容器网络,并且支持网络安全策略。
- IPIP 模式
IPIP(IP-in-IP)模式是一种隧道协议,可以将一个 IP 数据包封装在另一个 IP 数据包中,从而实现网络隔离和容器间的通信。
在 Calico 中,IPIP 模式是一种 overlay 网络,它通过在容器之间创建虚拟网络接口,将容器的数据流量封装在一个 IP 包中,并在其他节点上解封装这个包,将数据包送到目标容器。
IPIP 模式在容器之间封装和解封装 IP 数据包,这可能会导致网络性能的下降。需要确保容器和主机节点的 MTU 设置是一致的,以避免 MTU 过大的问题。
- BGP 模式
BGP(Border Gateway Protocol)是一种路由协议,可以在不同的网络之间进行路由选择和通信。
在 Calico中,BGP 模式通过在每个节点上运行 BGP 代理来实现容器间的通信。BGP 代理会在节点之间共享路由信息,以便容器可以通过最短路径进行通信。
BGP 模式使用了 Calico 的路由发现机制,通过在每个节点上运行 BGP 代理,实现路由信息的共享和容器之间的通信。