kubernetes中cert-manager使用http-01方式生成https证书
说明文章里用不用集群签发,但是同理提前创建需要https的namespace采用http-01方式生成https证书,所以域名可以填写子域名,但是不能填写泛域名提前把要解析的域名映射解析到集群所在服务器上如果有安全组需要开放80端口,CA机构只能通过80端口验证token(域名是否属于你)可以用项目网关,不用集群网关这样有一个项目专门生成证书,然后复制到其他项目使用(本文用集群网关测试)运行过程中
说明
- 文章里用的不是集群签发(ClusterIssuer),区别不大(Issuer)
- 提前创建需要https的namespace
- 采用http-01方式生成https证书,所以域名可以填写子域名,但是不能填写泛域名
- 提前把要解析的域名映射解析到集群所在服务器上
- 如果有安全组需要开放80端口,CA机构只能通过80端口验证token(域名是否属于你)
- 可以用项目网关,不用集群网关这样有一个项目专门生成证书,然后复制到其他项目使用(本文用集群网关测试)
- 运行过程中自动产生的ingress和pod,会在证书生成后自动关闭消失。
安装cert-manager
- https://cert-manager.io/docs/installation
- 可以查看是否安装成功如下图
创建 Issuer (issuer.yaml)
- class : nginx (会自动创建类型为nginx的ingress,用户CA机构访问域名验证token)
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-staging
#需要https的项目的工作空间
namespace: test-cert
spec:
acme:
#注意不要直接复制官网地址,一个地址用于生成测试证书,浏览器会有警告提示
# https://acme-staging-v02.api.letsencrypt.org/directory
server: https://acme-v02.api.letsencrypt.org/directory
#改为自己的邮箱
email: *******@qq.com
privateKeySecretRef:
# 会在配置文件种
name: letsencrypt-staging
solvers:
- http01:
ingress:
class: nginx
-
两个server地址不同的区别,默认的url生成证书用于测试环境,浏览器访问会有安全警告(可以https方式)
-
两个链接生成证书访问区别(测试地址,有浏览器安全警告)
-
正式生产地址(没有浏览器警告)
运行Issuer
#创建运行
kubectl apply -f issuer.yaml
#查看状态
kubectl get Issuer -n test-cert
#查看错误信息
kubectl describe Issuer -n test-cert
- 状态为true时代表成功
- 运行成功后工作工作空间下会出现一个Secret类型的配置文件:letsencrypt-staging
开放集群网关或者项目网关80端口(不影响已经有的ingress和nodeport)
-
可以通过其他方式开放istio , geteway api , ingress (本文章只讲述ingress)
-
因为ingress也是以pod方式实现, 又因为kubernetes默认的端口范围:30000-32767,所以ingress端口范围也是这个,所以无法使用80端口
-
直接修改ingress的nodeport的80端口会提示
-
修改 /etc/kubernetes/manifests/kube-apiserver.yaml 增加配置 - --service-node-port-range=79-32767
-
修改后不用操作会自动生效(需要等1分钟)
-
如果未生效则如下操作
-
因为ingress是以nodeport方式暴露的,所以这时候就可以修改nodeport端口,改为80
-
找到并编辑yaml后点击重新创建
创建Certificate(certificate.yaml)
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-com
namespace: test-cert
spec:
#生成后的证书名称 ,可以本项目用,也可以复制到其他地方
secretName: ingress-tls
issuerRef:
# 关联上面的issuer
name: letsencrypt-staging
dnsNames:
#需要证书的域名,可以写多个
- xxx.xxx.cn
运行Certificate
kubectl apply -f certificate.yaml
#查看状态
kubectl get Certificate-n test-cert
#查看错误信息
kubectl describe Certificate-n test-cert
#深查看深层错误原因
kubectl describe CertificateRequest -n test-cert
#深查看更深层错误原因
kubectl describe challenges -n test-cert
- 状态为true时代表成功
- 成功后会出现证书文件
- 有证书后就可以随便创建ingress使用
其他
#删除certificate
kubectl delete -f certificate.yaml
#删除issuer
kubectl delete -f issuer.yaml
删除后可以重新创建
如果出现:Waiting for HTTP-01 challenge 异常基本就是端口错误
创建过程中cert-manager会自动创建ingress,存在时间比较短(用完就销毁),如果发生错误就会一直存在
更多推荐
所有评论(0)