一、网络信息存储与基础网络能力
1.1 网络信息存储方案
Calico 支持两种网络信息存储方式:
-
etcd 独立存储:可在集群外部搭建独立 etcd 集群,存储 Calico 的网络配置信息(如 Pod 网络规划、ACL 规则等),灵活性更高
-
Kubernetes API 存储(CRD):通过 Kubernetes 的 Custom Resource Definition(自定义资源)方式存储网络信息,默认采用该方案以保证集群统一性,Calico 同时兼容两种存储方式
1.2 数据传输加密
跨节点通信过程中需对传输数据加密,避免数据在节点间传输时被劫持泄露,是企业级网络方案的必备能力,不支持加密的网络插件无法满足企业级使用要求。
1.3 Ingress 路由策略
Ingress 用于实现 Kubernetes 集群内服务的路由控制,支持集群内部服务与外部通讯的路由管理,在大规模集群场景下价值显著。
二、Calico 网络方案概述
Calico 是目前 Kubernetes 生态中最主流的网络解决方案,落地性极高,属于纯三层网络虚拟网络方案,不依赖 Docker 的 docker0 网桥,自主实现网络逻辑,支持覆盖网络(VXLAN、IPIP)和非覆盖网络(BGP)三种工作模式。
三、Calico 核心架构组件
Calico 的核心运行组件包括三个:
-
Felix:核心网络落地组件,负责管理网络接口、编写路由规则、编写 ACL(访问控制列表)、上报网络状态信息
-
BIRD:负责节点间 BGP 协议的消息收发与路由同步,实现跨节点路由信息的互通
-
confd:负责与 etcd 存储交互,若采用 Kubernetes API 存储方案,则通过 API Server 间接访问 etcd,若采用独立 etcd 存储则直接连接 etcd
四、Calico 三种工作模式详解
4.1 VXLAN 模式(覆盖网络)
4.1.1 核心原理
VXLAN 是 Linux 内核原生支持的网络虚拟化技术,数据报文的封装与解封装完全在内核态完成,无需在用户空间拷贝数据,效率更高;通过隧道机制构建覆盖网络,实现「基于三层的二层通讯」:VXLAN 报文封装在 UDP 数据包中,要求 K8s 节点之间三层可达,VXLAN 设备的 MAC 地址与对端 VXLAN 设备的 MAC 地址直接通信,基于 MAC 寻址实现二层通讯,三层仅作为跨节点传输的手段。
4.1.2 数据包封装逻辑
原始应用报文外层依次封装 VXLAN 头、UDP 头、IP 头、以太网头,封装内容为两端 VXLAN 设备的 MAC 信息,通过 UDP 跨节点传输,依赖 FDB(MAC 地址与 IP 对应关系表,即转发数据库)实现目标寻址。
4.1.3 特性与优缺点
-
优点:仅需 K8s 节点三层互通即可实现扁平化网络,可跨网段、跨广播域,对主机网关路由无特殊要求
-
缺点:需要进行 VXLAN 数据包的封包与解包,存在一定性能损耗
4.1.4 配置与验证方法
-
开启配置:修改 Calico 部署配置文件,关闭 IPIP 模式(设置为
never),将 IPv4/V6 的 VXLAN 模式设置为always;修改 CNI 配置将默认 bridge 网桥改为 vxlan;关闭网桥的存活探测与就绪探测(因不再基于网桥实现) -
验证方法:通过
ifconfig查看网卡,出现 vxlan 相关的 Calico 网卡即可确认开启;查看 BGP 信息为空(因 VXLAN 模式无需通过 BGP 同步路由,依赖 VXLAN MAC 表通信)
4.2 IPIP 模式(覆盖网络)
4.2.1 核心原理
IPIP 是 Linux 内核原生支持的隧道模式,将原始主机的 IP 数据报文封装在新的 IP 数据报文中,外层 IP 的目的地址为隧道另一端节点的物理 IP,支持 IPv4 与 IPv6 网络互通。
4.2.2 工作流程
Pod 发出的报文首先发送到 IPIP 隧道网卡(tunl0),由隧道网卡完成 IP 封装后发送到对端节点,对端节点解封后剥离外层 IP 头,根据本地路由表将报文转发到目标 Pod。
4.2.3 特性与优缺点
-
优点:仅需 K8s 节点三层互通即可跨网段通信,对主机网关路由无特殊要求,灵活性高,支持 IPv4/IPv6 跨版本互通
-
缺点:需要进行 IPIP 数据报文的封包与解包,存在性能损耗
4.2.4 配置与验证方法
-
开启配置:修改 Calico 部署配置文件,开启 IPIP 模式(设置为
always),永久关闭 VXLAN 的 IPv4/V6 模式 -
验证方法:通过
ifconfig查看网卡,出现 tunl0 网卡即可确认开启;查看 BGP 邻居信息,存在 BGP 同步记录(因需要同步对端物理 IP 与私有 IP 的映射关系)
4.3 BGP 模式(非覆盖网络)
4.3.1 核心原理
BGP(Border Gateway Protocol,边界网关协议)是互联网核心的去中心化自治路由协议,属于矢量路由协议,会根据路径长度选择最短路径转发数据,无需对数据包做二次封装。该模式下每个 K8s 节点被视作独立的路由器,通过路由记录实现跨节点通信,Pod 的路由信息通过 BGP 协议在节点间同步。
4.3.2 工作流程
Pod 发送数据时,根据本地路由表将报文转发到对应网卡,数据包直接通过路由跳转到达目标节点,无需封装,对端节点同样根据路由表将报文转发到目标 Pod。
4.3.3 特性与优缺点
-
优点:无需进行封包解包操作,性能最优
-
缺点:跨网段时网络配置复杂,对运维人员能力要求高,需要主机网关路由均开启 BGP 协议并打通才能实现跨网段通信
4.3.4 配置与验证方法
-
开启配置:修改 Calico 部署配置文件,关闭 IPIP 模式,同时关闭 VXLAN 的 IPv4/V6 模式,即选择 BGP 方案
-
验证方法:通过
ifconfig查看网卡,不存在 tunl0、vxlan 相关的 Calico 网卡;通过 BGP 命令查看路由同步信息,确认 BGP 邻居正常同步
五、三种工作模式选型建议
-
若对性能要求不高、网络环境复杂:可选择 VXLAN 或 IPIP 模式,无需额外配置底层路由,开箱即用
-
若对性能要求高、且网络环境可控可配置 BGP 路由:优先选择 BGP 模式,性能最优
AI 总结
本视频为 Kubernetes 网络模块的核心内容,重点讲解了 Calico 网络插件的三种工作模式(VXLAN、IPIP、BGP)的实现原理、架构组件、配置方法、验证方式及选型建议,同时补充了 Calico 的网络信息存储方案、企业级网络加密要求、Ingress 路由能力等前置知识点,内容贴合生产落地场景,可帮助学习者掌握 K8s 网络的核心实现逻辑,根据实际环境需求选择合适的网络方案。