4. Cilium 安装与配置:Helm 安装、kube-proxy 替代与状态验证

本章是 Cilium 网络策略落地的第一步。我们将使用 Helm 在 Kubernetes 集群中安装 Cilium,并配置其替代 kube-proxy 的核心功能,最后通过 CLI 和可视化工具验证集群网络状态。正确的安装与配置是后续服务目录平台网络策略生效的基础。

4.1 安装前准备:集群与 Helm 环境检查

在安装 Cilium 之前,请确保集群满足以下最低要求,并已完成 Helm 仓库的添加。

检查项 要求 验证命令
Kubernetes 版本 v1.21 及以上 kubectl version --short
节点内核版本 Linux 5.10 及以上(推荐 5.15+) uname -r
Helm 版本 v3.8 及以上 helm version
kube-proxy 模式 建议提前停止或移除 kubectl get pods -n kube-system | grep kube-proxy
最佳实践:在生产环境中,建议在安装 Cilium 前将 kube-proxy 的 DaemonSet 缩容至 0,避免两者同时管理 Service 规则造成冲突。命令:kubectl -n kube-system scale ds/kube-proxy --replicas=0

4.2 Helm 安装 Cilium:核心参数与配置

使用 Helm 安装 Cilium 时,需要重点关注 kube-proxy 替代 和 本地路由模式 的配置。以下命令将安装 Cilium 并启用 kube-proxy 替代功能。

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

# 安装 Cilium,启用 kube-proxy 替代
helm install cilium cilium/cilium \
  --namespace kube-system \
  --set kubeProxyReplacement=true \
  --set k8sServiceHost=<API_SERVER_IP> \
  --set k8sServicePort=6443 \
  --set routingMode=native \
  --set autoDirectNodeRoutes=true \
  --set ipam.mode=kubernetes \
  --set ipv4NativeRoutingCIDR=<POD_CIDR>
参数说明:
  • kubeProxyReplacement=true:启用 Cilium 完全替代 kube-proxy,接管 ClusterIP、NodePort、LoadBalancer 等 Service 转发。
  • routingMode=native:使用本地路由模式(基于 BPF),避免隧道封装,提升性能。
  • autoDirectNodeRoutes=true:自动配置节点间的直接路由,适用于云原生网络。
  • ipam.mode=kubernetes:使用 Kubernetes 原生的 Pod CIDR 分配 IP。

4.3 kube-proxy 替代原理与验证

Cilium 通过 eBPF 在数据路径上直接实现 Service 负载均衡,完全绕过 iptables 和 kube-proxy。其核心优势在于:

  • 性能提升:eBPF 在内核态完成转发,延迟降低 30%-50%。
  • 可观测性:通过 Hubble 获取每个 Service 请求的完整路径。
  • 安全增强:网络策略可直接作用于 Service 流量。

验证 kube-proxy 替代是否生效:

# 检查 Cilium 状态,确认 kube-proxy 替代已启用
cilium status | grep -i "kube-proxy"

# 预期输出示例:
# KubeProxyReplacement:   Disabled  -->   Enabled
# 或
# KubeProxyReplacement:   Strict   (完全替代模式)
注意:如果集群中仍存在 kube-proxy 的 Pod 在运行,Cilium 会检测到冲突并自动降级为“半替代模式”。请确保 kube-proxy 已完全停止,或使用 --set kubeProxyReplacement=strict 强制启用严格模式。

4.4 验证 Cilium 状态:CLI 与 Hubble

安装完成后,需要通过 Cilium CLI 和 Hubble 验证集群网络是否正常工作。

4.4.1 Cilium Agent 状态检查

# 查看 Cilium Agent Pod 状态
kubectl -n kube-system get pods -l k8s-app=cilium

# 检查 Cilium 整体健康状态
cilium status

# 预期输出应包含:
# /sys/fs/bpf:  Mounted
# Kernel Version: 5.15.0-xxx
# Cilium Version: 1.15.x
# Node Count: 3
# Pod Count: 45

4.4.2 Hubble 可观测性验证

Hubble 是 Cilium 的可观测性层,提供流量可视化能力。安装 Hubble UI 并验证:

# 启用 Hubble UI
helm upgrade cilium cilium/cilium \
  --namespace kube-system \
  --reuse-values \
  --set hubble.relay.enabled=true \
  --set hubble.ui.enabled=true

# 访问 Hubble UI(端口转发)
kubectl -n kube-system port-forward svc/hubble-ui 12000:80

# 浏览器打开 http://localhost:12000,查看集群流量拓扑
Cilium 安装与 kube-proxy 替代架构 Cilium 安装与 kube-proxy 替代架构 传统模式(kube-proxy) kube-proxy iptables 管理 Service 规则链 DNAT / SNAT / 负载均衡 性能瓶颈 高延迟 / 规则膨胀 Cilium 替代模式 Cilium Agent eBPF 程序 加载 BPF Map(Service 映射) O(1) 查找 / 无锁 高性能转发 内核态直接处理

4.5 常见问题与排错

问题现象 可能原因 解决方案
Cilium Agent 启动失败 内核版本过低或缺少 eBPF 支持 升级内核至 5.10+,或检查 CONFIG_BPF 内核编译选项
kube-proxy 替代未生效 kube-proxy 仍在运行 执行 kubectl -n kube-system scale ds/kube-proxy --replicas=0
Pod 间网络不通 路由配置错误或 CNI 冲突 检查 cilium status 中的 Encapsulation 和 Routing 状态
Hubble UI 无法访问 Relay 组件未正确部署 检查 kubectl get pods -n kube-system | grep hubble 确保所有 Pod 为 Running
快速排错命令:
  • cilium status --verbose:查看 Cilium 详细健康状态。
  • cilium connectivity test:运行内置连通性测试套件。
  • kubectl -n kube-system logs -l k8s-app=cilium --tail=50:查看 Agent 日志。

4.6 本章小结

通过 Helm 安装 Cilium 并配置 kube-proxy 替代,我们完成了集群网络层的现代化升级。验证步骤确保了 Cilium Agent、eBPF 程序以及 Hubble 可观测性组件均正常运行。在下一阶段,我们将基于此环境,为服务目录平台定义精细化的 Cilium 网络策略。