3. Cilium 安装与部署:使用 Helm 安装 Cilium、配置 Kubernetes API Server 准入控制器、验证 Cilium 组件运行状态
本章聚焦于在生产级 Kubernetes 集群中部署 Cilium 的核心操作。我们将采用 Helm 作为包管理工具,完成 Cilium 的安装、关键准入控制器的配置,并最终验证所有组件的健康状态。正确的安装与配置是后续实现网络策略与可观测性的基石。
3.1 环境准备与 Helm 仓库配置
在安装 Cilium 之前,请确保您的 Kubernetes 集群满足以下最低版本要求,并已正确配置 kubectl 上下文。
| 组件 | 最低版本要求 | 推荐版本 |
|---|---|---|
| Kubernetes | v1.21 | v1.27+ |
| Helm | v3.8 | v3.12+ |
| Linux Kernel | 4.19 (eBPF 基础) | 5.10+ (完整功能) |
5.10+ 内核,Cilium 可启用 Bandwidth Manager、BBR 拥塞控制及 WireGuard 透明加密等高级特性。建议在部署前使用 uname -r 确认节点内核版本。
首先,添加 Cilium 的官方 Helm 仓库并更新索引:
helm repo add cilium https://helm.cilium.io/
helm repo update
3.2 使用 Helm 安装 Cilium
Cilium 的安装高度依赖 Helm values 的定制。以下是一个面向生产环境的安装命令,启用了关键的 Hubble 可观测性组件和准入控制器支持。
helm install cilium cilium/cilium \
--namespace kube-system \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,port-distribution,icmp}" \
--set ingressController.enabled=true \
--set ingressController.loadbalancerMode=shared \
--set k8sServiceHost=${API_SERVER_IP} \
--set k8sServicePort=${API_SERVER_PORT}
hubble.relay.enabled:启用 Hubble Relay,用于聚合集群内所有节点的流量观测数据。hubble.ui.enabled:部署 Hubble UI 仪表板,提供可视化服务依赖图。ingressController.enabled:启用 Cilium 原生的 Ingress 控制器,替代传统的 Nginx Ingress。k8sServiceHost/Port:指定 Kubernetes API Server 的地址,对于非标准配置或外部集群至关重要。
3.3 配置 Kubernetes API Server 准入控制器
Cilium 通过 CiliumNetworkPolicy 和 CiliumClusterwideNetworkPolicy 实现增强的网络策略。为了强制策略格式正确并防止配置错误,必须启用 ValidatingAdmissionPolicy 或 MutatingAdmissionWebhook。
Cilium 安装时会自动注册一个 ValidatingAdmissionWebhook。您需要确保 Kubernetes API Server 的启动参数中包含以下配置:
--enable-admission-plugins=ValidatingAdmissionWebhook,MutatingAdmissionWebhook
验证 API Server 的准入插件状态:
kubectl get validatingwebhookconfigurations -l app.kubernetes.io/name=cilium
kubectl get mutatingwebhookconfigurations -l app.kubernetes.io/name=cilium
若输出显示 cilium-validator 和 cilium-mutator 资源存在,则说明准入控制器已成功注册。
kubeadm 部署,请检查 /etc/kubernetes/manifests/kube-apiserver.yaml 中是否包含上述 --enable-admission-plugins 参数。缺失该参数将导致 CiliumNetworkPolicy 的校验失效,错误策略可能被静默应用。
3.4 验证 Cilium 组件运行状态
安装完成后,需要从 Pod 状态、组件日志和集群连通性三个维度进行验证。
3.4.1 检查 Pod 状态
kubectl -n kube-system get pods -l k8s-app=cilium
kubectl -n kube-system get pods -l k8s-app=hubble-relay
kubectl -n kube-system get pods -l k8s-app=hubble-ui
预期所有 Pod 应处于 Running 状态,且 READY 列为 1/1。
3.4.2 使用 Cilium CLI 诊断
# 查看 Cilium 代理状态
kubectl -n kube-system exec ds/cilium -- cilium status
# 检查 eBPF 程序是否加载成功
kubectl -n kube-system exec ds/cilium -- cilium bpf ipcache list
# 验证 Hubble 是否正常采集流量
kubectl -n kube-system exec ds/cilium -- hubble observe -n default
3.4.3 集群连通性测试
Cilium 官方提供了 cilium connectivity test 工具,用于验证 Pod 间通信、DNS 解析及网络策略执行效果。
# 运行连通性测试套件
kubectl -n kube-system exec ds/cilium -- cilium connectivity test
# 若测试通过,输出应包含 "All 42 tests (0 actions) successful, 0 tests skipped, 0 scenarios skipped."
busybox Pod 并尝试 ping 集群 DNS 或另一个 Pod 的 IP,以快速确认基础网络连通性。
3.5 Cilium 组件架构与数据流
下图展示了 Cilium 在 Kubernetes 集群中的核心组件及其交互关系,帮助理解安装后的整体架构。
3.6 安装后快速检查清单
使用以下清单快速确认部署是否成功,避免遗漏关键步骤。
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| Cilium DaemonSet | kubectl -n kube-system get ds cilium |
DESIRED = CURRENT = READY |
| Hubble Relay | kubectl -n kube-system get deploy hubble-relay |
READY 1/1 |
| 准入 Webhook | kubectl get validatingwebhookconfigurations |
cilium-validator 存在 |
| 内核 eBPF | kubectl -n kube-system exec ds/cilium -- cilium status | grep BPF |
BPF 程序已加载 |
| 集群连通性 | cilium connectivity test |
所有测试通过 |
cilium connectivity test,作为每次集群升级或配置变更后的冒烟测试,确保网络基础设施的稳定性。