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 在服务目录平台集群中的核心组件与数据流关系:

Cilium 部署架构与组件关系 Cilium 服务目录平台部署架构 Kubernetes 集群边界 cilium-operator 集群状态管理 / IPAM cilium-agent (Node-1) eBPF 数据路径 / 策略执行 cilium-agent (Node-2) eBPF 数据路径 / 策略执行 cilium-agent (Node-N) eBPF 数据路径 / 策略执行 hubble-relay 流数据聚合 hubble-ui 可视化面板 etcd / Kubernetes API 状态存储与事件源

3.6 部署后快速验证清单

  1. Pod 状态: kubectl -n cilium get pods 确认所有 Pod 处于 Running 状态。
  2. 节点就绪: cilium status 显示所有节点 Cilium: OK。
  3. Hubble 可达: cilium hubble port-forward 后通过 hubble observe 查看实时流量。
  4. 连通性测试: cilium connectivity test 全部通过(含跨节点、DNS、HTTP 测试)。
  5. 内核特性: 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 已就绪,可以进入下一阶段:服务目录平台的网络策略定义与接口配置。