为什么我的 "Certificate" 对象和 "Ingress" 都在创建证书?
Why my "Certificate" object and "Ingress" both are creating Certificates?
为什么我的“证书”对象和“入口”都在创建证书?
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: /
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 个证书对象,它们都指向同一个秘密。
- blog-app-crt-sec
- blog-app-crt
如何只创建 1 个证书?如果我只创建一个没有任何自定义证书的 ClusterIssuer,那当然可以解决问题,但我想创建一个自定义证书来控制续订内容。
cert-manager
中有一个名为 ingress-shim
的组件,它监视 Ingress
资源并在出现某些注释时自动为您创建 Certificate
对象。这样,您甚至不需要自己创建 Certificate 对象。
请检查您的入口定义以获取相应的 cert-manager.io
范围注释,并使用这些或手动创建的证书。我假设您在入口定义中引用了名为 blog-app-crt
的 secret。如果您不使用自动创建,这需要与证书规范中定义的内容相匹配 secretName
!
有关自动创建证书的详细信息,请查看 ingress 上的证书管理器文档:https://cert-manager.io/docs/usage/ingress/
你的情况:
- 注释
cert-manager.io/cluster-issuer
告诉 Ingress 为您的主机生成证书 (Ingress 配置上的注释在后台起着重要作用).
- 带有
kind: Certificate
的证书配置也告诉您为您的主机生成证书。
您可以在您的配置中选择其中之一。
最适合您的方法是删除 kind: Certificate
配置。
我们什么时候删除注释并使用证书?
例如,您有 a.host.com
、b.host.com
、c.host.com
并且想要生成单个证书并在多个地方使用它,即在 Ingress 或其他 TCP SSL 中配置。
为什么我的“证书”对象和“入口”都在创建证书?
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: /
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 个证书对象,它们都指向同一个秘密。
- blog-app-crt-sec
- blog-app-crt
如何只创建 1 个证书?如果我只创建一个没有任何自定义证书的 ClusterIssuer,那当然可以解决问题,但我想创建一个自定义证书来控制续订内容。
cert-manager
中有一个名为 ingress-shim
的组件,它监视 Ingress
资源并在出现某些注释时自动为您创建 Certificate
对象。这样,您甚至不需要自己创建 Certificate 对象。
请检查您的入口定义以获取相应的 cert-manager.io
范围注释,并使用这些或手动创建的证书。我假设您在入口定义中引用了名为 blog-app-crt
的 secret。如果您不使用自动创建,这需要与证书规范中定义的内容相匹配 secretName
!
有关自动创建证书的详细信息,请查看 ingress 上的证书管理器文档:https://cert-manager.io/docs/usage/ingress/
你的情况:
- 注释
cert-manager.io/cluster-issuer
告诉 Ingress 为您的主机生成证书 (Ingress 配置上的注释在后台起着重要作用). - 带有
kind: Certificate
的证书配置也告诉您为您的主机生成证书。
您可以在您的配置中选择其中之一。
最适合您的方法是删除 kind: Certificate
配置。
我们什么时候删除注释并使用证书?
例如,您有 a.host.com
、b.host.com
、c.host.com
并且想要生成单个证书并在多个地方使用它,即在 Ingress 或其他 TCP SSL 中配置。