天天看點

k8s自簽證書k8s自簽證書

k8s自簽證書

通過使用cert-manager來管理證書

cert-manager将確定證書有效并且是最新的,并在到期前嘗試在配置的時間續訂證書

part1.安裝CustomResourceDefinitions和cert-manager本身:

╭─[18:04:19] [email protected] ~
╰─$ 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: [email protected]
    # 用于存儲自動生成的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] [email protected] ~
╰─$ 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功能

k8s自簽證書k8s自簽證書

)]

prat6 檢測

https通路域名 當URL前面有個小鎖頭則代表證書生效
           

注:

​ 域名需要解析之後 Certificate才能建立成功,否則在describe中會有message

“Issuing certificate as Secret does not exist”

​ Certificate資源所在的命名空間必須和需要自簽證書的資源在同一個命名空間

cert-manager詳細資訊請點選這