4. Cilium安装与部署

Cilium 的部署方式直接影响控制面网络策略的执行效率与运维复杂度。本章聚焦生产级部署方案,涵盖 Helm 安装、kubeadm 集成、关键配置选项及经过验证的最佳实践,确保 Cilium 在控制面架构中稳定运行。

4.1 部署架构概览

Cilium 在 Kubernetes 集群中以 DaemonSet 形式运行在每个节点上,通过 eBPF 程序直接与内核交互。控制面组件(如 Operator、Hubble Relay)负责策略分发与可观测性数据聚合。下图展示了 Cilium 在控制面架构中的核心组件与数据流。

Cilium 控制面部署架构 Kubernetes 集群 控制面节点 kube-apiserver Cilium Operator Hubble Relay 工作节点 1 Cilium Agent eBPF 程序 Hubble Observer 工作节点 2 Cilium Agent eBPF 程序 Hubble Observer 网络策略下发 可观测性数据 说明:Cilium Agent 通过 eBPF 直接在内核层执行策略,Operator 负责 CRD 同步与状态管理,Hubble 提供流日志与指标。

4.2 Helm 安装 Cilium

Helm 是部署 Cilium 的推荐方式,提供参数化配置与版本管理。以下步骤适用于生产环境。

4.2.1 前置条件

  • Kubernetes 集群版本 ≥ 1.23(推荐 1.27+)
  • 节点内核版本 ≥ 5.10(推荐 5.15+)
  • Helm 3.8+ 已安装
  • 集群 CNI 未配置(或准备迁移)

4.2.2 添加 Helm 仓库与安装

# 添加 Cilium Helm 仓库
helm repo add cilium https://helm.cilium.io/
helm repo update

# 创建命名空间
kubectl create namespace cilium

# 使用 Helm 安装 Cilium(基础配置)
helm install cilium cilium/cilium \
  --namespace cilium \
  --set cluster.name=production-cluster \
  --set cluster.id=1 \
  --set ipam.mode=kubernetes \
  --set kubeProxyReplacement=strict \
  --set securityContext.capabilities.add="{NET_ADMIN,SYS_ADMIN}"

4.2.3 验证安装

# 检查 Pod 状态
kubectl -n cilium get pods
NAME               READY   STATUS    RESTARTS   AGE
cilium-operator-1   1/1     Running   0          2m
cilium-xxxxx        1/1     Running   0          2m
cilium-yyyyy        1/1     Running   0          2m

# 验证 Cilium 状态
cilium status --namespace cilium

4.3 kubeadm 集成配置

使用 kubeadm 部署的集群需要额外配置以确保 Cilium 正确接管网络功能。关键步骤包括禁用 kube-proxy 和调整 kube-controller-manager 参数。

4.3.1 禁用 kube-proxy

# 编辑 kube-proxy DaemonSet,将 replicas 设为 0
kubectl -n kube-system scale deployment/kube-proxy --replicas=0

# 或直接删除 kube-proxy
kubectl -n kube-system delete daemonset kube-proxy

4.3.2 配置 kube-controller-manager

# 在 /etc/kubernetes/manifests/kube-controller-manager.yaml 中
# 确保以下参数存在
spec:
  containers:
  - command:
    - kube-controller-manager
    - --allocate-node-cidrs=true
    - --cluster-cidr=10.244.0.0/16
    - --node-cidr-mask-size=24

4.3.3 安装 Cilium 时指定 kubeadm 集成

helm install cilium cilium/cilium \
  --namespace cilium \
  --set kubeProxyReplacement=strict \
  --set k8sServiceHost=192.168.1.100 \
  --set k8sServicePort=6443 \
  --set ipam.mode=kubernetes \
  --set nodeinit.enabled=true
提示:k8sServiceHost 和 k8sServicePort 必须指向 kube-apiserver 的稳定地址。对于高可用集群,建议使用负载均衡器 VIP 或 DNS 名称。

4.4 关键配置选项

下表列出了生产环境中必须关注的配置参数及其推荐值。

