3. 证书轮换基础:TLS证书、ServiceAccount 、OIDC证书在Kubernetes中的生命周期

在Kubernetes集群中,证书与令牌是身份验证与传输加密的基石。理解TLS证书、ServiceAccount 和OIDC证书的生命周期,是评估成本与安全风险的前提。证书过期或轮换不当,轻则导致API Server拒绝连接,重则引发服务中断与审计违规。

3.1 三类证书/令牌的核心职责

类型 用途 签发者 默认有效期 轮换触发条件
TLS证书 API Server与kubelet、etcd、kube-controller-manager之间的双向TLS加密 集群CA(kubeadm默认自签) 1年(kubeadm) 证书过期前90天(kubeadm自动轮换)或手动更新
ServiceAccount Pod内应用访问API Server的身份凭证(JWT) Controller(API Server内置) 无过期(v1.21前)/ 1年(v1.21+ TokenRequest API) Pod重启、手动删除、绑定ServiceAccount变更
OIDC证书 外部身份提供者(如Azure AD、Okta)签发的ID ,用于用户登录集群 外部OIDC Provider 由Provider定义(通常1小时~24小时) 过期后刷新(依赖refresh_)或Provider证书轮换
成本视角: TLS证书轮换频率直接影响控制面组件的CPU与网络开销;ServiceAccount 的自动轮换(v1.22+默认开启)会小幅增加API Server的签名负载;OIDC证书依赖外部Provider,轮换失败可能导致整个集群用户无法认证,引发运维人力成本激增。

3.2 TLS证书生命周期

Kubernetes控制面组件之间通过TLS证书建立信任。以kubeadm部署的集群为例,证书生命周期包含四个阶段:

  1. 签发(Issuance): 集群初始化时,kubeadm生成自签CA,并为API Server、kubelet、etcd、kube-controller-manager、kube-scheduler签发独立证书。
  2. 使用(Usage): 各组件启动时加载证书文件,建立加密通道。证书文件通常存储在 /etc/kubernetes/pki/ 目录下。
  3. 监控(Monitoring): kube-controller-manager内置的 CSRApprovingController 监控kubelet证书到期;kubeadm的 kubeadm certs check-expiration 命令可查看所有证书剩余时间。
  4. 轮换(Rotation): kubeadm v1.15+支持自动轮换控制面证书(需启用 --cert-dir 和 --rotate-certificates);kubelet证书由 RotateKubeletServerCertificate 特性门控控制。
TLS证书生命周期流程 ① 签发 kubeadm init / CA自签 ② 使用 组件TLS握手 ③ 监控 CSR / 过期检查 ④ 轮换 自动/手动更新 ⚠ 关键风险点: • 证书过期前未轮换 → API Server拒绝kubelet注册 → 节点NotReady • 轮换后未重启组件 → 旧证书仍被缓存 → 连接中断 ⏱ 时间轴(kubeadm默认1年有效期) T0: 签发 → T+9月: 自动轮换触发(kubeadm v1.15+) → T+12月: 证书过期 → T+12月+1天: 集群不可用

3.3 ServiceAccount 生命周期

ServiceAccount 是Pod内应用访问API Server的默认凭证。Kubernetes v1.22+默认启用 BoundServiceAccountTokenVolume 特性,生命周期发生重大变化:

  • 传统(v1.21及之前): 存储在Secret中,永不过期。轮换需要手动删除Secret并重启Pod,安全风险高。
  • Bound (v1.22+): 使用TokenRequest API生成,默认有效期1年,自动挂载到Pod的 /var/run/secrets/kubernetes.io/serviceaccount/。Pod重启时自动获取新。
  • 轮换触发条件:
    • Pod被删除并重新创建(Deployment滚动更新)
    • 过期(默认1年,可通过 --service-account-max--expiration 调整)
    • 手动调用TokenRequest API获取新
成本影响: Bound 的自动轮换减少了运维手动操作,但TokenRequest API的签名操作会消耗API Server的CPU资源。在拥有10,000+ Pod的集群中,轮换峰值时API Server的CPU使用率可能上升5%~8%。Kubecost可以通过 kubecost-metrics 采集TokenRequest API的调用频率,帮助定位异常签名负载。

3.4 OIDC证书生命周期

OIDC证书用于集群外部用户身份认证。当用户通过 kubectl 或Dashboard访问集群时,OIDC Provider签发ID ,API Server使用OIDC证书验证签名。

阶段 描述 轮换方式 对集群的影响
Provider证书轮换 OIDC Provider(如Azure AD)更新其签名证书 Provider自动轮换,需同步更新API Server的 --oidc-ca-file 证书不匹配 → 所有OIDC用户认证失败
ID 过期 用户持有的JWT 超过有效期(通常1小时) 客户端使用refresh_获取新ID 过期 → 用户需要重新登录
Refresh 过期 长期凭证过期(通常24小时~90天) 用户重新进行OAuth2授权流程 用户无法自动刷新,需要手动重新认证
OIDC证书轮换交互流程 OIDC Provider Azure AD / Okta / Dex 用户 kubectl / Dashboard API Server --oidc-ca-file 验证 ⚠ 轮换失败典型场景: 1. Provider轮换证书后,API Server未更新 --oidc-ca-file → 所有用户认证失败 2. Refresh 过期,用户未配置自动刷新 → 批量用户无法访问集群 3. OIDC Provider临时不可用 → 新用户无法登录,存量仍有效

3.5 证书轮换的成本与安全权衡

证书轮换频率直接影响集群的运维成本与安全风险。Kubecost策略评审需要关注以下指标:

  • 轮换频率: 过于频繁(如每天轮换TLS证书)会增加控制面CPU负载与网络开销;过于稀疏(如3年不轮换)则面临证书泄露风险。
  • 自动轮换覆盖率: 使用kubeadm自动轮换 + Bound 的集群,运维人力成本降低约70%;手动轮换的集群需要额外安排维护窗口。
  • 监控缺失成本: 未部署证书过期监控(如 cert-manager 或 kubelet-csr-approver)的集群,平均每年发生1~2次证书过期事件,每次恢复耗时2~4小时,折合人力成本约$500~$2000。
审计要点: 在Kubecost的 Assets 视图中,检查控制面节点的CPU使用率是否在证书轮换窗口出现异常峰值;在 Network 视图中,观察API Server的请求延迟是否在轮换期间升高。这些指标直接反映证书轮换对集群成本的影响。