网络选项
本文介绍了 K3s 网络配置选项,包括配置或替换 Flannel,以及配置 IPv6。
注意:有关 CoreDNS、Traefik 和 Service LB 的信息,请参阅网络页面。
Flannel 选项
Flannel 是第 3 层网络结构的轻量级提供程序,它实现了 Kubernetes 容器网络接口 (CNI)。它就是通常所说的 CNI 插件。
-
Flannel 只能在 Server 节点上设置选项,并且集群中的所有 Server 上都必须相同。
-
Flannel 的默认后端是
vxlan
。要启用加密,请使用wireguard-native
后端。 -
在 Rasperry Pi 上使用
vxlan
和最新版本的 Ubuntu 需要额外的准备工作。 -
在某些 Linux 发行版上使用
wireguard-native
作为 Flannel 后端可能需要额外的模块。有关详细信息,请参阅 WireGuard 安装指南。 WireGuard 的安装步骤将确保为你的操作系统安装适当的内核模块。 在尝试使用 WireGuard Flannel 后端之前,你必须确保 WireGuard 内核模块在每个节点(包括 Server 和 Agent)上都可用。CLI 标志和值 描述 --flannel-ipv6-masq
将伪装规则应用于 IPv6 流量(默认 为 IPv4)。仅适用于双栈或仅使用 IPv6 的集群。与 none
以外的任何 Flannel 后端兼容。--flannel-external-ip
使用节点外部 IP 地址作为 Flannel 流量的目的地,而不是使用内部 IP。仅当节点上设置了 --node-external-ip
时适用。--flannel-backend=vxlan
使用 VXLAN 封装数据包。在 Raspberry Pi 上可能需要额外的内核模块。 --flannel-backend=host-gw
通过节点 IP 使用 IP 路由到 pod 子网。集群中所有节点之间都需要直接的第 2 层连接。 --flannel-backend=wireguard-native
使用 WireGuard 封装和加密网络流量。可能需要额外的内核模块。 --flannel-backend=ipsec
通过 swanctl
二进制文件使用 strongSwan IPSec 来加密网络流量。(已弃用;将在 v1.27.0 中删除)--flannel-backend=wireguard
通过 wg
二进制文件使用 WireGuard 来加密网络流量。可能需要额外的内核模块和配置。(已弃用;将在 v1.26.0 中删除)--flannel-backend=none
完全禁用 Flannel。
从 2022-12 版本(v1.26.0+k3s1, v1.25.5+k3s1, v1.24.9+k3s1, v1.23.15+k3s1)开始,K3s 不再包含 strongSwan swanctl
和 charon
二进制文件。如果你想使用 ipsec
后端,请在升级或安装这些版本之前在节点上安装正确的包。
从 wireguard
或 ipsec
迁移到 wireguard-native
旧版 wireguard
后端需要在主机上安装 wg
工具。该后端将在 K3s v1.26 中删除,取而代之的是直接与内核交互的 wireguard-native
后端。
旧版 ipsec
后端需要在主机上安装 swanctl
和 charon
二进制文件。该后端将在 K3s v1.27 中删除,以支持 wireguard-native
后端。
我们建议用户尽快迁移到新的后端。节点有了新配置后,迁移不会花费很长的停机时间。你可以遵循以下两个步骤进行操作:
- 更新所有 Server 节点上的 K3s 配置。如果使用配置文件,
/etc/rancher/k3s/config.yaml
应该包括flannel-backend: wireguard-native
而不是flannel-backend: wireguard
或flannel-backend: ipsec
。如果你在 systemd 单元中通过 CLI 标志配置 K3s,则应更改对应的标志。 - 从 Server 节点开始重新启动所有节点。
自定义 CNI
使用 --flannel-backend=none
启动 K3s 并安装你选择的 CNI。大多数 CNI 插件都有自己的网络策略引擎,因此建议同时设置 --disable-network-policy
以避免冲突。需要考虑的重要信息:
- Canal
- Calico
- Cilium
访问 Canal Docs 网站。按照步骤安装 Canal。修改 Canal YAML 以便在 container_settings
中允许 IP 转发,例如:
"container_settings": {
"allow_ip_forwarding": true
}