4. Cilium安装与部署:Helm安装、kubeadm集成、配置选项与最佳实践
Cilium 的部署方式直接影响控制面网络策略的执行效率与运维复杂度。本章聚焦生产级部署方案,涵盖 Helm 安装、kubeadm 集成、关键配置选项及经过验证的最佳实践,确保 Cilium 在控制面架构中稳定运行。
4.1 部署架构概览
Cilium 在 Kubernetes 集群中以 DaemonSet 形式运行在每个节点上,通过 eBPF 程序直接与内核交互。控制面组件(如 Operator、Hubble Relay)负责策略分发与可观测性数据聚合。下图展示了 Cilium 在控制面架构中的核心组件与数据流。
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 正常工作:
- Pod 状态:所有 cilium-xxx Pod 处于 Running 状态。
- 连通性测试:使用
cilium connectivity test验证跨节点 Pod 通信。 - 策略执行:部署测试 NetworkPolicy,验证流量被正确允许/拒绝。
- Hubble 可观测性:通过
hubble observe查看流日志。 - 性能基准:使用
netperf或iperf3对比部署前后的网络吞吐与延迟。
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 集成是控制面架构中的标准实践。