快轉到主要內容

Cert Manager in Kubernetes

·1 分鐘
Ben Lai
作者
Ben Lai
畢業後,進入 devops 領域。目前擔任 SRE 工程師,專注於系統可靠性和自動化。喜歡探索新技術,並致力於提升系統性能和穩定性。
目錄

🔖前言
#

之前有稍微了解過 cert-manager,最近公司服務壞掉了需要修好它,順便就來寫一篇文章紀錄一下。

❓什麼是 Cert Manager
#

Cert Manager 是一個 Kubernetes 的原生資源管理工具,主要用來自動化管理和發放 TLS/SSL 憑證。它可以與多種憑證頒發機構(CA)集成,如 Let’s Encrypt、HashiCorp Vault 等,並且能夠自動續期憑證,確保應用程序的安全通信。

⚙️主要功能
#

  1. Cert Manager 會透過設定 Cluster Issuer、Issuer 來決定要使用哪一個 CA 來發放憑證,還有要管理的域名及驗證的方式。

    Cluster Issuer 的作用範圍是整個 Kubernetes 叢集,而 Issuer 的作用範圍則是單一命名空間。

  2. Certificate 是 Cert Manager 的核心資源,用來定義需要管理的憑證。它會指定要使用的 issuer、域名、密鑰等資訊。

  3. 設定完成之後,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 沒有自動續期呢?發生了什麼錯誤就是我們要去調查的重點。

  1. 首先從流程圖可以知道,cert-manager 要更新 certificate 的時候會先建立一個 Certificate Request,可以從 describe 觀察到 event 顯示 Referenced ClusterIssuer not found,表示找不到對應的 ClusterIssuer。

    cert-manager event
  2. 接著我們去查看 ClusterIssuer,可以發現 “letsencrypt” 這個 ClusterIssuer 根本不存在。

    圖的話忘記截了,總之就是找不到這個 ClusterIssuer。🤣

    因為 helm release 的 values 設定裡是存在的,所以使用 apply 也不會再建立一次。所以用 helmfile sync 重新部署一次。

    完成之後,certificate request 就可以成功透過 ClusterIssuer 來向 Let’s Encrypt 申請憑證了。

📚參考文章
#

相關文章