2. Cilium 安装与部署:使用 Helm 在 K8s 集群中安装 Cilium、配置 CNI、验证部署状态

在生产环境中,Cilium 的安装推荐使用 Helm 进行声明式管理。Helm 提供了参数化配置、版本回滚和依赖管理能力,能够精确控制 Cilium 的 CNI 模式、内核兼容性、eBPF 挂载点以及安全策略引擎的启停。本节将演示从 Helm 仓库添加、Values 定制到部署验证的完整流程。

2.1 环境准备与 Helm 仓库配置

在安装 Cilium 之前,需要确保 Kubernetes 集群满足以下最低版本要求,并正确配置 Helm 客户端。

组件 最低版本 推荐版本
Kubernetes v1.21 v1.27+
Helm v3.8 v3.12+
Linux Kernel 4.19 5.10+ (支持完整 eBPF 特性)
容器运行时 containerd 1.5 / CRI-O 1.22 containerd 1.7+
内核检查提示: 执行 uname -r 确认内核版本。若内核低于 5.10,Cilium 的 Bandwidth Manager、BBR 拥塞控制及 WireGuard 透明加密将不可用。建议在节点上启用 CONFIG_DEBUG_INFO_BTF=y 以获取最佳 eBPF 兼容性。

执行以下命令添加 Cilium 官方 Helm 仓库并更新索引:

helm repo add cilium https://helm.cilium.io/
helm repo update

2.2 使用 Helm 安装 Cilium(生产级配置)

以下安装命令启用了 Cilium 的核心功能:eBPF 数据面、Hubble 可观测性、ClusterMesh 以及 L7 网络策略。请根据实际集群环境调整 --set 参数。

helm install cilium cilium/cilium \
  --namespace kube-system \
  --set cluster.name="production-cluster" \
  --set cluster.id=1 \
  --set ipam.mode=kubernetes \
  --set kubeProxyReplacement=strict \
  --set securityContext.capabilities=CAP_NET_RAW,CAP_NET_ADMIN \
  --set cgroup.autoMount.enabled=true \
  --set cgroup.hostRoot=/sys/fs/cgroup \
  --set hubble.relay.enabled=true \
  --set hubble.ui.enabled=true \
  --set hubble.metrics.enabled="{dns,drop,tcp,flow,port-distribution}" \
  --set l7Proxy=true \
  --set encryption.type=wireguard
关键参数说明:
  • kubeProxyReplacement=strict:完全替换 kube-proxy,要求内核支持 eBPF。若集群存在 NodePort 冲突,可降级为 probe 或 disabled。
  • encryption.type=wireguard:启用节点间 WireGuard 透明加密。需内核支持 WireGuard 模块。
  • ipam.mode=kubernetes:使用 Kubernetes 原生的 PodCIDR 分配,避免与现有 CNI 冲突。

2.3 验证 Cilium 部署状态

安装完成后,通过以下三个维度验证 Cilium 是否正常运行:Pod 状态、CNI 配置、eBPF 程序挂载。

2.3.1 检查 DaemonSet 与 Pod 状态

kubectl -n kube-system get pods -l k8s-app=cilium
kubectl -n kube-system get daemonset cilium

预期输出:所有节点的 cilium-xxxxx Pod 均为 Running 状态,且 READY 列为 1/1。

2.3.2 验证 CNI 配置是否生效

检查每个节点上的 CNI 配置文件:

kubectl -n kube-system exec -it ds/cilium -- cilium status
kubectl -n kube-system exec -it ds/cilium -- cilium-health status

在 cilium status 输出中,重点关注以下字段:

状态字段 期望值 异常排查方向
KVStore etcd (OK) 检查 etcd 连接或 etcd-operator 状态
Kubernetes OK 确认 kubeconfig 权限与 API Server 可达性
KubeProxyReplacement Strict 内核 eBPF 特性缺失时降级为 Probe
CNI Chaining none 若显示其他 CNI,检查是否配置了 chaining 模式
NodeAddress 正确内网 IP 确认节点网络接口与路由表

