3. 环境准备与安装:Kubernetes集群要求、Cilium CLI安装、Helm Chart部署Cilium
在服务目录平台晋级环境中,Cilium 的部署质量直接决定网络策略与可观测性的稳定性。本章节从底层集群要求、CLI 工具链到 Helm Chart 生产级部署,提供一套经过大规模生产验证的标准化流程。
3.1 Kubernetes 集群要求
Cilium 依赖内核特性实现 eBPF 数据路径,集群必须满足以下硬性条件:
| 类别 | 最低版本 | 推荐版本 | 关键说明 |
|---|---|---|---|
| Linux 内核 | 4.19 | ≥ 5.10 | 5.10+ 支持完整 eBPF 特性(BTF、XDP、cgroup v2) |
| Kubernetes | 1.21 | ≥ 1.27 | 需启用 NetworkPolicy 与 EndpointSlice 特性门控 |
| 容器运行时 | containerd 1.5 / CRI-O 1.22 | containerd 1.7+ | 必须支持 CRI 接口,Docker 需通过 cri-dockerd 桥接 |
| CNI 插件 | — | 无预装 CNI | Cilium 将接管集群 CNI,需确保节点上无其他 CNI 冲突 |
| etcd | 3.4 | 3.5+ | 建议独立 etcd 集群,避免与 Cilium 操作冲突 |
⚠ 生产环境避坑: 如果集群使用 RHEL 8.x 或 CentOS 7,内核版本通常低于 4.19,必须升级内核或使用
cilium-agent 的 --kernel-btf 降级模式。推荐直接使用 Ubuntu 22.04+ 或 Flatcar Container Linux。
3.2 Cilium CLI 安装
Cilium CLI 是日常运维、故障排查和 Hubble 交互的核心工具。以下为多平台安装方式:
3.2.1 一键安装脚本(推荐)
# 安装最新稳定版
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all \
https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
3.2.2 macOS(Homebrew)
brew install cilium-cli
3.2.3 验证安装
cilium version --client
# 输出示例:cilium-cli: v0.16.5 compiled with go1.22.0 on linux/amd64
💡 最佳实践: 将 Cilium CLI 版本锁定在
stable.txt 指向的版本,避免使用 latest 标签。生产环境建议在 CI/CD 中固定 SHA256 校验。
3.3 Helm Chart 部署 Cilium
Helm Chart 是生产级部署的标准方式,支持细粒度参数化配置。以下为服务目录平台环境推荐的部署流程。
3.3.1 添加 Helm 仓库
helm repo add cilium https://helm.cilium.io/
helm repo update
3.3.2 创建命名空间与预检查
kubectl create namespace cilium
# 检查集群是否满足 Cilium 要求
cilium install --dry-run --namespace cilium \
--set cluster.name=service-catalog-prod \
--set cluster.id=1
3.3.3 生产级 Helm 部署命令
helm upgrade --install cilium cilium/cilium \
--namespace cilium \
--set cluster.name=service-catalog-prod \
--set cluster.id=1 \
--set ipam.mode=cluster-pool \
--set ipam.operator.clusterPoolIPv4PodCIDRList="10.0.0.0/16" \
--set ipam.operator.clusterPoolIPv4MaskSize=24 \
--set kubeProxyReplacement=strict \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,http}" \
--set l7Proxy=true \
--set ingressController.enabled=true \
--set ingressController.loadbalancerMode=dedicated \
--set bpf.masquerade=true \
--set bpf.tproxy=true \
--set autoDirectNodeRoutes=true \
--set endpointRoutes.enabled=true \
--set cgroup.hostRoot=/sys/fs/cgroup \
--set rollOutCiliumPods=true
3.3.4 关键参数说明
| 参数 | 值 | 作用 |
|---|---|---|
kubeProxyReplacement |
strict | 完全替代 kube-proxy,提升 Service 转发性能 |
ipam.mode |
cluster-pool | 集群级 IP 池管理,避免与云厂商 IPAM 冲突 |
bpf.masquerade |
true | eBPF 级 SNAT,降低 iptables 开销 |
hubble.metrics.enabled |
多维度 | 开启 DNS、丢弃、TCP、HTTP 等可观测指标 |
ingressController.enabled |
true | 启用 Cilium Ingress,统一南北向流量策略 |
3.4 部署验证与状态检查
部署完成后,执行以下命令确认 Cilium 正常运行:
# 检查所有 Pod 状态
kubectl -n cilium get pods -o wide
# 使用 Cilium CLI 检查集群状态
cilium status --wait
# 测试连通性
cilium connectivity test
✅ 预期输出: 所有 cilium-agent 和 cilium-operator Pod 处于 Running 状态;
cilium status 显示 "Cilium: OK";connectivity test 全部通过(约 30-60 秒)。
3.5 部署架构总览
下图展示了 Cilium 在服务目录平台集群中的核心组件与数据流关系:
3.6 部署后快速验证清单
- Pod 状态:
kubectl -n cilium get pods确认所有 Pod 处于Running状态。 - 节点就绪:
cilium status显示所有节点Cilium: OK。 - Hubble 可达:
cilium hubble port-forward后通过hubble observe查看实时流量。 - 连通性测试:
cilium connectivity test全部通过(含跨节点、DNS、HTTP 测试)。 - 内核特性:
cilium sysdump检查 BTF、cgroup v2、XDP 是否启用。
🔧 排障提示: 如果
cilium connectivity test 中 DNS 测试失败,检查 cilium-agent 日志中是否有 dnsproxy 相关错误,通常需要设置 --set dnsProxy.enable=true 并确保节点防火墙放行 UDP 53。
3.7 生产环境参数调优建议
| 场景 | 推荐参数 | 说明 |
|---|---|---|
| 大规模集群(> 500 节点) | --set operator.replicas=3--set ipam.operator.clusterPoolIPv4PodCIDRList="10.0.0.0/8" |
增加 operator 副本,扩大 IP 池避免地址耗尽 |
| 高吞吐服务目录 | --set bpf.masquerade=true--set bpf.tproxy=true--set kubeProxyReplacement=strict |
完全绕过 iptables,降低 P99 延迟 |
| 多集群联邦 | --set cluster.name=unique-name--set cluster.id=unique-id |
每个集群必须唯一,避免 Hubble 流数据冲突 |
| 安全合规环境 | --set l7Proxy=true--set ingressController.enabled=true--set hubble.metrics.enabled="{tls,http}" |
启用 L7 策略与 TLS 可观测性 |
完成以上步骤后,Cilium 已就绪,可以进入下一阶段:服务目录平台的网络策略定义与接口配置。