Admission Webhook 故障:API 写请求为何集体超时

从 webhook 配置、Service 端点、TLS 与失败策略定位 Kubernetes 准入链路故障。

文章目录 · 4 节

Admission Webhook 位于资源写入路径上。服务不可达、证书失效或处理变慢时,创建和更新资源可能同时失败,影响范围取决于匹配规则与 failurePolicy

从错误确定对象

kubectl get validatingwebhookconfigurations,mutatingwebhookconfigurations
kubectl get validatingwebhookconfiguration policy-webhook -o yaml
kubectl get events -A --sort-by=.lastTimestamp | tail -30

关注错误中的 webhook 名称、超时、TLS 原因和目标资源。检查 rulesnamespaceSelectorobjectSelector 是否意外覆盖系统命名空间。

验证服务链路

kubectl get svc,endpoints,endpointslices -n policy-system
kubectl logs -n policy-system deploy/policy-webhook --since=15m
kubectl get secret -n policy-system webhook-tls -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -noout -dates -subject

证书 SAN 必须匹配 <service>.<namespace>.svccaBundle 也要与签发链一致。服务有端点但仍超时,应继续检查 NetworkPolicy、kube-proxy 和 API Server 到 Pod 的路径。

应急边界

  • 先缩小 webhook 匹配范围或恢复副本
  • 修改 failurePolicy: Ignore 前评估绕过策略的风险
  • 不删除配置而不保留原始 YAML
  • 为延迟、拒绝率和证书有效期设置监控

收尾清单

分别测试应被允许和拒绝的对象,确认准入逻辑真正恢复。补做 webhook 不可用演练,并记录紧急豁免的审批与回滚步骤。