【问题标题】:Waiting for http-01 challenge propagation: failed to perform self timed out等待 http-01 质询传播:未能执行自超时
【发布时间】:2020-07-06 09:57:32
【问题描述】:

我设置了一个 kubernetes 集群,当前有两个节点,metallb 作为负载均衡器。

目前我想使用 Ingress 并通过 ssl 保护它。为此,我决定将 nginx ingress 与 cert-manager 一起使用,并在教程结束后将其放在他们的网站上。

但现在我收到错误“等待 http-01 质询传播:无法执行自检 GET 请求'http://example.....zone/.well-known/acme-challenge/A5lFUj69fDccpXlvlyVw9-ekATEjt_-DKiJUzJSafxs':获取“http://example.....zone/.well-known/acme-challenge/A5lFUj69fDccpXlvlyVw9-ekATEjt_-DKiJUzJSafxs”:拨打 tcp 94.130.150.125:80:连接:连接计时出去 "

我当前的 ClusterIssuer 如下所示:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
 name: letsencrypt-prod
 namespace: cert-manager
spec:
 acme:
   # The ACME server URL
   server: https://acme-v02.api.letsencrypt.org/directory
   # Email address used for ACME registration
   email: letsencrypt@mymail.de
   # Name of a secret used to store the ACME account private key
   privateKeySecretRef:
     name: letsencrypt-prod
   # Enable the HTTP-01 challenge provider
   solvers:
   - http01:
       ingress:
         class:  nginx

我正在尝试自动提供证书

---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: web-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    cert-manager.io/acme-challenge-type: http01
spec:
  tls:
  - hosts:
    - example.....zone
    secretName: example-...-zone-tls
  rules:
  - host: example.....zone
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80

手动我可以完美到达任何地址。

【问题讨论】:

  • 只有自检失败?

标签: kubernetes cert-manager metallb


【解决方案1】:

您收到的错误消息可能意味着各种各样的问题。但是,您可以检查一些事项来修复它:

  1. 删除入口、证书和证书管理器。之后将它们全部添加回来以确保它安装干净。有时,过时的证书或不良/多入口路径可能是问题所在。

  2. 确保您的流量允许 HTTP 或具有带有可信证书的 HTTPS。

  3. 检查负载均衡器的发夹模式并确保其正常工作。

  4. 在 Ingress 规则中添加:nginx.ingress.kubernetes.io/ssl-redirect: "false" 注释。稍等片刻,看看是否会创建有效的证书。

  5. 仅限 GKE:添加此 Ingress 注释:certmanager.k8s.io/acme-http01-edit-in-place: "true"

如果有帮助,请告诉我。

【讨论】:

    【解决方案2】:

    这个对我有用。

    ingress-nginx 服务中更改LoadBalancer

    添加/更改externalTrafficPolicy: Cluster

    原因是,带有证书颁发者的 pod 与负载均衡器在不同的节点上结束,因此它无法通过入口与自己对话。

    下面是来自https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.26.1/deploy/static/provider/cloud-generic.yaml的完整块

    kind: Service
    apiVersion: v1
    metadata:
      name: ingress-nginx
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    spec:
      #CHANGE/ADD THIS
      externalTrafficPolicy: Cluster
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
      ports:
        - name: http
          port: 80
          targetPort: http
        - name: https
          port: 443
          targetPort: https
    
    ---
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2020-07-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多