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 组件。
3.4 验证集群状态
安装完成后,执行以下步骤验证 Cilium 是否正常运行:
- 检查 Pod 状态: 确认所有 Cilium Agent Pod 处于
Running状态。 - 验证 kube-proxy 替代: 检查 Cilium Agent 日志,确认 kube-proxy 替代已启用。
- 测试 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 安装后验证流程图
以下流程图总结了安装完成后的验证步骤,帮助你快速定位问题:
生产环境建议: 在 CI/CD 流水线中,建议将
cilium connectivity test 作为部署后的自动化验证步骤。该命令会创建多个测试 Pod,全面检查跨节点通信、Service 负载均衡和网络策略隔离性。