域名指向不同IP时,如何解决HTTP-01验证挑战?
解决cert-manager HTTP-01验证的域名切换困境
方案1:自定义cert-manager验证Ingress模板
通过配置Issuer/ClusterIssuer的HTTP-01求解器模板,让自动生成的验证Ingress同时包含原域名和子域名规则,无需手动修改自动生成的资源:
- 在你的Issuer/ClusterIssuer配置中,添加
spec.acme.solvers.http01.ingress.template字段,自定义Ingress规则 - 模板中同时声明原域名和子域名的host,指向同一个ACME验证服务
示例配置:
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: your-email@example.com privateKeySecretRef: name: letsencrypt-prod solvers: - http01: ingress: class: nginx template: spec: rules: - host: example.com # 原域名 http: paths: - path: /.well-known/acme-challenge/ pathType: Prefix backend: service: name: '{{ .Ingress.Name }}' port: name: http - host: verify.example.com # 你的子域名 http: paths: - path: /.well-known/acme-challenge/ pathType: Prefix backend: service: name: '{{ .Ingress.Name }}' port: name: http
这样cert-manager每次生成验证Ingress时,会自动包含两个域名的规则,配合原服务的重定向即可完成验证。
方案2:手动创建独立的验证Ingress
关闭cert-manager自动生成Ingress的功能,手动创建一个同时覆盖原域名和子域名的Ingress资源,专门处理ACME验证请求:
- 手动创建Ingress,包含原域名和子域名的
/.well-known/acme-challenge/*路径规则,指向cert-manager的临时验证服务 - 在Issuer/ClusterIssuer中配置http01求解器使用这个手动创建的Ingress
示例Issuer配置片段:
solvers: - http01: ingress: class: nginx ingressName: acme-verification-ingress # 指定你手动创建的Ingress名称
手动Ingress示例:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: acme-verification-ingress annotations: nginx.ingress.kubernetes.io/ssl-redirect: "false" spec: ingressClassName: nginx rules: - host: example.com http: paths: - path: /.well-known/acme-challenge/ pathType: Prefix backend: service: name: cm-acme-http-solver-xxxx port: number: 8089 - host: verify.example.com http: paths: - path: /.well-known/acme-challenge/ pathType: Prefix backend: service: name: cm-acme-http-solver-xxxx port: number: 8089
方案3:改用DNS-01验证(彻底绕过IP/Ingress限制)
如果HTTP-01的重定向方案始终有问题,直接切换到DNS-01验证方式,无需依赖域名的IP指向或Ingress配置:
- 选择你的DNS提供商对应的cert-manager webhook插件(如Cloudflare、AWS Route53等)
- 在Issuer/ClusterIssuer中配置DNS-01求解器,通过API自动添加ACME验证所需的TXT记录
- 验证过程无需访问集群IP,仅需DNS记录的正确性,适合域名未切换IP的场景
示例DNS-01求解器配置(以Cloudflare为例):
solvers: - dns01: cloudflare: email: your-cloudflare-email@example.com apiTokenSecretRef: name: cloudflare-api-token key: api-token
内容的提问来源于stack exchange,提问作者TubbyStubby
相关产品推荐
相关产品推荐

