为什么我的“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 个证书?如果我只创建一个没有任何自定义证书的 ClusterIssuer,那么当然可以解决问题,但我想创建一个自定义证书来控制续订内容。
答案 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/