首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【K8s】Kubernetes 网络之 Calico 插件理论

下内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~

基本介绍

Calico 是一个开源的网络及网络安全解决方案,主要用于容器、虚拟机、基于本地主机的工作负载之间的网络连接。

Calico 以其性能、灵活性而闻名,是一个功能全面且复杂的网络解决方案,适用于需要高性能、高可扩展性和安全性的容器网络应用场景,支持的平台包括 Kubernetes、OpenShift、Mirantis Kubernetes Engine (MKE)、OpenStack 以及裸机服务。

Calico 的主要特点如下:

支持多种数据层,包括 Linux eBPF、Linux 标准网络和 Windows HNS

具有丰富的网络策略模型可以轻松锁定需要的通信流量,还内置支持 Wireguard 加密,为 Pod 之间的流量提供保护

可以使用 Linux eBPF 或 Linux 标准网络来提供高性能网络。Calico 可以在大多数环境中运行而无需使用覆盖网络,从而避免了数据包封装/解封的开销,其控制平面和策略引擎可以最大限度地降低整体 CPU 使用率

具备良好的可扩展性

支持 Kubernetes 工作负载与非 Kubernetes 或传统工作负载无缝、安全地通信,所有工作负载都受相同的网络策略模型的约束

支持完整的 Kubernetes 网络策略,与 Kubernetes API 无缝协作,使用户能够更灵活地定义网络策略

Calico 的核心组件如下:

Felix:运行在每个节点的代理程序,主要负责网络接口监听、路由信息管理、ARP 信息管理、ACL 规则管理、上报节点网络状态、创建 Calico 虚拟网络设备(如 tunl0、vxlan.calico)

ETCD:存储集群中节点的所有路由信息,确保网络元数据的一致性、Calico 网络状态的准确性,可以与 Kubernetes 共用

BIRD:BGP 客户端,作用是监听并将 Felix 的路由信息读入内核,并通过 BGP 协议在集群节点中广播分发,实现网络互通。BIRD 支持的路由协议包括 BGP、OSPF、RIP 等

BGP Route Reflector:使所有 BGP 客户端仅与特定的 Route Reflector(路由反射)节点互联,并进行路由同步以减少连接数,可以解决大型网络下的节点规模问题

Calicoctl:Calico 的命令行管理工具

GitHub 地址:https://github.com/projectcalico/calicoCalico 官方文档:https://docs.tigera.io/archive/v3.21/about/about-calico

网络模式

1、动态路由模式

动态路由模式(Dynamic Routing)采用 BGP 路由协议,自动学习来自其它 AS 自治系统(在 Kubernetes 中即为集群中其他 Node 节点)上的路由条目,也可以称为 BGP 模式。

如果集群 Node 节点均处于同一个二层网络中、或数量规模较大,建议采用该模式。

BGP(Border Gateway Protocol, 边界网关协议)是一种基于策略的域间路由协议,用于实现网络中不同自治系统(AS)之间的互联互通,其特点是可以自动发现和学习路由条目,并找出最佳路由。

BGP 模式可以细分为以下两种模式:

全互联(Node-to-Node Mesh)模式

每一个 BGP Speaker 都需要和其它 BGP Speaker 建立 BGP 连接,BGP 连接总数为 N^2。如果集群规模过大、Node 节点数量过多会消耗大量连接,因此集群 Node 节点数量超过 100 台后,官方不建议使用该模式

路由反射(Router Reflection,RR)模式

指定一个或多个 BGP Speaker 为 Router Reflection,与网络中其他 BGP Speaker 建立连接,每个 BGP Speaker 只需与 Router Reflection 建立 BGP 连接即可获取全网的路由信息。在 Calico 中可以通过 Global Peer 实现该模式

2、覆盖网络模式

覆盖网络模式(Overlay Network)采用 IPIP 或 VXLAN 协议对底层网络数据报文进行封装,然后通过上层覆盖网络通信。

如果集群 Node 节点处于不同的二层网络中,可能由于到达目标主机的跳数太多导致性能下降,建议采用该模式。

覆盖网络模式可以细分为以下两种模式:

IPIP(IP in IP)模式

IPIP 模式下的每个数据报文都有两个 IP 网络层,内层是 Pod 容器之间的 IP 网络报文,外层是 Node 节点之间的网络报文

IPIP 模式下的 Calico 会为每个 Node 节点创建一个 tunl0 接口,作为隧道出入口设备,用来封装 IPIP 数据报文,Pod 间的通信经由 IPIP 的三层隧道进行转发

VXLAN(Virtual eXtensible Local Area Network)模式

VXLAN 模式的 Calico 会将数据报文的源 MAC 地址和目的 MAC 地址,分别替换为本机 VXLAN 网卡和目的节点 VXLAN 网卡的 MAC 地址,外层 UDP 网络报文的目的 IP 地址将根据路由及目的节点 VXLAN 的 MAC 查 FDB 表获取

VXLAN 模式的 Calico 会为每个 Node 节点创建一个 vxlan.calico 接口,作为隧道出入口设备,用来封装 VXLAN 数据报文,Pod 间的通信经由 VXLAN 的三层隧道进行转发

IPIP 模式与 VXLAN 模式对比:

与 VXLAN 模式相比,IPIP 模式开销较小、更轻量化,但其安全性也更差一些

IPIP 模式与VXLAN 模式均支持 Always 和 CrossSubnet 两种封装模式

Always:始终封装所有流量

CrossSubnet:仅在流量跨子网时对其进行封装

最后,以 Calico 的 VXLAN 模式为例,Pod 流量在 Node 节点间的转发原理大致如下图所示:

书籍推荐

最后推荐一本笔者从 Docker 进阶到 Kubernetes 自学过程中,受益较深的书籍。笔者经常复读,并结合工作实践不断加深理解和体会,可谓常读常新。希望这本书可以帮助到更多对 Kubernetes 感兴趣或刚开始学习的读者。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OZ6NQiRmJHU0Mz7nn1PA6zkA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券