k8s自签证书

通过使用cert-manager来管理证书

cert-manager将确保证书有效并且是最新的,并在到期前尝试在配置的时间续订证书

part1.安装CustomResourceDefinitions和cert-manager本身:
╭─[18:04:19] yup@YP-7-15 ~
╰─$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.2.0/cert-manager.yaml
part2.部分资源概述:
1.发行人(代表证书颁发机构) Issuer(命名空间级别)/ClusterIssuer(集群级别)  

2.X.509证书Certificate  它引用Issuer和ClusterIssuer来确定将接受证书请求的内容。成功后生成的密钥对会保存在该命名空间下的secret中

3.证书请求CertificateRequest 成功发行后,将根据证书签名请求返回已签名的证书,自动生成 不需要人为去管理
part3.yaml资源清单
00-create-ClusterIssuer.yaml
# 创建一个证书发行人
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: yup-clusterissuer
spec:
  # ACME配置这个颁发者与RFC8555 (ACME)服务器通信,以获取签名的x509证书。
  acme:
    # Email”是需要与ACME帐户关联的邮箱地址。此字段是可选的,当您的帐户或证书有问题时,它将用于与您联系
    email: yupeng@q1.com
    # 用于存储自动生成的ACME帐户私钥
    privateKeySecretRef:
      name: yup-clusterissuer-key
    # 2021年1月11日之后颁发的新证书需要使用新的CA根目录 需要指定preferredChain参数
    # 而不在使用https://acme-staging-v02.api.letsencrypt.org/directory
    server: https://acme-v02.api.letsencrypt.org/directory
    preferredChain: "ISRG Root X1"
    
    # server: https://acme-v02.api.letsencrypt.org/directory
    # preferredChain: "DST Root CA X3"
  
    
    # 为了从ACME服务器获取证书,必须提供求解器配置
    solvers:
    - http01:
       ingress:
         class: nginx
01-create-certificare.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata: 
  name: lianyun-php-cert
  namespace: ssjl-lianyun-php
spec:
  secretName: lianyun-php-cert-tls
  # 该格式不允许d(days)后缀。您必须使用指定这些值s,m和h后缀来代替
  duration: 2160h # 90d 有效期
  renewBefore: 360h # 15d 到期前15天进行续订
  subject:
    # 证书上要使用的组织
    organizations:
    - jetstack
  # DNSNames是要在证书上设置的DNS subjectAltNames的列表 域名需要解析之后 Certificate才能创建成功
  # 否则会报错 Issuing certificate as Secret does not exist
  dnsNames:
  - accessly.kairong5.com
  
  #IssuerRef是对该证书颁发者的引用。如果未设置“kind”字段,或将其设置为“Issuer”,则将使用与证书同名的名称空间中的颁发者资源。如果“kind”字段设置为“ClusterIssuer”,则将使用具有提供名称的ClusterIssuer。
  issuerRef:
    name: yup-clusterissuer
    kind: ClusterIssuer
    group: cert-manager.io
  privateKey:
    algorithm: RSA
    encoding: PKCS1
    size: 2048
part4 查看相关资源
╭─[18:20:48] yup@YP-7-15 ~
╰─$ kubectl get certificaterequests.cert-manager.io,certificate,secret,ClusterIssuer -n ssjl-lianyun-php
NAME                                                        READY   AGE
certificaterequest.cert-manager.io/lianyun-php-cert-tw6cx   True    57m

NAME                                           READY   SECRET                 AGE
certificate.cert-manager.io/lianyun-php-cert   True    lianyun-php-cert-tls   57m

NAME                                                     TYPE                                  DATA   AGE
secret/acr-credential-0cd66774c2e1635329078c8ad94a7d92   kubernetes.io/dockerconfigjson        1      13d
secret/acr-credential-518dfd1883737c2a6bde99ed6fee583c   kubernetes.io/dockerconfigjson        1      13d
secret/default-token-2r8lz                               kubernetes.io/service-account-token   3      13d
secret/docker-secret                                     kubernetes.io/dockerconfigjson        1      13d
secret/lianyun-php-cert-tls                              kubernetes.io/tls                     2      56m

NAME                                              READY   AGE
clusterissuer.cert-manager.io/yup-clusterissuer   True    57m
part5 在阿里云控制台上,给相应的域名开启TLS功能

在这里插入图片描述
)]

prat6 检测
https访问域名 当URL前面有个小锁头则代表证书生效
注:

​ 域名需要解析之后 Certificate才能创建成功,否则在describe中会有message“Issuing certificate as Secret does not exist”

​ Certificate资源所在的命名空间必须和需要自签证书的资源在同一个命名空间

cert-manager详细信息请点击这
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