网络选项
Kubernetes 需要安装一个或多个 CNI 插件以提供 Pod 网络。RKE2 打包了四个主要的 CNI 插件:Canal、Cilium、Calico 和 Flannel。只有 Calico 和 Flannel 支持 Microsoft Windows。RKE2 还包括 Multus 作为辅助 CNI 插件,必须与主要 CNI 插件一起启用。有关更多信息,请参见 Multus 和 SR-IOV 文档。
Canal 是默认的 CNI 插件,但所有打包的插件都受到支持。 打包的 CNI 插件通过 Helm 图表安装,并可以通过部署带有附加图表值的 HelmChartConfig 进行自定义。有关使用 HelmChartConfig 资源的更多信息,请参见 Helm 集成 文档,以及下面提供的 CNI 特定示例。
选择一个 CNI 插件
使用 cni 配置文件键 选择您希望使用的 CNI 插件。如果您不想使用任何打包的 CNI 插件,可以将 cni 设置为 none。请注意,节点将保持 NotReady 状态,并被标记为不可调度,直到安装 CNI 插件。
# /etc/rancher/rke2/config.yaml
cni: canal
打包的 CNI 插件作为 AddOns 提供,部署一个 HelmChart 资源,如 Helm 集成 文档中所述。CNI 插件图表命名为 rke2-<CNI-PLUGIN-NAME>,可以在 kube-system 命名空间中找到。
要自定义打包 CNI 插件图表的 Helm 图表值,您必须创建一个与其对应的 HelmChart 名称和命名空间匹配的 HelmChartConfig 资源。请参见下面的选项卡,了解如何自定义每个打包 CNI 插件的图表值的示例。
默认图表值可以通过浏览 RKE2 charts 储存库 找到,并参考 values.yaml 以获取与您的 RKE2 版本捆绑的图表版本。
-
CNI插件
-
Cilium CNI插件
-
Calico CNI 插件
-
Flannel CNI 插件
Canal 使用 Flannel 进行节点间流量传输,使用 Calico 进行节点内流量和网络策略。默认情况下,它将使用 vxlan 封装在节点之间创建覆盖网络。例如,要覆盖 flannel 接口,您可以应用以下图表值:
# /var/lib/rancher/rke2/server/manifests/rke2-canal-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-canal
namespace: kube-system
spec:
valuesContent: |-
flannel:
iface: "eth1"
要使用 flannel 的 wireguard 后端( 内核版本 < 5.6 的用户需要安装一个模块),必须使用以下图表值:
# /var/lib/rancher/rke2/server/manifests/rke2-canal-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-canal
namespace: kube-system
spec:
valuesContent: |-
flannel:
backend: "wireguard"
之后,请通过执行 kubectl rollout restart ds rke2-canal -n kube-system 重启 canal 守护程序集以使用更新的配置。
有关 Canal 配置的完整选项的更多信息,请参考 rke2-charts。
eBPF dataplane
|
版本门控
自 2026 年 1 月的版本发布以来,RKE2 支持 Calico eBPF 数据平面:v1.33.8+rke2r1,v1.34.4+rke2r1 和 v1.35.1+rke2r1。 |
Calico提供了一种高效的eBPF数据平面,可以替代默认的基于iptables的实现。Calico的数据平面也可以用来替代默认的Kubernetes kube-proxy实现。
要启用Calico的eBPF数据平面,请在配置文件中使用`disable-kube-proxy: true`部署RKE2,并使用以下HelmChartConfig:
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-calico
namespace: kube-system
spec:
valuesContent: |-
installation:
calicoNetwork:
kubeProxyManagement: Enabled
linuxDataplane: BPF
kubernetesServiceEndpoint:
host: "<control_node_ip>"
port: "6443"
|
If you want to use Calico’s eBPF dataplane with an HA control plane, refer to the load balancer page. |
有关Calico的eBPF数据平面的更多信息,请参考 Calico的文档。
|
Canal要求在节点上安装iptables或xtables-nft软件包。 |
|
Canal目前不支持具有Windows节点的集群。 |
如果您遇到IP分配问题,请检查已知问题和限制。
使用Cilium时,您必须确保节点具有受支持的内核版本(>= 4.9.17),并且满足 要求。要覆盖默认选项,请使用HelmChartConfig资源。HelmChartConfig资源必须与其对应的HelmChart的名称和命名空间匹配。例如,要启用wireguard:
# /var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-cilium
namespace: kube-system
spec:
valuesContent: |-
encryption:
enabled: true
type: wireguard
有关 Cilium 图表中可用值的更多信息,请参阅 rke2-charts 储存库。
Kube-proxy 替代品
Cilium 包含先进的功能,可以完全替代 kube-proxy,并使用 eBPF 实现服务路由,而不是 iptables。如果您的内核版本低于 v5.8,不建议使用 Cilium 替代 kube-proxy,因为将缺少重要的错误修复和功能。要激活此模式,请在配置文件中部署 RKE2 disable-kube-proxy: true,并使用以下图表值:
# /var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-cilium
namespace: kube-system
spec:
valuesContent: |-
kubeProxyReplacement: true
k8sServiceHost: "localhost"
k8sServicePort: "6443"
有关更多信息,请查看 上游文档。
Cilium Hubble
Cilium 还包括一个名为 Hubble 的可观测性平台。要启用 Hubble,请使用以下图表值:
# /var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-cilium
namespace: kube-system
spec:
valuesContent: |-
hubble:
enabled: true
relay:
enabled: true
ui:
enabled: true
|
Cilium 目前不支持 Windows。 |
例如,要更改接口 MTU,您可以使用以下图表值:
# /var/lib/rancher/rke2/server/manifests/rke2-calico-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-calico
namespace: kube-system
spec:
valuesContent: |-
installation:
calicoNetwork:
mtu: 9000
由于 5.7 之前版本的内核存在错误,Calico 禁用了硬件校验和卸载。该配置将 TCP 性能限制为 ~2.5Gbps。如果您需要更高的吞吐量并且内核版本大于 5.7,可以使用以下 HelmChartConfig 启用校验和卸载:
# /var/lib/rancher/rke2/server/manifests/rke2-calico-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-calico
namespace: kube-system
spec:
valuesContent: |-
felixConfiguration:
featureDetectOverride: "ChecksumOffloadBroken=false"
有关 Calico 图表中可用值的更多信息,请参阅 rke2-charts 储存库。
|
Calico 需要在节点上安装 iptables 或 xtables-nft 软件包。 |
|
如果您在启用 SELinux 的情况下安装 Calico,请阅读此 部分。 |
|
Flannel 从 2024 年 2 月的版本开始可用:v1.29.2、v1.28.7、v1.27.11、v1.26.14。仅支持 |
例如,要更改接口 MTU,您可以使用以下图表值:
# /var/lib/rancher/rke2/server/manifests/rke2-flannel-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-flannel
namespace: kube-system
spec:
valuesContent: |-
flannel:
mtu: 9000
|
Flannel 不支持网络策略。因此,不建议用于强化安装。 |
双栈配置
IPv4/IPv6 双栈网络使得可以为 Pods 和 Services 分配 IPv4 和 IPv6 地址。要在双栈模式下配置 RKE2,在控制平面节点中,必须为 Pods 和 Services 设置有效的 IPv4/IPv6 双栈 CIDR。为此,请使用 cluster-cidr 和 service-cidr 配置文件键:
#/etc/rancher/rke2/config.yaml
cluster-cidr: "10.42.0.0/16,2001:cafe:42::/56"
service-cidr: "10.43.0.0/16,2001:cafe:43::/112"
双栈网络必须在集群首次创建时进行配置。一旦集群以仅 IPv4 方式启动,就无法在现有集群上启用双栈。
每个 CNI 插件可能需要不同的双栈配置:
-
Canal CNI 插件
-
Cilium CNI插件
-
Calico CNI 插件
-
Flannel CNI 插件
Canal 自动检测 RKE2 的双栈配置,无需额外配置。在 RKE2 的 Windows 安装中,目前不支持双栈。
Cilium 自动检测 RKE2 的双栈配置,无需额外配置。
Calico 自动检测 RKE2 的双栈配置,无需额外配置。在双栈模式下部署时,它会创建两个不同的 ippool 资源。请注意,在使用双栈时,Calico 利用 BGP 而不是 VXLAN 封装。在 RKE2 的 Windows 安装中,目前不支持双栈和 BGP。
Flannel 自动检测 RKE2 的双栈配置,无需额外配置。
IPv6 设置
在仅 IPv6 配置的情况下,RKE2 需要使用 localhost 访问 ETCD pod 的活跃性 URL;请检查您的操作系统是否正确配置了 /etc/hosts 文件:
::1 localhost
|
已知问题
如果您的 IPv6 默认路由是通过路由器广告 (RA) 设置的,您需要设置 sysctl |
- 在仅支持 IPv6 的模式下,Cilium 不支持在节点之间封装 IPv6 流量。不同节点上的 Pod 之间的通信依赖于主机的网络,以正确路由数据包到 Pod IP。Cilium 可以配置为自动管理节点之间的静态路由,配置如下:
# /var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yaml
---
kind: HelmChartConfig
metadata:
name: rke2-cilium
namespace: kube-system
spec:
valuesContent: |-
autoDirectNodeRoutes: true
没有主机名的节点
Some cloud providers, such as Linode, will create machines with "localhost" as the hostname and others may not have a hostname set at all. This can cause problems with domain name resolution. You can run RKE2 with the node-name parameter and this will pass the node name to resolve this issue.
nftables support
|
Experimental
Support for |
|
Version Gate
Support for |
Linux 3.13 introduced nftables as a modern replacement for iptables. Key features of nftables include:
-
Consolidates all rule management into a single interface.
-
Supports atomic batch updates (all rule changes commit together or not at all).
-
Offers improved performance for complex rule sets due to better kernel integration and support for set-based matching.
Using nftables is now supported by kube-proxy and all CNI plugins currently bundled with rke2.
To use nftables with kube-proxy, set the following parameter in config.yaml:
kube-proxy-arg:
- proxy-mode=nftables
Each CNI needs to be configured through its HelmChartConfig.
-
Canal CNI Plugin
-
Cilium CNI Plugin
-
Calico CNI Plugin
-
Flannel CNI Plugin
For Canal, set the following HelmChartConfig:
# /var/lib/rancher/rke2/server/manifests/rke2-canal-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-canal
namespace: kube-system
spec:
valuesContent: |-
flannel:
enableNFTables: true
calico:
felixIptablesBackend: nft
There is nothing to configure. Cilium uses eBPF as its filtering mechanism instead of iptables or nftables.
For Calico, set the following HelmChartConfig:
# /var/lib/rancher/rke2/server/manifests/rke2-calico-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-calico
namespace: kube-system
spec:
valuesContent: |-
installation:
calicoNetwork:
linuxDataplane: Nftables
For Flannel, set the following HelmChartConfig:
# /var/lib/rancher/rke2/server/manifests/rke2-flannel-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-flannel
namespace: kube-system
spec:
valuesContent: |-
flannel:
enableNFTables: true