DEBUG.WIKI
V.PS:让项目靠近用户,亚太、欧洲、北美 KVM VPS
IPPeak:从目标地区访问网页,住宅代理、SEO 监测、广告验证
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国

GKE Autopilot 的 cert-manager Webhook 报 unknown authority,先查选主权限

Webhook Pod 在运行,CA 却未注入?核对 cainjector 在 kube-system 的选主拒绝,再调整选主命名空间与匹配权限。

在 GKE Autopilot 安装 cert-manager 后,Webhook Pod 看起来正在运行,创建资源却报 x509: certificate signed by unknown authority。如果 cainjector 同时记录无法在 kube-system 创建选主记录,应先处理这一启动障碍,而不是重新申请站点证书。

Autopilot 会保护 kube-system 命名空间。cainjector 无法完成选主时,Webhook 的 CA 注入可能没有完成,API 服务器便无法按预期信任它。本文针对这个组合;单独一个 unknown authority 也可能来自其他证书、信任或配置错误,不能直接定为选主权限问题。

从 cainjector 日志核对失败位置

下面假设安装命名空间为 cert-manager、Deployment 名为 cert-manager-cainjector。实际 Helm release 可能生成不同名称,应按正在运行的对象替换:

kubectl get deployment cert-manager-cainjector -n cert-manager -o yaml
kubectl logs deployment/cert-manager-cainjector -n cert-manager --since=15m
kubectl get leases -n cert-manager
kubectl get validatingwebhookconfigurations
kubectl get mutatingwebhookconfigurations

寻找 error initially creating leader election record、forbidden、命名空间 kube-system 和 Autopilot 的 create 拒绝信息。当前实现可能点名 leases.coordination.k8s.io;较早版本可能使用 ConfigMap。要按实际日志中的资源和运行版本检查,不能只搜索一个旧资源名。

同时查看实际 Deployment 的选主参数、选主命名空间,以及对应 Role、RoleBinding 的位置和 ServiceAccount 身份。组件安装在 cert-manager,不代表它的选主记录也在该命名空间。这是两项独立配置。

检查对应 Webhook 配置或 CRD 的 caBundle、注入配置及当前 cainjector 日志。启动检查若提示 the cert-manager webhook CA bundle is not injected yet,也支持 CA 注入未完成的判断。证书内容可在受控环境核对,但不要输出私钥或 Secret 的完整数据。

把选主记录放到可管理的命名空间

对支持相应配置的 cert-manager Helm chart,可在原 values 中设置选主命名空间。以下是待合入的片段,cert-manager 需要换成实际部署使用、允许该组件管理记录的命名空间:

global:
  leaderElection:
    namespace: cert-manager

变更前保存 release 版本、原部署值和相关对象,核对这个字段在所用 chart 版本中的含义。沿用现有安装入口、chart 版本和其他配置更新,不要为了一个参数再装第二套 cert-manager,也不要用一份新 values 覆盖现有设置。

命名空间变更需要和权限一起生效。chart 通常会按这个值生成选主参数和相应 Role、RoleBinding;如果关闭了 chart 的 RBAC 生成,或用自维护清单安装,应核对选主资源所需权限、绑定位置与真正运行的 ServiceAccount。只搬组件 Pod、只改一个参数或扩大集群权限,都不能代替这几项匹配检查。

保留平台对 kube-system 的保护,把组件的选主记录移到合适位置即可。对于由平台或 GitOps 管理的对象,应从原配置来源更新,避免控制器随后把手工修改覆盖。

验收要看到 CA 注入和原操作恢复

更新后检查 cainjector 是否成功选主、是否持续处理注入,以及相关 CA 字段是否与当前服务证书的信任链一致。然后在正常 TLS 校验下重试原先失败的资源操作,确认 Webhook 调用与资源处理完成。

一个 Pod 显示 Running,或 Helm 返回成功,都不能单独证明这条链路正常。选主恢复但调用仍失败时,沿新错误检查证书、服务地址、CA 配置和网络;connection refused、超时与证书验证失败也应分别处理。

不要关闭 Webhook、跳过 TLS 验证,或批量删除 Certificate、Issuer 与 Secret 来消除错误。站点 ACME 证书的 DNS 验证是另一条链路,RFC2136 更新被拒绝时可看 DNS 更新区域与授权检查。

若配置调整出现其他问题,恢复本次变更涉及的部署值与匹配的权限配置,保留前后日志和对象。恢复到受保护的选主命名空间也可能使选主再次失败,不能把回退操作本身当作恢复证明。