🔖前言#
之前有稍微了解過 cert-manager,最近公司服務壞掉了需要修好它,順便就來寫一篇文章紀錄一下。
❓什麼是 Cert Manager#
Cert Manager 是一個 Kubernetes 的原生資源管理工具,主要用來自動化管理和發放 TLS/SSL 憑證。它可以與多種憑證頒發機構(CA)集成,如 Let’s Encrypt、HashiCorp Vault 等,並且能夠自動續期憑證,確保應用程序的安全通信。
⚙️主要功能#
Cert Manager 會透過設定 Cluster Issuer、Issuer 來決定要使用哪一個 CA 來發放憑證,還有要管理的域名及驗證的方式。
Cluster Issuer 的作用範圍是整個 Kubernetes 叢集,而 Issuer 的作用範圍則是單一命名空間。
Certificate 是 Cert Manager 的核心資源,用來定義需要管理的憑證。它會指定要使用的 issuer、域名、密鑰等資訊。
設定完成之後,Cert Manager 會自動向指定的 CA 發出憑證請求,並將獲取的憑證存儲在 Kubernetes 的 Secret 中。在憑證即將過期時,Cert Manager 會自動續期,確保始終擁有有效的憑證。
📌流程圖#
flowchart manager[cert-manager] --> certificaterequest[Certificate Request] --> issuer[Issuer/ClusterIssuer] issuer --> ca[Let's Encrypt/HashiCorp Vault] ca --> certificate[Certificate] certificate --> secret[Secret] secret --> ingress[Ingress/Service]
❓遇到的問題#
透過網址訪問 API 服務時出現 SSL certificate problem: certificate has expired 的錯誤訊息,表示憑證已經過期了。那為什麼 cert-manager 沒有自動續期呢?發生了什麼錯誤就是我們要去調查的重點。
首先從流程圖可以知道,cert-manager 要更新 certificate 的時候會先建立一個 Certificate Request,可以從 describe 觀察到 event 顯示 Referenced ClusterIssuer not found,表示找不到對應的 ClusterIssuer。

接著我們去查看 ClusterIssuer,可以發現 “letsencrypt” 這個 ClusterIssuer 根本不存在。
圖的話忘記截了,總之就是找不到這個 ClusterIssuer。🤣
因為 helm release 的 values 設定裡是存在的,所以使用 apply 也不會再建立一次。所以用
helmfile sync重新部署一次。完成之後,certificate request 就可以成功透過 ClusterIssuer 來向 Let’s Encrypt 申請憑證了。












