3. Cilium 安装与部署:使用 Helm 安装 Cilium、配置 kube-proxy 替代、验证集群状态

在生产环境中部署 Cilium 时,Helm 是官方推荐的标准方式。它提供了声明式的配置管理、版本回滚和参数化安装能力。本章将引导你完成从 Helm 仓库配置到集群状态验证的完整流程,并重点讲解 kube-proxy 替代 这一关键架构决策。

3.1 安装前提与 Helm 仓库配置

在安装 Cilium 之前,请确保你的 Kubernetes 集群满足以下最低版本要求:

组件 最低版本 推荐版本
Kubernetes v1.21 v1.27+
Helm v3.8 v3.12+
Linux 内核 4.19 5.10+ (eBPF 全面支持)

首先添加 Cilium 的官方 Helm 仓库并更新索引:

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

3.2 使用 Helm 安装 Cilium(含 kube-proxy 替代)

kube-proxy 替代是 Cilium 的核心能力之一。通过 kube-proxy 替代,Cilium 使用 eBPF 直接处理 Service 负载均衡、NodePort 和 ClusterIP 转发,消除了对 iptables 的依赖,显著提升性能并降低延迟。

架构决策提示: 启用 kube-proxy 替代后,集群中不应再运行 kube-proxy DaemonSet。如果 kube-proxy 与 Cilium 同时运行,会导致 Service 转发规则冲突。建议在安装 Cilium 前,通过 kubectl -n kube-system delete daemonset kube-proxy 移除 kube-proxy。

以下命令将安装 Cilium 并启用 kube-proxy 替代模式:

helm install cilium cilium/cilium \
  --namespace kube-system \
  --set kubeProxyReplacement=true \
  --set k8sServiceHost=<API_SERVER_IP> \
  --set k8sServicePort=6443 \
  --set hubble.relay.enabled=true \
  --set hubble.ui.enabled=true

参数说明:

  • kubeProxyReplacement=true:启用完整的 kube-proxy 替代,Cilium 接管所有 Service 逻辑。
  • k8sServiceHost / k8sServicePort:指定 Kubernetes API Server 的地址和端口,Cilium Agent 需要此信息与 API Server 通信。
  • hubble.relay.enabled / hubble.ui.enabled:启用 Hubble 可观测性组件,用于后续的网络策略调试。
生产环境建议: 对于大规模集群,建议额外设置 --set bpf.masquerade=true 启用 eBPF 伪装,以及 --set loadBalancer.mode=dsr 启用 DSR(直接服务器返回)模式以获得最佳性能。

3.3 kube-proxy 替代架构图

下图展示了启用 kube-proxy 替代后,Cilium Agent 如何通过 eBPF 程序直接处理 Service 流量,绕过传统的 iptables 和 kube-proxy 组件。

Cilium kube-proxy 替代架构 Cilium kube-proxy 替代架构 传统模式(无 Cilium) kube-proxy (iptables) iptables 规则链 Service 后端转发 Pod 网络命名空间 Cilium 模式(kube-proxy 替代) Cilium Agent (eBPF) eBPF 程序 (XDP/TC) Service 负载均衡 Pod 网络命名空间 对比:左侧依赖 iptables 规则链,右侧通过 eBPF 在内核态直接处理

3.4 验证集群状态

安装完成后,执行以下步骤验证 Cilium 是否正常运行:

  1. 检查 Pod 状态: 确认所有 Cilium Agent Pod 处于 Running 状态。
  2. 验证 kube-proxy 替代: 检查 Cilium Agent 日志,确认 kube-proxy 替代已启用。
  3. 测试 Service 连通性: 创建一个测试 Deployment 和 Service,验证 ClusterIP 和 NodePort 访问正常。
# 1. 检查 Cilium Pod 状态
kubectl -n kube-system get pods -l k8s-app=cilium

# 2. 验证 kube-proxy 替代状态
kubectl -n kube-system exec ds/cilium -- cilium status | grep KubeProxyReplacement

# 3. 测试 Service 连通性
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=ClusterIP
kubectl run test --image=busybox --rm -it -- wget -O- http://nginx
预期输出:
  • cilium status 应显示 KubeProxyReplacement: True。
  • 测试 Pod 应能通过 Service 名称成功访问 nginx 默认页面。

3.5 常见安装问题排查

问题现象 可能原因 解决方案
Cilium Agent 启动失败 内核版本过低,eBPF 功能缺失 升级内核至 5.10+,或启用 --set bpf.mountPath=/sys/fs/bpf
kube-proxy 替代未生效 kube-proxy 仍在运行,或 API Server 地址配置错误 删除 kube-proxy DaemonSet,检查 k8sServiceHost 配置
Service 访问超时 CNI 配置未正确下发,或节点间网络不通 检查 cilium connectivity test 输出,确认节点间隧道/VXLAN 配置

3.6 安装后验证流程图

以下流程图总结了安装完成后的验证步骤,帮助你快速定位问题:

Cilium 安装后验证流程 Cilium 安装后验证流程 检查 Cilium Pod 状态 验证 kube-proxy 替代 测试 Service 连通性 运行连通性测试 验证命令 kubectl get pods cilium status kubectl run test -- wget <svc> cilium connectivity test
生产环境建议: 在 CI/CD 流水线中,建议将 cilium connectivity test 作为部署后的自动化验证步骤。该命令会创建多个测试 Pod,全面检查跨节点通信、Service 负载均衡和网络策略隔离性。