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功能

)]
prat6 檢測
https通路域名 當URL前面有個小鎖頭則代表證書生效
注:
域名需要解析之後 Certificate才能建立成功,否則在describe中會有message
“Issuing certificate as Secret does not exist”
Certificate資源所在的命名空間必須和需要自簽證書的資源在同一個命名空間