Cilium 集成¶
Cilium 是一款基于 eBPF 的网络和安全组件,Kube-OVN 利用其中的 CNI Chaining 模式来对已有功能进行增强。 用户可以同时使用 Kube-OVN 丰富的网络抽象能力和 eBPF 带来的监控和安全能力。
通过集成 Cilium,Kube-OVN 用户可以获得如下增益:
- 更丰富高效的安全策略。
- 基于 Hubble 的监控视图。

前提条件¶
- Linux 内核版本高于 4.19 或其他兼容内核以获得完整 eBPF 能力支持。
- 提前部署 Helm 为安装 Cilium 做准备,部署 Helm 请参考 Installing Helm。
配置 Kube-OVN¶
为了充分使用 Cilium 的安全能力,需要关闭 Kube-OVN 内的 networkpolicy 功能,并调整 CNI 配置优先级。
在 install.sh 脚本里修改下列变量:
ENABLE_NP=false
CNI_CONFIG_PRIORITY=10
若已部署完成,可通过修改 kube-ovn-controller 的启动参数进行调整 networkpolicy:
args:
- --enable-np=false
修改 kube-ovn-cni 启动参数调整 CNI 配置优先级:
args:
- --cni-conf-name=10-kube-ovn.conflist
在每个节点调整 Kube-OVN 配置文件名称,以便优先使用 Cilium 进行操作:
mv /etc/cni/net.d/01-kube-ovn.conflist /etc/cni/net.d/10-kube-ovn.conflist
部署 Cilium¶
创建 chaining.yaml 配置文件,使用 Cilium 的 generic-veth 模式:
apiVersion: v1
kind: ConfigMap
metadata:
name: cni-configuration
namespace: kube-system
data:
cni-config: |-
{
"name": "generic-veth",
"cniVersion": "0.3.1",
"plugins": [
{
"type": "kube-ovn",
"server_socket": "/run/openvswitch/kube-ovn-daemon.sock",
"ipam": {
"type": "kube-ovn",
"server_socket": "/run/openvswitch/kube-ovn-daemon.sock"
}
},
{
"type": "portmap",
"snat": true,
"capabilities": {"portMappings": true}
},
{
"type": "cilium-cni"
}
]
}
安装配置文件:
kubectl apply -f chaining.yaml
使用 Helm 部署 Cilium:
helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium --version 1.11.6 \
--namespace kube-system \
--set cni.chainingMode=generic-veth \
--set cni.customConf=true \
--set cni.configMap=cni-configuration \
--set tunnel=disabled \
--set enableIPv4Masquerade=false \
--set devices="eth+ ovn0 genev_sys_6081 vxlan_sys_4789" \
--set enableIdentityMark=false
确认 Cilium 安装成功:
# cilium status
/¯¯\
/¯¯\__/¯¯\ Cilium: OK
\__/¯¯\__/ Operator: OK
/¯¯\__/¯¯\ Hubble: disabled
\__/¯¯\__/ ClusterMesh: disabled
\__/
DaemonSet cilium Desired: 2, Ready: 2/2, Available: 2/2
Deployment cilium-operator Desired: 2, Ready: 2/2, Available: 2/2
Containers: cilium Running: 2
cilium-operator Running: 2
Cluster Pods: 8/11 managed by Cilium
Image versions cilium quay.io/cilium/cilium:v1.11.6: 2
cilium-operator quay.io/cilium/operator-generic:v1.11.6: 2
在 Cilium 环境下使用 Kube-OVN NAT 网关¶
Cilium 会对其管理的网络接口(包括 NAT 网关 Pod 的默认网卡)的出向流量进行安全校验。 由于 NAT 网关负责对 VPC 内 Pod 的流量执行 SNAT/DNAT 转发,其发出的大多数报文源 IP 并非 Pod 自身的 IP。
Cilium 通过 SIP(Source IP)源地址校验机制来阻止这类行为——若报文源地址与 Pod IP 不匹配,流量将被丢弃(在 Hubble 中可见 DROPPED)。
该机制有助于防止集群内 IP 欺骗,但会导致 NAT 网关功能失效。
按命名空间/Pod 粒度控制(推荐,Cilium ≥ 1.20)¶
Cilium 1.20 起(cilium/cilium#43505), 支持通过双层 annotation 在 Pod 粒度关闭 SIP 校验:
-
集群管理员在命名空间上添加授权 annotation:
kubectl annotate namespace <nat-gateway-namespace> \ config.cilium.io/delegate-source-ip-verification=true -
NAT 网关 Pod 声明关闭 SIP 校验的 annotation:
apiVersion: v1 kind: Pod metadata: annotations: config.cilium.io/disable-source-ip-verification: "true"
这种方式仅对特定 NAT 网关 Pod 生效,可避免集群层面的安全降级,推荐优先采用。
全局关闭(Cilium < 1.20)¶
对于旧版本 Cilium,可在 Helm Chart 中通过设置 enableSourceIPVerification 为 false 全局关闭 SIP 校验:
enableSourceIPVerification: false