2. Cilium 安装与部署:Helm 安装、kubeadm 环境准备、DaemonSet 与 Operator 部署验证

2.1 环境准备:kubeadm 集群前置条件

Cilium 作为 eBPF 数据平面,对内核版本与 kubeadm 集群配置有明确要求。以下为推荐的最低版本与关键参数:

组件 最低版本 推荐版本 备注
Linux 内核 4.19 5.10+ 支持 eBPF 核心特性
kubeadm 1.21 1.27+ 需启用 kube-proxy 替换
etcd 3.4 3.5+ 无特殊要求
容器运行时 containerd 1.4 containerd 1.6+ 支持 eBPF 挂载
内核检查命令: 在每台节点执行 uname -r 确认内核版本。若低于 5.10,建议升级后再部署 Cilium,否则部分高级功能(如 Bandwidth Manager、BGP)不可用。

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

使用 Helm 3 安装 Cilium 是最推荐的官方方式。以下为生产级安装命令与关键参数说明:

# 添加 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=192.168.1.100 \
  --set k8sServicePort=6443 \
  --set ipam.mode=kubernetes \
  --set ipv4.enabled=true \
  --set ipv6.enabled=false \
  --set hubble.enabled=true \
  --set hubble.relay.enabled=true \
  --set hubble.ui.enabled=true
参数 值示例 说明
kubeProxyReplacement true 完全替换 kube-proxy,减少 iptables 开销
k8sServiceHost API Server IP 指定 Kubernetes API Server 地址
ipam.mode kubernetes 使用 Kubernetes 原生 IPAM
hubble.enabled true 启用 Hubble 可观测性组件
hubble.relay.enabled true 启用 Hubble Relay 聚合集群流量
hubble.ui.enabled true 启用 Hubble UI 可视化界面
注意: 若集群已安装 kube-proxy,需在安装 Cilium 前删除 kube-proxy DaemonSet:kubectl -n kube-system delete ds kube-proxy。否则会导致网络规则冲突。

2.3 DaemonSet 与 Operator 部署架构

Cilium 在 Kubernetes 中以两种核心组件运行:Cilium Agent(DaemonSet) 和 Cilium Operator(Deployment)。以下为部署架构图:

Cilium DaemonSet 与 Operator 部署架构 Cilium DaemonSet 与 Operator 部署架构 Kubernetes 集群 Control Plane kube-apiserver kube-scheduler kube-controller-manager etcd Cilium Operator Deployment (2 副本) IPAM 分配 身份管理 端点同步 Hubble 组件 Hubble Relay Hubble UI Hubble Metrics Worker Node 1 Cilium Agent Pod (App) eBPF 程序挂载 网络策略执行 Worker Node 2 Cilium Agent Pod (App) eBPF 程序挂载 网络策略执行 VXLAN/Geneve DaemonSet 确保每个 Worker 节点运行一个 Cilium Agent;Operator 负责控制面逻辑,通常部署 2 副本保证高可用。

2.4 部署验证:组件状态检查

安装完成后,执行以下命令验证所有组件正常运行:

# 检查 DaemonSet 状态(期望 DESIRED = CURRENT = READY)
kubectl -n kube-system get daemonset cilium

# 检查 Operator Deployment 状态
kubectl -n kube-system get deployment cilium-operator

# 检查所有 Pod 运行状态
kubectl -n kube-system get pods -l k8s-app=cilium -o wide

# 检查 Hubble 组件
kubectl -n kube-system get pods -l k8s-app=hubble-relay
kubectl -n kube-system get pods -l k8s-app=hubble-ui
验证输出示例:
NAME           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR
cilium         3         3         3       3            3           kubernetes.io/os=linux

NAME              READY   UP-TO-DATE   AVAILABLE   AGE
cilium-operator   2/2     2            2           5m

2.5 连接性与功能验证

部署完成后,使用 Cilium 内置工具验证集群网络功能:

# 运行 Cilium 连接性测试
kubectl exec -n kube-system ds/cilium -- cilium connectivity test

# 检查 Cilium 状态
kubectl exec -n kube-system ds/cilium -- cilium status

# 查看 Hubble 流量(需先暴露 Hubble UI)
kubectl port-forward -n kube-system svc/hubble-ui 12000:80
# 浏览器访问 http://localhost:12000
验证项 预期结果 排障命令
DaemonSet 就绪 所有节点 READY 为 3/3 kubectl -n kube-system get ds cilium
Operator 就绪 AVAILABLE 为 2 kubectl -n kube-system get deploy cilium-operator
Pod 间通信 跨节点 ping 成功 cilium connectivity test
Hubble 可达 UI 页面正常加载 kubectl port-forward
eBPF 挂载 /sys/fs/bpf 可访问 kubectl exec ds/cilium -- mount | grep bpf
生产建议: 在部署前,使用 cilium install --dry-run 预览 Helm 渲染的 YAML 清单,确保参数正确。同时建议在测试集群先执行 cilium connectivity test 验证网络连通性,再推广到生产环境。

2.6 部署后关键配置检查清单

  • kube-proxy 替换确认: 检查节点 iptables 规则是否减少,iptables-save | wc -l 应显著下降。
  • eBPF 文件系统挂载: 确认 /sys/fs/bpf 已挂载,且 Cilium Agent 有读写权限。
  • Hubble 数据采集: 验证 Hubble Relay 能聚合所有 Agent 的流量事件。
  • 网络策略生效: 部署一个简单的 NetworkPolicy 测试隔离效果。
  • MTU 一致性: 检查 Cilium 自动检测的 MTU 值与底层网络设备一致。
常见问题: 若 Cilium Agent 启动失败,检查内核模块是否加载(lsmod | grep bpf),以及 bpffs 是否挂载。在 Ubuntu 22.04+ 上,需确保 linux-modules-extra-$(uname -r) 已安装。