Cilium系列-4-Cilium本地路由

2023-09-01 16:23:38 浏览数 (1)

系列文章

•Cilium 系列文章[1]

前言

在前文[2]中我们提到, cilium install 默认安装后, Cilium 功能启用和禁用情况如下:

1.datapath mode: tunnel: 因为兼容性原因,Cilium 会默认启用 tunnel(基于 vxlan) 的 datapatch 模式,也就是 overlay 网络结构。2.KubeProxyReplacement: Disabled Cilium 是没有完全替换掉 kube-proxy 的,后面我们会出文章介绍如何实现替换。3.IPv6 BIG TCP: Disabled 该功能要求 Linux Kernel >= 5.19, 所以在 Kernel 4.19.232 状态为禁用。4.BandwidthManager: Disabled 该功能要求 Linux Kernel >= 5.1, 所以目前是禁用的5.Host Routing: Legacy Legacy Host Routing 还是会用到 iptables, 性能较弱;但是 BPF-based host routing 需要 Linux Kernel >= 5.106.Masquerading: IPtables IP 伪装有几种方式:基于 eBPF 的,和基于 iptables 的。默认使用基于 iptables, 推荐使用 基于 eBPF 的。7.Hubble Relay: disabled 默认 Hubble 也是禁用的。

今天我们尝试关闭 tunnel 功能, 启用本地路由(Native-Routing)功能以提升网络性能.

测试环境

•Cilium 1.13.4•K3s v1.26.6 k3s1•OS•3台 Ubuntu 23.04 VM, Kernel 6.2, x86

VXLan 封装

在未提供任何配置的情况下,Cilium 会自动以这种模式运行,因为这种模式对底层网络基础设施的要求最低

在这种模式下,所有集群节点都会使用基于 UDP 的封装协议 VXLAN 或 Geneve 形成网状隧道。Cilium 节点之间的所有流量都经过封装.

这种模式的缺点

MTU 开销

由于增加了封装头,有效载荷可用的 MTU 要低于本地路由(VXLAN 每个网络数据包 50 字节)。这导致特定网络连接的最大吞吐率降低。

本地路由(Native-Routing)

本地路由数据路径在 tunnel: disabled 时启用,并启用本机数据包转发模式。本机数据包转发模式利用 Cilium 运行网络的路由功能,而不是执行封装。

Native-Routing

在本地路由模式下,Cilium 会将所有未寻址到其他本地端点的数据包委托给 Linux 内核的路由子系统。这意味着,数据包的路由将如同本地进程发出数据包一样。因此,连接集群节点的网络必须能够路由 PodCIDR。

配置本地路由时,Cilium 会自动在 Linux 内核中启用 IP 转发。

网络需求

•要运行本地路由模式,连接运行 Cilium 的主机的网络必须能够转发使用给 pod 或其他工作负载的地址的 IP 流量。•节点上的 Linux 内核必须知道如何转发所有运行 Cilium 的节点上 pod 或其他工作负载的数据包。这可以通过两种方式实现:•节点本身不知道如何路由所有 pod IP,但网络上有路由器知道如何到达所有其他 pod。在这种情况下,Linux 节点被配置为包含指向此类路由器的默认路由。这种模式用于云提供商网络集成。有关详细信息,请参阅 Google Cloud[3]、AWS ENI[4] 和 Azure IPAM[5]。•每个节点都知道所有其他节点的所有 pod IP,并在 Linux 内核路由表中插入路由来表示这一点。•如果所有节点共享一个 L2 网络,则可以启用选项 auto-direct-node-routes: true 来解决这个问题。本次实验我们使用这种方式启用本地路由.•否则,必须运行额外的系统组件(如 BGP 守护进程)来分发路由。有关如何使用 kube-router 项目实现这一目标,请参阅指南《使用 Kube-Router 运行 BGP》[6]。

实战: 启用本地路由

从现在开始, 后续的 cilium 安装配置越来越复杂, 有很多定制的配置参数, 所以我们从现在开始使用 Helm Chart 方式安装 Cilium.

0 人点赞