3、证书轮换机制:Cilium内置证书轮换流程、自动轮换触发条件、轮换超时与重试策略

Cilium Agent 使用 mTLS 与 Kubernetes API Server、Hubble Relay、Cluster Mesh 等组件通信。证书轮换机制是保障长期运行集群通信安全的核心能力。本章深入分析 Cilium 内置的证书轮换流程、自动轮换的触发条件以及轮换超时与重试策略,帮助运维人员理解证书生命周期管理的底层逻辑。

3.1 Cilium 内置证书轮换流程

Cilium 的证书轮换由 cilium-agent 和 cilium-operator 协作完成。Agent 负责本地证书的加载与监听,Operator 负责证书的签发与分发。轮换流程分为四个阶段:

  1. 证书到期检测:Agent 定期检查本地证书文件的过期时间,默认检查间隔为 5 分钟。
  2. CSR 发起:当证书剩余有效期低于阈值(默认 30 天),Agent 向 Operator 发起 Certificate Signing Request (CSR)。
  3. Operator 签发:Operator 验证 CSR 合法性后,使用集群 CA 签发新证书,并通过 Kubernetes Secret 或 gRPC 流返回给 Agent。
  4. 热加载生效:Agent 接收新证书后,在不重启进程的情况下更新 TLS 上下文,旧连接优雅关闭,新连接使用新证书。
关键指标:从 CSR 发起到新证书生效,正常耗时应小于 10 秒。若超过 30 秒,则可能触发轮换超时逻辑。
Cilium 内置证书轮换流程 Agent 证书到期检测 CSR 发起 Operator 签发新证书 热加载生效 旧连接优雅关闭 新连接使用新证书 说明:整个轮换过程对业务连接透明,旧连接在关闭前仍可正常通信

3.2 自动轮换触发条件

Cilium 的证书自动轮换并非基于固定时间间隔,而是由以下三个条件共同决定:

触发条件 默认值 说明
证书剩余有效期阈值 30 天 当证书剩余有效期低于此值时,Agent 发起 CSR 请求
证书已用时长比例 80% 当证书已用时长超过总有效期的 80% 时触发轮换
强制轮换间隔 180 天 即使未达到上述条件,超过此间隔也会强制轮换
最佳实践:在生产环境中,建议将证书有效期设置为 365 天,并保持默认的 30 天阈值。这样既能保证证书有足够的缓冲期,又能避免过于频繁的轮换。

触发条件的优先级为:强制轮换间隔 > 证书已用时长比例 > 证书剩余有效期阈值。当任意一个条件满足时,Agent 立即进入轮换流程。

3.3 轮换超时与重试策略

Cilium 为证书轮换设计了完善的超时与重试机制,防止因网络抖动或 Operator 负载过高导致轮换失败。核心参数如下:

参数名称 默认值 作用
certificate-renewal-timeout 30s 单次 CSR 请求的超时时间
certificate-renewal-retry-interval 5s 失败后的重试间隔
certificate-renewal-max-retries 3 最大重试次数
certificate-renewal-backoff-factor 2.0 指数退避因子

重试策略采用 指数退避 + 抖动 算法:

// 重试间隔计算逻辑
retry_interval = base_interval * (backoff_factor ^ retry_count)
// 加入随机抖动,防止惊群效应
actual_interval = retry_interval + random(0, retry_interval * 0.1)

// 示例:第 1 次重试等待 5s,第 2 次 10s,第 3 次 20s
// 每次重试增加 0~10% 的随机抖动
注意:如果 3 次重试全部失败,Agent 不会立即崩溃,而是进入 降级模式。降级模式下,Agent 继续使用旧证书,但会在日志中记录 CRITICAL 级别告警,并每 5 分钟重新尝试一次轮换。若旧证书已过期,Agent 将停止接受新连接,仅维持已有连接。
证书轮换重试策略时间线 0s 5s 15s 35s 55s 首次 重试1 重试2 重试3 降级 等待 5s 等待 10s 等待 20s 降级模式行为 • 继续使用旧证书,不接受新连接(若旧证书已过期) • 每 5 分钟自动重试一次证书轮换 • 日志记录 CRITICAL 级别告警,触发 Prometheus 指标 cilium_agent_certificate_renewal_failure

3.4 轮换失败常见原因与排查路径

证书轮换失败通常由以下原因导致:

  • Operator 不可达:Agent 无法连接到 Operator 的 gRPC 端口(默认 4434)。
  • CA 证书过期:集群 CA 证书已过期,Operator 无法签发新证书。
  • CSR 被拒绝:Kubernetes CSR 资源被准入控制器或策略拒绝。
  • 磁盘空间不足:Agent 无法写入新证书文件。
  • 时间偏差:Agent 节点与 Operator 节点时间偏差超过 5 分钟,导致证书验证失败。
排查命令:
kubectl logs -n kube-system cilium-agent-xxxxx | grep -i certificate
kubectl get csr -n kube-system | grep cilium
cilium status | grep -i cert