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,查看集群流量拓扑
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 网络策略。