一、简介
cert-manager是Kubernetes的一个附加组件,用于自动管理和发布来自不同发布源的TLS证书。cert-manager可以在证书将要过期的时间段内,定期更新证书,以保证证书的长期持久有效。它基于kube-lego而工作,并且具有kube-cert-manager的一些功能。Github项目站点点击 这里 查看,官方站点点击 这里 查看。
二、部署ingress-nginx-controller
在部署cert-manager演示之前,我们需要先通过ingress-nginx部署一个web网页示例来进行直观的演示,ingress-nginx的作用是对集群的流量入口进行管理。
1.Helm部署方式
通过Helm的方式来部署ingress-nginx-controller,参考官方文档点击 这里
2.Manifests部署方式
通过yaml清单文件部署ingress-nginx-controller,参考官方文旦点击 这里
方便起见,我这里选择第二种manifests部署方式,因为我是AWS的EKS平台,故选择对应的aws安装选项(点 这里 直达)。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.46.0/deploy/static/provider/aws/deploy.yaml
三、部署应用
这里以一个流行的服务kuard作为示例进行演示,清单文件(kuard.yaml)内容如下:
---
apiVersion: v1
kind: Service
metadata:
name: kuard
spec:
ports:
- port: 80
targetPort: 8080
protocol: TCP
selector:
app: kuard
---
apiVersion: apps/v1 kind: Deployment metadata: name: kuard spec: selector: matchLabels: app: kuard replicas: 1 template: metadata: labels: app: kuard spec: containers: - image: gcr.io/kuar-demo/kuard-amd64:1 imagePullPolicy: Always name: kuard ports: - containerPort: 8080
应用使其生效:
kubectl apply -f kuard.yaml
为kuard创建ingress,ingress(ingress.yaml)示例如下,这里需要添加正确的hosts值,根据实际需要更改即可。
注意:
- 如果创建issuer,则ingress清单列表中annotations中需要注明:cert-manager.io/issuer;
- 如果使用创建的clusterissuer,则ingress清单列表中annotations中需要注明:cert-manager.io/cluster-issuer:
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: kuard
annotations:
kubernetes.io/ingress.class: "nginx"
#cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- buard.ctrix.bciadopt.com
secretName: devops-tls
rules:
- host: buard.trix.bciadopt.com
http:
paths:
- path: /
backend:
serviceName: kuard
servicePort: 80
使其应用生效
kubectl apply -f ingress-kuard.yaml
此时可以通过浏览器访问ingress里面host配置的地址,如下可以看到https的报错”Not secure:your connection to this sit isn’t secure”,这就需要我们配置cert-manager来应用ssl协议,解决这个问题。
四、部署cert-manager
cert-manager的部署方式可以点击 这里 参考官方文档,同样有Helm和manifests清单文件两种部署方式,根据自己喜好进行选择,我这里同样还是选择manifests文件作为演示 (喜欢helm部署方式的到官方网站参考官方部署方式即可)。
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.3.1/cert-manager.yaml
部署完可以验证cert-manager是否正常运行:
kubectl get pods --namespace cert-manager
五、配置Let’s Encrypt
1.Let’s Encrypt是一个免费为网站提供https证书签发的机构,详情可以点击 这里 从官方网站了解更多内容。官方文档介绍了两种配置方式,一种是测试,一种是生产,这里我们直接以生产方式进行部署和配置。
您暂时无权查看此隐藏内容!
cert-manager将会读取annotation的字段,自动生成证书,查看证书
# kubectl get certificate -A
NAMESPACE NAME READY SECRET AGE
default kuard True kuard 7m21s
七、验证
重新打开我们配置host的网址,显示如下,https正常显示。
相关文档:
- Using SSL certificates from Let’s Encrypt in your Kubernetes Ingress via cert-manager
-
Acquire SSL Certificates In Kubernetes From Let’s Encrypt With Cert-Manager
-
How to Set Up an Nginx Ingress with Cert-Manager on DigitalOcean Kubernetes
- Certificate issuance with LetsEncrypt.org
说明:
如上配置内容,需要基于k8s的nginx ingress来实现。
如果需要在用istio做集群流量管理的集群中配置Let’sEncrypt证书的话,参考如下:
Kubernetes/K8S基础使用方法总结【二十七】——Istio通过cert-manager配置Let’sEncrypt证书
评论前必须登录!
注册