说明

  • 文章里用的不是集群签发(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,存在时间比较短(用完就销毁),如果发生错误就会一直存在
在这里插入图片描述

Logo

开源、云原生的融合云平台

更多推荐