【问题标题】:How do I test a ClusterIssuer solver?如何测试 ClusterIssuer 求解器?
【发布时间】:2020-02-13 19:48:19
【问题描述】:

我正在尝试在 DigitalOcean 上使用 LetsEncrypt 部署带有 SSL 证书的 Kubernetes 集群。我关注了these instructions,一切正常,直到 ClusterIssuer 创建挑战订单。然后我得到这个错误:

cert-manager/controller/orders "msg"="Failed to determine the list of Challenge resources needed for the Order" "error"="no configured challenge solvers can be used for this challenge" "resource_kind"="Order" "resource_name"="letsencrypt-prod-cert-458163912-1173127706"

我已经尝试过使用 http 并尝试配置 DigitalOcean 的 dns01 解析器,但都不起作用,并且出现了类似的错误。该站点通过 ip 和 dns 名称实时运行(尽管我收到了无 ssl 证书警告)。这是 ClusterIssuer 的描述:

Name:         letsencrypt-issuer
Namespace:
Labels:       app/instance=webapp
              app/managed-by=Tiller
              app/name=webapp
              app/version=0.1.0
              helm.sh/chart=webapp-0.1.0
Annotations:  cert-manager.io/cluster-issuer: letsencrypt-issuer
              kubernetes.io/ingress.class: nginx
              kubernetes.io/tls-acme: true
API Version:  cert-manager.io/v1alpha2
Kind:         ClusterIssuer
Metadata:
  Creation Timestamp:  2019-10-16T23:24:47Z
  Generation:          2
  Resource Version:    10300992
  Self Link:           /apis/cert-manager.io/v1alpha2/clusterissuers/letsencrypt-issuer
  UID:                 2ee08cd4-5781-4126-9e6d-6b9d108a1eb2
Spec:
  Acme:
    Email:  <redacted>
    Private Key Secret Ref:
      Name:  letsencrypt-prod-cert
    Server:  https://acme-v02.api.letsencrypt.org/directory
Status:
  Acme:
    Last Registered Email:  <redacted>
    Uri:                    https://acme-v02.api.letsencrypt.org/acme/acct/69503670
  Conditions:
    Last Transition Time:  2019-10-16T23:24:48Z
    Message:               The ACME account was registered with the ACME server
    Reason:                ACMEAccountRegistered
    Status:                True
    Type:                  Ready
Events:                    <none>

有没有办法查看求解器本身来验证它们的配置是否正确?有没有办法锻炼它们来证明它们有效?有没有其他方法可以诊断情况是什么?我完全被卡住了,因为似乎没有很多在线支持?

【问题讨论】:

  • 此验证必须完成最高挑战,请查看this 了解更多信息
  • @TusharMahajan 我已经看过了。唉,由于上述问题,它没有成功。值得注意的是,该页面有一个很大的“ol TODO”,上面写着“对失败的挑战进行故障排除”,这就是我来到这里的原因。 ://
  • 嗨 Nathaniel,我刚刚通过 jetstack 实现了这个 TLS 实现,但我没有使用 acme challenge,因为我的证书是在没有它的情况下颁发的,我只用 kubernetes 实现了它。我可以分享获取 TLS 加密的方法吗?
  • 我的终极挑战仅在入口规则级别得到解决。我可以分享详细信息

标签: kubernetes digital-ocean lets-encrypt


【解决方案1】:
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
 metadata:
  name: certificate-name
spec:
  secretName: tls-cert
  duration: 24h
  renewBefore: 12h
  commonName: hostname
  dnsNames:
  - hostname
  issuerRef:
    name: letsencrypt
    kind: ClusterIssuer

apiVersion: certmanager.k8s.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt
spec:
  acme:
    email: myemail@email.com
    privateKeySecretRef:
      name: letsencrypt-private-key
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
    - http01:
        ingress:
          class: nginx
      selector: {}

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    certmanager.k8s.io/acme-challenge-type: http01
    certmanager.k8s.io/cluster-issuer: letsencrypt
  name: ingress-rule
  namespace: default
spec:
  rules:
  - host: hostname
    http:
      paths:
      - backend:
          serviceName: backend-service
          servicePort: 8080
  tls:
  - hosts:
    - hostname
    secretName: tls-cert

上面引用的方法对我有用,tls-cert 是在预期的命名空间中自动生成的,密钥和证书都是。为此,您应该将 nginx 负载均衡器的 IP 指向 DNS

它对我有用,acme 挑战将得到自动测试,一旦完成,证书会将其状态从 false 更改为 true

【讨论】:

  • 你能解释一下关于nginx负载均衡器IP的最后一句话吗? “将其指向 DNS”是什么意思?
  • 在 kubernetes 中,您会将 nginx 控制器暴露给负载均衡器,并且必须将 externalIP 映射到主机名,我在一个名为 DNS 区域的服务中使用 azure 进行此操作
  • 哦,我明白了;是的,DNS 指向负载均衡器的外部端口。
  • 太棒了!这行得通;具体来说,它看起来像solver 节不正确,我需要在那里有一个http01 块,并且作为acme 的直系子级。非常感谢!!!
  • 最近 cert-manager 更新到 v.0.11 后,http01 移动到 solvers。 API 和 API 组也都发生了变化。
猜你喜欢
  • 2017-03-30
  • 2015-12-26
  • 1970-01-01
  • 2014-12-22
  • 2021-10-01
  • 2012-05-18
  • 2011-12-03
  • 2010-10-13
  • 1970-01-01
相关资源
最近更新 更多