2.3.3 验证 eBPF 程序与 Hubble 可观测性

通过 Hubble UI 验证流量可视化是否正常:

kubectl -n kube-system port-forward svc/hubble-ui 12000:80
# 浏览器访问 http://localhost:12000

同时,在任意节点上检查 eBPF 程序是否挂载:

kubectl -n kube-system exec -it ds/cilium -- bpftool prog list | grep cilium

预期输出应包含 cilium_calls_、cilium_from_container、cilium_to_container 等 eBPF 程序。

部署验证清单:
  • ✅ 所有 Cilium Pod 处于 Running 状态
  • ✅ cilium status 显示 Kubernetes 与 KVStore 均为 OK
  • ✅ cilium-health status 显示节点间连通性正常
  • ✅ Hubble UI 可正常访问并展示集群流量拓扑
  • ✅ 创建测试 Pod 后,Cilium 自动分配 Endpoint 并应用网络策略

2.4 Cilium 部署架构与组件交互

下图展示了 Cilium 在 Kubernetes 集群中的核心组件部署架构,包括 Cilium Agent(DaemonSet)、Cilium Operator(Deployment)、Hubble Relay 以及 KVStore 之间的数据流与控制流关系。

Cilium 部署架构与组件交互图 Cilium 部署架构与组件交互 Kubernetes 集群 Worker Node 1 Cilium Agent (DaemonSet) eBPF 程序 (TC/XDP) Pod A (app=frontend) Worker Node 2 Cilium Agent (DaemonSet) eBPF 程序 (TC/XDP) Pod B (app=backend) Control Plane Cilium Operator Hubble Relay KVStore (etcd) 身份同步 / 策略分发 Flow 数据上报 VXLAN / Geneve 隧道 说明: Cilium Agent 以 DaemonSet 运行在每个节点,通过 eBPF 直接管理 Pod 网络与安全策略。 Cilium Operator 负责身份管理、Endpoint 同步及全局策略协调。Hubble Relay 聚合全集群 Flow 数据。

2.5 常见安装问题与排错

在实际部署中,以下三类问题出现频率最高。请对照排查:

问题现象 根因 解决方案
Cilium Agent CrashLoopBackOff eBPF 文件系统未挂载或权限不足 检查 /sys/fs/bpf 是否挂载;添加 --set cgroup.autoMount.enabled=true
cilium status 显示 KVStore 异常 etcd 集群不可达或 TLS 证书错误 确认 etcd 服务地址;检查 --set etcd.ssl=true 及证书 Secret
Pod 网络不通或策略不生效 CNI 配置未正确写入或 kube-proxy 残留 检查 /etc/cni/net.d/ 下是否存在 05-cilium.conf;确认 kube-proxy 已移除或禁用
Hubble UI 无数据 Hubble Relay 未启动或 metrics 未启用 确认 hubble.relay.enabled=true;检查 hubble.metrics.enabled 配置
快速诊断命令: 使用 kubectl -n kube-system logs -l k8s-app=cilium --tail=50 查看 Agent 日志;使用 cilium sysdump 一键收集全集群诊断信息。

2.6 升级与回滚策略

当需要升级 Cilium 版本时,建议遵循以下步骤:

  1. 备份当前 Values: helm get values cilium -n kube-system > cilium-values-backup.yaml
  2. 更新 Helm 仓库: helm repo update
  3. 执行升级: helm upgrade cilium cilium/cilium -n kube-system -f cilium-values-backup.yaml --version <新版本>
  4. 验证升级: 重复 2.3 节的验证步骤,确认所有 Agent 滚动更新完成。
  5. 回滚(如需): helm rollback cilium -n kube-system 1 (回滚至上一个版本)
升级注意事项:
  • 升级期间,现有连接不会中断,但新 Pod 调度可能短暂延迟。
  • 跨大版本升级(如 v1.12 → v1.14)时,请先查阅官方升级指南,确认 API 变更。
  • 若启用了 encryption.type=wireguard,升级后需重启所有节点上的 WireGuard 接口。