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

时间:2021-07-29 20:00:03

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

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

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,那么当然可以解决问题,但我想创建一个自定义证书来控制续订内容。

1 个答案:

答案 0 :(得分:2)

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

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

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