在带有DigitalOcean的Kubernetes集群上为My Nginx-Inress生成通配符证书 [英] Generate wildcard certificate on Kubernetes cluster with DigitalOcean for my Nginx-Ingress

查看:17
本文介绍了在带有DigitalOcean的Kubernetes集群上为My Nginx-Inress生成通配符证书的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我按照这本DigitalOcean指南https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes,发现了一些很奇怪的事情。当我在主机名中设置通配符时,letsencrypt颁发新证书失败。而当我只设置定义的子域时,它会完美地工作。

这是我对域及其API的&Q;工作&Q;配置(此配置工作正常):

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-staging"
spec:
  tls:
  - hosts:
    - example.com
    - api.example.com
    secretName: my-tls
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: example-frontend
          servicePort: 80
  - host: api.example.com
    http:
      paths:
      - backend:
          serviceName: example-api
          servicePort: 80

相反,这是我尝试颁发的通配符证书,但这不能留下消息。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-staging"
spec:
  tls:
  - hosts:
    - example.com
    - *.example.com
    secretName: my-tls
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: example-frontend
          servicePort: 80
  - host: api.example.com
    http:
      paths:
      - backend:
          serviceName: example-api
          servicePort: 80
      

唯一的区别是主机的第二行。有没有我不知道的微不足道的众所周知的解决方案?我对Kubernetes是新手,但对DevOps不是。

推荐答案

使用cert-manager(letsencrypt)生成通配符证书需要使用DNS-01质询而不是HTTP-01used in the link from the question

我们加密是否颁发通配符证书?

是的。通配符发布必须通过使用DNS-01质询的ACMEv2完成。有关更多技术信息,请参阅this post

有关于使用cert-manager生成wildcard证书的文档:


从DigialOcean的角度来看,有一个专门针对它的指南:

此提供程序使用KubernetesSecret资源来工作。在以下内容中 例如,Secret必须命名为digitalocean-dns并具有 其中包含令牌的子密钥access-token。例如:

apiVersion: v1
kind: Secret
metadata:
  name: digitalocean-dns
  namespace: cert-manager
data:
  # insert your DO access token here
  access-token: "base64 encoded access-token here"

访问令牌必须具有写访问权限。

要创建个人访问令牌,请参阅DigitalOcean documentation

便捷直接链接:https://cloud.digitalocean.com/account/api/tokens/new

若要将访问令牌编码为Base64,您可以使用以下命令

echo -n 'your-access-token' | base64 -w 0
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: example-issuer
spec:
  acme:
    ...
    solvers:
    - dns01:
        digitalocean:
          tokenSecretRef:
            name: digitalocean-dns
            key: access-token

--Cert-manager.io: Docs: Configuration: ACME: DNS-01: Digitalocean


我估计这些额外的资源也会有所帮助:

这篇关于在带有DigitalOcean的Kubernetes集群上为My Nginx-Inress生成通配符证书的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