4. Cilium Helm Chart 安装:添加仓库、配置参数、部署与验证

本章将完整演示如何通过 Helm 将 Cilium 部署到 Kubernetes 集群。整个过程分为四个阶段:添加官方 Helm 仓库、编写自定义 Values 参数、执行安装命令、以及验证组件运行状态。正确的安装是后续资源配额与性能调优的基础,每一步都需要严谨对待。

前置条件:确保已安装 Helm v3.8+ 和 kubectl,并拥有对目标集群的 admin 权限。集群节点需满足 Cilium 内核要求(Linux 4.19+ 或 5.x 系列)。

4.1 添加 Cilium Helm 仓库

首先添加官方 Helm 仓库并更新索引,确保获取最新的 Chart 版本。

# 添加 Cilium 官方 Helm 仓库
helm repo add cilium https://helm.cilium.io/

# 更新本地仓库缓存
helm repo update

# 验证仓库是否添加成功
helm search repo cilium/cilium --versions | head -5

输出示例:

NAME            CHART VERSION   APP VERSION     DESCRIPTION
cilium/cilium   1.16.5          1.16.5          eBPF-based Networking...
cilium/cilium   1.16.4          1.16.4          eBPF-based Networking...
cilium/cilium   1.15.10         1.15.10         eBPF-based Networking...
版本选择建议:生产环境建议选择最新的稳定版本(如 1.16.x),避免使用 alpha 或 rc 版本。对于已有集群,需确认 Cilium 版本与 Kubernetes 版本的兼容性矩阵。

4.2 配置 Values 参数

Cilium 的 Helm Chart 提供了超过 300 个可配置参数。以下是一个面向生产环境的 values.yaml 核心配置示例,涵盖网络模式、IPAM、kube-proxy 替换和监控等关键维度。

# cilium-values-prod.yaml
# 全局设置
cluster:
  name: production-cluster
  id: 1

# 网络模式:Overlay (VXLAN)
tunnelProtocol: "vxlan"
routingMode: "tunnel"

# IPAM 模式:Kuberenetes CRD
ipam:
  mode: "kubernetes"

# 替换 kube-proxy
kubeProxyReplacement: "strict"
k8sServiceHost: "10.0.0.100"   # 替换为你的 API Server IP
k8sServicePort: 6443

# 节点间通信加密
encryption:
  enabled: true
  type: "wireguard"

# Hubble 可观测性
hubble:
  enabled: true
  relay:
    enabled: true
  ui:
    enabled: true

# 资源限制(初始值,后续章节会调优)
resources:
  cilium:
    limits:
      cpu: 2
      memory: 4Gi
    requests:
      cpu: 500m
      memory: 1Gi
  operator:
    limits:
      cpu: 1
      memory: 2Gi
    requests:
      cpu: 200m
      memory: 512Mi
参数路径 推荐值 说明
routingMode tunnel Overlay 模式,兼容性最好;Native 模式需底层网络支持
kubeProxyReplacement strict 完全替换 kube-proxy,提升性能;需确保 k8sServiceHost 正确
encryption.type wireguard 节点间流量加密,性能优于 IPsec
hubble.relay.enabled true 启用 Hubble Relay 实现集群级流量聚合
ipam.mode kubernetes 使用 Kubernetes CRD 管理 Pod CIDR,避免 IP 冲突
关键检查点:如果启用 kubeProxyReplacement: strict,必须正确设置 k8sServiceHost 和 k8sServicePort,否则 Cilium Agent 将无法连接 API Server,导致安装失败。建议在安装前通过 kubectl cluster-info 确认 API Server 地址。

4.3 安装 Cilium 到 Kubernetes 集群

使用 helm install 命令执行部署。建议先执行 Dry-Run 验证配置语法,再进行实际安装。

# 步骤 1:Dry-Run 验证(不实际安装)
helm install cilium cilium/cilium \
  --namespace kube-system \
  --values cilium-values-prod.yaml \
  --dry-run --debug > cilium-dryrun.yaml

# 步骤 2:检查生成的 YAML 是否有明显错误
grep -i "error\|invalid\|failed" cilium-dryrun.yaml || echo "语法检查通过"

# 步骤 3:执行实际安装
helm install cilium cilium/cilium \
  --namespace kube-system \
  --values cilium-values-prod.yaml \
  --wait \
  --timeout 10m0s

