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)。以下为部署架构图:
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) 已安装。