【问题标题】:Why my "Certificate" object and "Ingress" both are creating Certificates?为什么我的“证书”对象和“入口”都在创建证书?
【发布时间】:2021-10-05 11:33:27
【问题描述】:

为什么我的“证书”对象和“入口”都在创建证书?

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: blog-app-crt
spec:
  secretName: blog-app-crt-sec
  issuerRef:
    kind: ClusterIssuer
    name: letsencrypt-prod
  commonName: blog.mydomain.com
  dnsNames:
    - blog.mydomain.com




apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    # Email address used for ACME registration
    email: myemailid@gmail.com
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      # Name of a secret used to store the ACME account private key
      name: letsencrypt-production-private-key
    # Add a single challenge solver, HTTP01 using nginx
    solvers:
    - http01:
        ingress:
          class: nginx


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx                      
    nginx.ingress.kubernetes.io/rewrite-target: /$1         
    cert-manager.io/cluster-issuer: "letsencrypt-prod"       
    nginx.ingress.kubernetes.io/ssl-redirect: 'true'        

spec:
  tls:
    - hosts:                                                
        - blog.mydomain.com
      secretName: blog-app-crt-sec                      
      
  rules:                                                    
    - host: blog.mydomain.com                                         
      http:                                                 
        paths:                                              
          - pathType: Prefix
            path: "/?(.*)"                                    
            backend:
              service:
                name: app-1-endpoint
                port: 
                  number: 5000                            
          - pathType: Prefix
            path: "/tribute/?(.*)"
            backend:
              service:
                name: app-2-endpoint
                port: 
                  number: 5001

当我创建上述对象时,它会创建 2 个证书对象,都指向同一个密钥。

  1. blog-app-crt-sec
  2. blog-app-crt

我怎样才能只创建 1 个证书?如果我只创建一个没有任何自定义证书的 ClusterIssuer,那当然可以解决问题,但我想创建一个自定义证书来控制续订。

【问题讨论】:

    标签: kubernetes ssl-certificate kubernetes-ingress cert-manager


    【解决方案1】:

    cert-manager 有一个名为 ingress-shim 的组件,它监视 Ingress 资源并在存在一些注释时自动为您创建 Certificate 对象。这样,您甚至不需要自己创建 Certificate 对象。

    请检查您的入口定义以获取相应的cert-manager.io 范围注释,并使用这些或手动创建的证书。我假设您在入口定义中引用了名为 blog-app-crt 的 secret。如果您不使用自动创建,这需要与证书规范 secretName 中定义的内容相匹配!

    有关自动创建证书的详细信息,请查看 ingress 上的 cert-manager 文档:https://cert-manager.io/docs/usage/ingress/

    【讨论】:

      【解决方案2】:

      在你的情况下:

      1. 注解cert-manager.io/cluster-issuer 告诉 Ingress 用于为您的主机生成证书(Ingress 配置上的注解在后台起着重要作用)。
      2. 带有kind: Certificate 的证书配置也告诉您为您的主机生成证书。

      您可以在配置中选择其中之一。

      最适合您的是放弃 kind: Certificate 配置。

      我们什么时候删除注解并使用证书?

      例如,您有a.host.com、b.host.com、c.host.com,并希望生成一个证书并在多个地方使用它,即在 Ingress 或其他 TCP SSL 配置中。

      【讨论】:

        猜你喜欢
        • 2021-01-26
        • 2020-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-12
        • 2017-09-16
        • 2020-05-01
        • 2020-06-15
        相关资源
        最近更新 更多