当前位置: 首页 > 知识库问答 >
问题:

带有 letsencrypt 的 nginx 入口:等待 http-01 挑战传播:状态代码错误“404”,预期为“200”

曹昊焱
2023-03-14

我正试图从GKE重新部署到Digital Ocean。我遇到了一个问题,来自letsencrypt的挑战。我相信K8s告诉我找不到路线。letsencrypt试图完成挑战并失败的两个主机名/域是SendGrid使用的CNAMES。我真的不知道从哪里开始故障排除,我的谷歌功能让我失望。

Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  acme.cert-manager.io/v1alpha2
Kind:         Challenge
Metadata:
  Creation Timestamp:  2020-03-19T20:34:04Z
  Finalizers:
    finalizer.acme.cert-manager.io
  Generation:  1
  Owner References:
    API Version:           acme.cert-manager.io/v1alpha2
    Block Owner Deletion:  true
    Controller:            true
    Kind:                  Order
    Name:                  letsencrypt-certs-80407504-346698183
    UID:                   84ab9399-3a61-462e-a1c5-0831bd451a36
  Resource Version:        37060
  Self Link:               /apis/acme.cert-manager.io/v1alpha2/namespaces/default/challenges/letsencrypt-certs-80407504-346698183-813483524
  UID:                     ca14d996-3ecf-4dd8-8c53-057af7ae2b27
Spec:
  Authz URL:  https://acme-v02.api.letsencrypt.org/acme/authz-v3/3449670327
  Dns Name:   7502121.secodify.com
  Issuer Ref:
    Group:  cert-manager.io
    Kind:   ClusterIssuer
    Name:   letsencrypt-prod
  Key:      LiAawBR0bFRQfb2oXrvvNhph3ehQ-35lXJKkpjqgqb0.uWH4RnJfcABYba9T5b-QjoYnIw53rRtVhzsRIHIh39Y
  Solver:
    http01:
      Ingress:
        Class:  nginx
  Token:        LiAawBR0bFRQfb2oXrvvNhph3ehQ-35lXJKkpjqgqb0
  Type:         http-01
  URL:          https://acme-v02.api.letsencrypt.org/acme/chall-v3/3449670327/JGayWw
  Wildcard:     false
Status:
  Presented:   true
  Processing:  true
  Reason:      Waiting for http-01 challenge propagation: wrong status code '404', expected '200'
  State:       pending
Events:        <none>

我的配置图如下所示:

--- 
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  nginx.conf: |
    events {
      worker_connections  1024;
    }
    http {
      server {
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        listen 8080;
        server_name localhost;
        location ^~ /.well-known/acme-challenge/ {
          default_type "text/plain";
          rewrite /.well-known/acme-challenge/(.*) /$1 break;
        }
        location /static/ {
          autoindex on;    
          alias /code/core/static/; 
          include /etc/nginx/mime.types;
        }
        location = /favicon.ico {
        access_log off;
        log_not_found off;
        }
        location / {
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_pass http://127.0.0.1:8080/;
        }
      }
    }
---```

共有3个答案

孟晨朗
2023-03-14

我在使用Traefik的K3S上也遇到了同样的错误。原因是DNS和端口转发。CertManager在联系lets加密之前测试自己。如果我使用Ngin x作为路由器,我会得到同样的错误。

我有:

  • 树莓皮
  • 运行Kubernetes
  • 在我的“DMZ”中
  • 通过端口转发到路由器上的端口80/443提供访问

我在域提供商的 DNS 服务器中设置了几条 A 记录:

  • 外部 https://mypi.example.com 解析到我的路由器,并通过我的树莓派提供的端口转发。
  • 在我的DMS中,https://mypi.exampe.com 仍然为路由器的管理网站提供服务

CertManager调用我的路由器来测试它在Raspberry Pi上的lets加密功能,而不是它自己。

这个问题通过将DNS记录添加到我的路由器的DNS服务器来解决,以便它们直接指向树莓派的内部IP地址。

答案是肯定的:

  • 我的DMZ应该更安全,路由器管理网站和内部网络不应该从Raspberry Pi访问
  • 除了更新之外,我的树莓派应该无法启动与互联网的连接。
裴心思
2023-03-14

结果是,CNAMES没有被使用。将它们从配置中删除后,我将再次执行< code > kubectl get challenges ,但它是空白的。这是因为挑战已经被处理了,我想,因此没有悬而未决的。

我还遇到了另一个问题,我忘记在kubernetes服务和部署pod之间建立关系。

在这两个问题之间,我感到困惑。

司徒捷
2023-03-14

将< code > cert manager . k8s . io/cluster-issuer 注释添加到入口配置文件中。类似问题:certmanager。

此外,您在配置地图中的服务器位置定义中存在语法错误:

 location ^~ /.well-known/acme-challenge/

请记住将重写和nginx类注释添加到入口配置文件中。

 类似资料:
  • 我开发了带有jar包装的小型spring boot应用程序。应用程序用例是,用户将登录到应用程序,它将显示欢迎页面。下面是我的代码。 主类 登录控制器类 登录。jsp welcome.jsp application.properties xml 现在,当我通过eclipse执行这个应用程序时,它工作得很好。我使用在目标文件夹中创建的maven工具构建了一个jar应用程序。我已经使用命令行从目标文件

  • 问题内容: 我有一台服务器,从同一URL返回HTTP状态代码200、201和202。在Chrome浏览器中,我已经通过“网络”调试面板确认了状态代码是否符合我的预期(即200、201或202)。我依靠该状态码来确定下一步。 我希望jQuery(1.5.2版)AJAX的回调请求设置为服务器发送的状态代码。但是,即使服务器发送的代码是201或202,状态代码也始终为200。 换句话说,无论服务器发送什

  • 我在路径“/test”中有一个无用的endpoint: 我这样测试: 但我得到一个断言错误: 预期状态代码 这发生在更多的代码中:400,500...除了200。 我用的是Spring靴。如果在运行测试时在endpoint方法中放置断点,则执行将停止,因此测试中的请求将正确完成。如果我将状态代码(在资源和测试中也是)更改为200,则测试通过。 到底发生了什么?

  • 问题内容: 我试图按照此链接中的建议将错误返回到对控制器的调用,以便客户端可以采取适当的措施。javascript通过jqueryAJAX调用控制器。仅在不将状态设置为error的情况下,我才可以重新获得Json对象。这是示例代码 如果没有设置状态码,我会得到Json。如果设置状态代码,则会返回状态代码,但不会返回Json错误对象。 更新 我想将Error对象作为JSON发送,以便可以处理ajax

  • 如何在SpringMVC中实现自定义http错误处理。 例如:我有一个urlhttp://localhost:8080/demo/canvas 它显示我的画布页面,但如果用户错过了网址并键入http://localhost:8080/demo/canva 它显示了Tomcat呈现的HTTP状态404。我希望它是自定义jsp页面。

  • 我正在Eclipse中运行tomcat 7...我得到以下错误当我运行我的html调用一个servlet来执行一个简单的计算…错误为 我的html文件是 我以前做过,但当我启动服务器时,我得到以下错误