You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

域名指向不同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验证请求:

  1. 手动创建Ingress,包含原域名和子域名的/.well-known/acme-challenge/*路径规则,指向cert-manager的临时验证服务
  2. 在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配置:

  1. 选择你的DNS提供商对应的cert-manager webhook插件(如Cloudflare、AWS Route53等)
  2. 在Issuer/ClusterIssuer中配置DNS-01求解器,通过API自动添加ACME验证所需的TXT记录
  3. 验证过程无需访问集群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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:05:12