3. Cilium 安装与部署:Helm 安装、kube-proxy 替换模式、CNI 配置检查
本章聚焦 Cilium 在生产环境中的标准部署流程。我们将使用 Helm 作为包管理工具,完成 Cilium 的安装与核心参数配置,重点讲解 kube-proxy 替换模式 的启用原理,并给出部署后的 CNI 配置验证方法。正确的安装与参数调优是后续蓝绿发布流量治理的基础。
3.1 环境准备与 Helm 仓库配置
在安装 Cilium 之前,请确保 Kubernetes 集群版本 ≥ 1.23,且节点内核支持 eBPF(推荐 Linux 5.10+)。使用 Helm 3 进行安装,首先添加 Cilium 官方 Helm 仓库:
helm repo add cilium https://helm.cilium.io/
helm repo update
版本锁定建议: 生产环境请固定 Chart 版本,避免自动升级导致行为变更。例如:
helm install cilium cilium/cilium --version 1.15.0。
3.2 Helm 安装核心参数与 kube-proxy 替换模式
Cilium 最关键的部署决策是是否启用 kube-proxy 替换模式。启用后,Cilium 将完全接管集群的 Service 负载均衡、ClusterIP 转发、NodePort 和 ExternalTrafficPolicy 等逻辑,不再依赖 kube-proxy 组件。这能显著降低 iptables 规则数量,提升网络性能。
下表列出了安装时必须关注的核心 Helm 参数及其作用:
| 参数 | 默认值 | 说明 |
|---|---|---|
kubeProxyReplacement |
disabled |
是否启用 kube-proxy 替换。推荐 strict 或 probe 模式 |
k8sServiceHost |
— | Kubernetes API Server 地址(替换模式下必须指定) |
k8sServicePort |
6443 |
API Server 端口 |
cni.exclusive |
true |
是否独占 CNI 配置,避免与其他 CNI 冲突 |
ipam.mode |
cluster-pool |
IP 分配模式,推荐 kubernetes 或 cluster-pool |
rollOutCiliumPods |
false |
升级时是否滚动重启 Cilium 代理,建议开启 |
以下是一个启用 strict kube-proxy 替换 的安装命令示例:
helm install cilium cilium/cilium \
--namespace kube-system \
--set kubeProxyReplacement=strict \
--set k8sServiceHost=192.168.1.100 \
--set k8sServicePort=6443 \
--set cni.exclusive=true \
--set ipam.mode=kubernetes \
--set rollOutCiliumPods=true
严格模式前提: 启用
kubeProxyReplacement=strict 前,必须确保集群中已移除 kube-proxy 组件(或将其 DaemonSet 缩容至 0),否则会出现网络规则冲突。
3.3 kube-proxy 替换模式架构示意
下图展示了启用 kube-proxy 替换模式后,Cilium Agent 如何直接通过 eBPF 程序处理 Service 流量,绕过传统的 iptables 和 kube-proxy 组件。
3.4 CNI 配置检查与验证
安装完成后,必须验证 Cilium 是否正确接管了 CNI 配置。以下是标准检查步骤:
- 检查 Cilium Pod 运行状态
kubectl -n kube-system get pods -l k8s-app=cilium
# 预期输出:所有 Pod 均为 Running 状态
- 验证 CNI 配置文件
# 在任意节点上执行
cat /etc/cni/net.d/05-cilium.conf
# 应包含 "type": "cilium-cni" 且无其他 CNI 插件残留
- 检查 kube-proxy 是否已被替换
# 查看 Cilium Agent 状态
kubectl -n kube-system exec ds/cilium -- cilium status | grep -i "kube-proxy"
# 预期输出:KubeProxyReplacement: Strict 或 Probe
- 测试 Service 连通性
# 创建一个测试 Service 和 Pod
kubectl run test-pod --image=nginx --port=80
kubectl expose pod test-pod --port=80 --target-port=80
# 从集群内访问 ClusterIP,验证转发正常
kubectl run curl --image=curlimages/curl -it --rm -- sh -c "curl http://test-pod:80"
CNI 配置冲突排查: 如果节点上存在多个 CNI 配置文件(如
10-flannel.conflist),Cilium 可能无法正常工作。建议设置 cni.exclusive=true,或手动删除其他 CNI 配置并重启 kubelet。
3.5 部署后参数调优清单
安装完成后,建议根据集群规模调整以下参数,为蓝绿发布场景做准备:
| 参数 | 推荐值 | 调优理由 |
|---|---|---|
bpf.masquerade |
true |
启用 eBPF 伪装,避免 iptables MASQUERADE 性能开销 |
ipv4.enabled |
true |
确保 IPv4 协议栈开启 |
ipv6.enabled |
false |
如未使用 IPv6,关闭以减少资源占用 |
hubble.enabled |
true |
开启 Hubble 可观测性,便于蓝绿发布流量监控 |
hubble.relay.enabled |
true |
启用 Hubble Relay 实现集群级流量聚合 |
nodeinit.enabled |
true |
自动配置节点内核参数(如 net.ipv4.conf.all.rp_filter) |
蓝绿发布预调优: 在后续章节中,我们将基于
bpf.masquerade=true 和 hubble.enabled=true 配置,实现蓝绿 Service 的零信任流量隔离与可视化。建议在安装阶段就开启这些特性,避免后期重建 Cilium。
3.6 安装后 CNI 配置拓扑
下图展示了 Cilium 安装完成后,CNI 配置在节点上的完整拓扑关系,以及各组件之间的数据流路径。
验证总结: 完成上述安装与检查后,Cilium 将以 kube-proxy 替换模式运行,CNI 配置独占节点,所有 Pod 网络流量均通过 eBPF 程序处理。此时集群已具备蓝绿发布所需的网络基础:高性能 Service 转发、可观测性数据采集、以及后续准入控制策略的执行能力。