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 集群中的核心组件及其交互关系,帮助理解安装后的整体架构。

Cilium 核心组件架构图 Kubernetes API Server Cilium Operator Cilium Agent (DaemonSet) Hubble Relay Hubble UI eBPF Programs (内核) 图例说明: • Cilium Agent 运行在每个节点上,负责加载 eBPF 程序并执行网络策略。 • Hubble Relay 从所有 Agent 收集流量元数据,并提供给 Hubble UI 进行可视化。 • Cilium Operator 负责集群级别的协调,如 IPAM 分配和端点管理。

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 所有测试通过
生产建议: 在 CI/CD 流水线中集成 cilium connectivity test,作为每次集群升级或配置变更后的冒烟测试,确保网络基础设施的稳定性。