安装命令参数说明:

  • --namespace kube-system:Cilium 组件部署在系统命名空间。
  • --wait:等待所有 Pod 进入 Ready 状态后再返回。
  • --timeout 10m0s:超时时间,大型集群可能需要更长。

安装成功后,Helm 会输出类似以下信息:

NAME: cilium
LAST DEPLOYED: Tue Jan 14 10:30:00 2025
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None

4.4 验证安装状态

安装完成后,需要通过多个维度验证 Cilium 是否正常运行。以下是一套完整的验证流程。

4.4.1 检查 Pod 状态

# 查看 Cilium 相关 Pod
kubectl -n kube-system get pods -l k8s-app=cilium

# 预期输出:所有 Pod 均为 Running 状态
NAME               READY   STATUS    RESTARTS   AGE
cilium-abc12       1/1     Running   0          5m
cilium-def34       1/1     Running   0          5m
cilium-operator-0  1/1     Running   0          5m
cilium-operator-1  1/1     Running   0          5m

4.4.2 验证 Cilium Agent 状态

# 在任意节点上执行 cilium status
kubectl -n kube-system exec ds/cilium -- cilium status

# 关键输出指标
KVStore:                Ok   Disabled
Kubernetes:             Ok   1.29 (v1.29.0) [linux/amd64]
Kubernetes APIs:        ["cilium/v2::CiliumEndpoint", "cilium/v2::CiliumNetworkPolicy", ...]
KubeProxyReplacement:   Strict   [eth0 10.0.0.100]
Host Routing:           Legacy
Cilium:                 Ok   1.16.5
NodeMonitor:            Disabled
CiliumHealth:           Ok   

4.4.3 验证 Hubble 可观测性

# 检查 Hubble Relay 状态
kubectl -n kube-system get pods -l k8s-app=hubble-relay

# 启动 Hubble UI 端口转发(可选)
kubectl -n kube-system port-forward svc/hubble-ui 12000:80

# 使用 hubble CLI 检查流量
kubectl -n kube-system exec ds/cilium -- hubble observe --since 1m

4.4.4 端到端连通性测试

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

# 测试内容包括:
# - Pod-to-Pod 通信
# - Pod-to-Service 通信
# - 跨节点通信
# - DNS 解析
# - 网络策略执行
验证清单:安装完成后,建议按以下顺序逐项确认:① 所有 Cilium DaemonSet Pod 处于 Running 状态;② cilium status 显示 Kubernetes 连接为 Ok;③ kubeProxyReplacement 状态为 Strict;④ Hubble Relay 和 UI 正常响应;⑤ 连通性测试全部通过。任何一项失败都应回退检查 Values 配置。

4.5 安装流程总览

下图总结了从仓库配置到验证完成的完整安装流程,以及各阶段的关键检查点。

Cilium Helm 安装流程总览 阶段 1:仓库配置 helm repo add cilium 阶段 2:参数配置 编写 values.yaml 阶段 3:安装部署 helm install --wait 阶段 4:验证 Pod / Status / 连通性 各阶段关键检查点 • 仓库配置:确认 repo 添加成功,Chart 版本与 K8s 版本兼容 • 参数配置:kubeProxyReplacement 模式、k8sServiceHost 地址、IPAM 模式 • 安装部署:Dry-Run 语法验证、--wait 确保 Pod 就绪、超时时间设置 • 验证:Pod Running 状态、cilium status 输出、Hubble 响应、连通性测试全部通过 • 回退策略:任何阶段失败,使用 helm uninstall cilium -n kube-system 清理后重试

4.6 常见安装问题与处理

问题现象 可能原因 解决方案
Cilium Agent Pod 一直处于 Init:CrashLoopBackOff 内核版本过低或缺少 eBPF 支持 升级内核至 5.10+,或启用 cgroup2 挂载
cilium status 显示 Kubernetes 连接失败 k8sServiceHost 配置错误 使用 kubectl cluster-info 获取正确 API Server 地址
Hubble Relay Pod 无法启动 Hubble 证书未自动生成 设置 hubble.tls.auto.enabled: true
连通性测试中 Pod-to-Pod 失败 节点间 VXLAN 端口(8472)被防火墙阻止 开放节点间 UDP 8472 端口
生产环境提醒:安装完成后,建议立即执行 helm list -n kube-system 确认 release 记录,并使用 helm get values cilium -n kube-system 导出当前生效的配置,作为后续变更的基线。切勿直接修改 DaemonSet 或 Deployment 的 YAML,所有变更必须通过 Helm 进行。