配置项 推荐值 说明
kubeProxyReplacement strict 完全替代 kube-proxy,减少 iptables 规则
ipam.mode kubernetes 使用 Kubernetes 原生 IPAM,避免 CRD 额外开销
routingMode native 原生路由模式,性能优于隧道模式
autoDirectNodeRoutes true 自动配置节点路由,减少手动干预
hubble.enabled true 启用可观测性组件,便于策略调试
hubble.relay.enabled true 聚合 Hubble 流日志,支持全局查询
securityContext.capabilities NET_ADMIN, SYS_ADMIN eBPF 程序需要的内核权限
cgroup.autoMount.enabled true 自动挂载 cgroupv2,确保 eBPF 正确工作

4.5 最佳实践

基于生产环境经验,以下实践可显著提升 Cilium 的稳定性与性能。

4.5.1 内核与系统调优

  • 内核版本:确保所有节点内核 ≥ 5.15,推荐 6.1+ 以获得完整 eBPF 特性。
  • cgroupv2:启用 cgroupv2(systemd.unified_cgroup_hierarchy=1),Cilium 依赖其进行 Pod 网络隔离。
  • 系统参数:调整 net.core.bpf_jit_enable=1 和 kernel.unprivileged_bpf_disabled=1。

4.5.2 网络模式选择

根据集群规模与网络环境选择路由模式:

模式 适用场景 优势 劣势
Native Routing 云原生环境(AWS VPC、GCP VPC) 低延迟、高吞吐、无封装开销 需要底层网络支持路由
Tunneling (VXLAN) 跨子网、混合云、裸金属 网络隔离性好、无需底层路由 额外封装开销约 5-10%

4.5.3 资源规划与高可用

  • Cilium Agent:每个节点预留 0.5 CPU 和 512MB 内存,大规模集群(>100 节点)建议 1 CPU / 1GB。
  • Cilium Operator:至少 2 副本,设置 podAntiAffinity 避免同一节点。
  • Hubble Relay:独立部署,避免与 Operator 资源竞争。

4.5.4 升级策略

# 使用 Helm 升级,保留现有配置
helm upgrade cilium cilium/cilium \
  --namespace cilium \
  --reuse-values \
  --set image.tag=v1.15.0

# 分批升级节点(DaemonSet 滚动更新)
kubectl -n cilium rollout restart daemonset/cilium
警告:升级前务必在测试环境验证策略兼容性。Cilium 1.14 到 1.15 的升级涉及 CRD 变更,需确保 Operator 先升级。

4.6 部署后验证清单

完成部署后,执行以下验证步骤确保 Cilium 正常工作:

  1. Pod 状态:所有 cilium-xxx Pod 处于 Running 状态。
  2. 连通性测试:使用 cilium connectivity test 验证跨节点 Pod 通信。
  3. 策略执行:部署测试 NetworkPolicy,验证流量被正确允许/拒绝。
  4. Hubble 可观测性:通过 hubble observe 查看流日志。
  5. 性能基准:使用 netperf 或 iperf3 对比部署前后的网络吞吐与延迟。
部署后验证流程 Pod 状态 连通性测试 策略执行 Hubble 观测 性能基准 建议:每次集群升级或配置变更后,完整执行此验证流程,确保网络策略持续生效。

4.7 常见问题与排错

问题 原因 解决方案
Cilium Agent 启动失败 内核版本过低或缺少 eBPF 支持 升级内核至 5.10+,检查 CONFIG_BPF 编译选项
Pod 无法获取 IP IPAM 模式配置错误或 CNI 冲突 确认 ipam.mode 与集群环境匹配,检查 kube-controller-manager 参数
网络策略不生效 策略语法错误或 Cilium 未启用策略执行 使用 cilium policy validate 检查,确认 policyEnforcementMode=always
Hubble 无数据 Hubble 组件未正确配置或端口被防火墙阻止 检查 hubble.enabled=true,确认 4244/4245 端口可达
核心要点:生产级 Cilium 部署应优先选择 kubeProxyReplacement=strict 和 Native Routing 模式,配合 Hubble 可观测性实现策略的持续验证与排错。Helm 参数化配置与 kubeadm 集成是控制面架构中的标准实践。