系列文章
前言
在前文中我们提到, cilium install
默认安装后, Cilium 功能启用和禁用情况如下:
datapath mode: tunnel
: 因为兼容性原因,Cilium 会默认启用 tunnel(基于 vxlan) 的 datapatch 模式,也就是 overlay 网络结构。KubeProxyReplacement: Disabled
Cilium 是没有完全替换掉 kube-proxy 的,后面我们会出文章介绍如何实现替换。IPv6 BIG TCP: Disabled
该功能要求 Linux Kernel >= 5.19, 所以在 Kernel 4.19.232 状态为禁用。BandwidthManager: Disabled
该功能要求 Linux Kernel >= 5.1, 所以目前是禁用的Host Routing: Legacy
Legacy Host Routing 还是会用到 iptables, 性能较弱;但是 BPF-based host routing 需要 Linux Kernel >= 5.10Masquerading: IPtables
IP 伪装有几种方式:基于 eBPF 的,和基于 iptables 的。默认使用基于 iptables, 推荐使用 基于 eBPF 的。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 运行网络的路由功能,而不是执行封装。
在本地路由模式下,Cilium 会将所有未寻址到其他本地端点的数据包委托给 Linux 内核的路由子系统。这意味着,数据包的路由将如同本地进程发出数据包一样。因此,连接集群节点的网络必须能够路由 PodCIDR。
配置本地路由时,Cilium 会自动在 Linux 内核中启用 IP 转发。
网络需求
- 要运行本地路由模式,连接运行 Cilium 的主机的网络必须能够转发使用给 pod 或其他工作负载的地址的 IP 流量。
- 节点上的 Linux 内核必须知道如何转发所有运行 Cilium 的节点上 pod 或其他工作负载的数据包。这可以通过两种方式实现:
- 节点本身不知道如何路由所有 pod IP,但网络上有路由器知道如何到达所有其他 pod。在这种情况下,Linux 节点被配置为包含指向此类路由器的默认路由。这种模式用于云提供商网络集成。有关详细信息,请参阅 Google Cloud、AWS ENI 和 Azure IPAM。
- 每个节点都知道所有其他节点的所有 pod IP,并在 Linux 内核路由表中插入路由来表示这一点。
- 如果所有节点共享一个 L2 网络,则可以启用选项
auto-direct-node-routes: true
来解决这个问题。本次实验我们使用这种方式启用本地路由. - 否则,必须运行额外的系统组件(如 BGP 守护进程)来分发路由。有关如何使用 kube-router 项目实现这一目标,请参阅指南《使用 Kube-Router 运行 BGP》。
- 如果所有节点共享一个 L2 网络,则可以启用选项
实战: 启用本地路由
从现在开始, 后续的 cilium 安装配置越来越复杂, 有很多定制的配置参数, 所以我们从现在开始使用 Helm Chart 方式安装 Cilium.
标签:MBytes,本地,cilium,lft,sec,ff,Cilium,路由 From: https://www.cnblogs.com/east4ming/p/17579265.html