我最近设置了一个 GKE 自动驾驶仪,但意识到它不支持证书管理器所依赖的 Webhooks。我们还可以选择哪些其他选项来向 GKE Auto-pilot 集群添加/管理 SSL 证书?
截至 2021 年 5 月,GKE Autopilot 不支持第 3 方 Webhooks。如果没有 webhook,许多 Kubernetes 插件(例如 cert-manager)将无法正常运行。 Cert-manager 使用自定义变异准入 Webhook 来管理证书,该证书在 GKE Autopilot 上是不可变的。
要为 Autopilot 集群添加/管理 SSL 证书,您应该首先从这个官方 GCP 文档 Google 管理的 SSL 证书开始。
您可以使用 ManagedCertificate 自定义资源配置 Google 管理的 SSL 证书,该资源在不同的 API 版本中可用,具体取决于您的 GKE 集群版本。 建议您使用较新的API版本。
注意:内部 HTTPS 负载均衡器目前不支持 Google 管理的 SSL 证书。对于内部 HTTPS 负载均衡器,请改用自我管理的 SSL 证书。此功能仅适用于外部 HTTP(S) 负载平衡的 Ingress,可以在此处阅读更多信息。
要配置 Google 管理的 SSL 证书并将其与 Ingress 关联,请首先执行以下两个基本步骤:
您必须遵循一些先决条件:
要设置 Google 管理的证书,请查看示例 ManagedCertificate 清单。
cert-manager 现在与 GKE Autopilot 兼容。
我在使用 Autopilot GKE 集群配置证书管理器时遇到问题,我收到的错误如下:
发生内部错误:调用 webhook 失败 “webhook.cert-manager.io”:调用 webhook 失败:发布 “https://cert-manager-webhook.cert-manager.svc:443/validate?timeout=30s”: tls:无法验证证书:x509:证书由未知签名 权威
我试图遵循以下文档:
关于此线程的讨论,特别是下面的链接帮助我排除故障并确定问题:
https://github.com/cert-manager/cert-manager/issues/3717
基本上,您需要通过 Helm 安装 Cert-Manager 并使用要将所有内容部署到的命名空间覆盖
global.leaderElection.namespace
,通常应该是 cert-manager
,因此您应该执行以下命令:
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.6.0 --set global.leaderElection.namespace=cert-manager --set installCRDs=true --set prometheus.enabled=false
感谢@Brad J 和 Priya Gaikwad 在上面提供有用的信息。