ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Cert manager自动签发/更新证书

2021-01-14 19:58:11  阅读:356  来源: 互联网

标签:tls kubectl acme 签发 cert manager io Cert


Cert manager使用的是免费证书Let's Encrypt,并支持在证书过期时自动更新。

本文 Cert manager使用版本:v0.12.0

官方文档:https://cert-manager.io/docs

添加helm源

注意stable/cert-manager已经过时不再维护了,转到jetstack/cert-manager

helm repo add jetstack https://charts.jetstack.io

 更新源

helm repo update

创建CRDs

 
  1. kubectl apply --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.12/deploy/manifests/00-crds.yaml

  2.  
  3. kubectl create -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.12/deploy/manifests/00-crds.yaml

安装

这里设置了两个默认值

--set ingressShim.defaultIssuerName=letsencrypt-prod

--set ingressShim.defaultIssuerKind=ClusterIssuer

--set ingressShim.defaultIssuerGroup=cert-manager.io

用于在后续创建Ingress时,配合annotations

kubernetes.io/tls-acme: "true"
kubernetes.io/ingress.class: "nginx"

实现自动创建证书。

helm install --name cert-manager --namespace cert-manager --set ingressShim.defaultIssuerName=letsencrypt-prod --set ingressShim.defaultIssuerKind=ClusterIssuer --set ingressShim.defaultIssuerGroup=cert-manager.io jetstack/cert-manager

查看安装是否完成

 
  1. [root@k8s-master cert]# kubectl get pod -n cert-manager

  2. NAME READY STATUS RESTARTS AGE

  3. cert-manager-5cd477f7bb-fxpvf 1/1 Running 0 22m

  4. cert-manager-cainjector-df4dc78cd-l527b 1/1 Running 0 22m

  5. cert-manager-webhook-5f78ff89bc-ggvqt 1/1 Running 0 22m

 
  1. [root@k8s-master cert]# kubectl get crd | grep cert-manager

  2. certificaterequests.cert-manager.io 2020-01-07T01:38:32Z

  3. certificates.cert-manager.io 2020-01-07T01:38:32Z

  4. challenges.acme.cert-manager.io 2020-01-07T01:38:32Z

  5. clusterissuers.cert-manager.io 2020-01-07T01:38:32Z

  6. issuers.cert-manager.io 2020-01-07T01:38:32Z

  7. orders.acme.cert-manager.io 2020-01-07T01:38:32Z

创建默认签发机构(官方文档)

刚刚安装时已经指定了默认签发类型是ClusterIssuer ,签发机构名称是letsencrypt-prod ,但是我们还没有创建,现在需要创建cluster-issuer.yaml。 

cert-manager 给我们提供了 Issuer 和 ClusterIssuer 这两种用于创建签发机构的自定义资源对象,Issuer 只能用来签发自己所在 namespace 下的证书,ClusterIssuer 可以签发任意 namespace 下的证书.

 
  1. apiVersion: cert-manager.io/v1alpha2

  2. kind: ClusterIssuer

  3. metadata:

  4. name: letsencrypt-prod

  5. spec:

  6. acme:

  7. server: https://acme-v02.api.letsencrypt.org/directory

  8. email: 1154365135@qq.com

  9. privateKeySecretRef:

  10. name: letsencrypt-prod

  11. solvers:

  12. - http01:

  13. ingress:

  14. class: nginx

上述配置:参考链接

  • metadata.name 是我们创建的签发机构的名称,后面我们创建证书的时候会引用它
  • spec.acme.email 是你自己的邮箱,证书快过期的时候会有邮件提醒,不过 cert-manager 会利用 acme 协议自动给我们重新颁发证书来续期
  • spec.acme.server 是 acme 协议的服务端,我们这里用 Let’s Encrypt,这个地址就写死成这样就行
  • spec.acme.privateKeySecretRef 指示此签发机构的私钥将要存储到哪个 Secret 对象中,名称不重要
  • spec.acme.http01 这里指示签发机构使用 HTTP-01 的方式进行 acme 协议 (还可以用 DNS 方式,acme 协议的目的是证明这台机器和域名都是属于你的,然后才准许给你颁发证书)
kubectl create -f cluster-issuer.yaml
kubectl get clusterissuer

配置ingress

 
  1. apiVersion: extensions/v1beta1

  2. kind: Ingress

  3. metadata:

  4. annotations:

  5. kubernetes.io/ingress.class: nginx

  6. kubernetes.io/tls-acme: "true"

  7. nginx.ingress.kubernetes.io/backend-protocol: HTTPS

  8. nginx.ingress.kubernetes.io/ssl-redirect: "true"

  9. labels:

  10. app: kubernetes-dashboard

  11. chart: kubernetes-dashboard-1.10.0

  12. heritage: Tiller

  13. release: kubernetes-dashboard

  14. name: kubernetes-dashboard

  15. namespace: kube-system

  16. spec:

  17. rules:

  18. - host: k8s.deri.com

  19. http:

  20. paths:

  21. - backend:

  22. serviceName: kubernetes-dashboard

  23. servicePort: 443

  24. path: /

  25. tls:

  26. - hosts:

  27. - k8s.deri.com

  28. secretName: deri-com-tls-secret-cc

由于添加了annotations kubernetes.io/tls-acme: "true",tls这个secret会自动创建。

卸载

 
  1. helm delete --purge cert-manager

  2. kubectl delete -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.12/deploy/manifests/00-crds.yaml

Check

 
  1. [root@master ~]# kubectl get certificate -n gateway

  2. NAME READY SECRET AGE

  3. consul-tls-test True consul-tls-test 19m

  4.  
  5. [root@master ~]# kubectl get clusterissuer

  6. NAME READY AGE

  7. letsencrypt-prod True 157m

  8.  
  9. [root@master ~]# kubectl get certificate -n gateway

  10. NAME READY SECRET AGE

  11. consul-tls-test True consul-tls-test 19m

  12.  
  13. [root@master ~]# kubectl get Order -n gateway

  14. NAME STATE AGE

  15. consul-tls-test-3546184973-1845474898 valid 20m

  16.  
  17. [root@master ~]# kubectl get CertificateRequest -n gateway

  18. NAME READY AGE

  19. consul-tls-test-3546184973 True 27m

  20.  
  21. [root@master ~]# kubectl get secret -ngateway

  22. NAME TYPE DATA AGE

  23. consul-tls-test kubernetes.io/tls 3 29m

 

标签:tls,kubectl,acme,签发,cert,manager,io,Cert
来源: https://blog.csdn.net/hellozhxy/article/details/112632243

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有