如果你問一位經驗豐富、睿智的工程師他對 cert-manager 的看法以及為什麼每個人都使用它,那麼專家會嘆息,自信地擁抱他並疲倦地說:“每個人都使用它,因為沒有明智的選擇。 我們的老鼠會哭、會刺,但會繼續與這種仙人掌共存。 我們為什麼愛? 因為它有效。 我們為什麼不愛? 因為使用新功能的新版本不斷出現。 而且你必須一遍又一遍地更新集群。 舊版本停止工作,因為有一個陰謀和一個偉大的神秘薩滿教。
但開發商聲稱 證書管理器 1.0 一切都會改變。
我們會相信嗎?
Cert-manager 是原生的 Kubernetes 證書管理控制器。 它可用於頒發來自各種來源的證書:Let's Encrypt、HashiCorp Vault、Venafi、簽名和自簽名密鑰對。 它還允許您在過期日期之前使密鑰保持最新,並嘗試在證書過期前的指定時間自動續訂證書。 Cert-manager 基於 kube-lego 並且還使用了其他類似項目(例如 kube-cert-manager)的一些技巧。
發行說明
在 1.0 版中,我們為 cert-manager 項目三年的開發打上了信任的標記。 在此期間,它在功能和穩定性方面取得了顯著發展,但最重要的是在社區方面。 今天,我們看到許多人使用它來保護他們的 Kubernetes 集群並將其部署到生態系統的各個部分。 在最近的 16 個版本中修復了很多錯誤。 而該破的就破了。 使用 API 的幾次訪問改進了它與用戶的交互。 我們已經解決了 GitHub 上的 1500 個問題以及來自 253 個社區成員的更多拉取請求。
隨著1.0的發布,我們正式宣布cert-manager是一個成熟的項目。 我們還承諾保持我們的 API 兼容 v1
.
非常感謝這三年來幫助我們製作 cert-manager 的每一個人! 讓 1.0 版成為許多重大事件中的第一個。
1.0 版是一個穩定的版本,有幾個優先領域:
-
v1
應用程序接口; -
團隊
kubectl cert-manager status
, 幫助分析問題; -
使用最新穩定的 Kubernetes API;
-
改進的日誌記錄;
-
ACME 改進。
升級前一定要閱讀升級說明。
API v1
版本 v0.16 使用 API v1beta1
. 這增加了一些結構上的變化,也改進了 API 字段文檔。 版本 1.0 在此基礎上使用 API v1
. 這個API是我們第一個穩定的API,同時我們已經給出了兼容性保證,但是隨著API v1
我們承諾在未來幾年保持兼容性。
所做的更改(注意:我們的轉換工具會為您處理一切):
證書:
-
emailSANs
現在叫emailAddresses
-
uriSANs
-uris
這些更改增加了與其他 SAN 的兼容性(主題替代名稱, 約譯員),以及 Go API。 我們將從我們的 API 中刪除該術語。
更新
如果您使用的是 Kubernetes 1.16+,轉換 webhook 將允許您同時無縫地使用 API 版本 v1alpha2
, v1alpha3
, v1beta1
и v1
. 有了這些,您將能夠使用新版本的 API,而無需更改或重新部署您的舊資源。 我們強烈建議將您的清單升級到 API v1
,因為以前的版本很快就會被棄用。 用戶 legacy
證書管理器的版本仍然只能訪問 v1
,可以找到升級步驟
kubectl 證書管理器狀態命令
隨著我們對擴展的新改進 kubectl
調查與未頒發證書有關的問題變得更加容易。 kubectl cert-manager status
現在提供了有關證書的更多信息,還顯示了證書頒發階段。
安裝擴展後,您可以運行 kubectl cert-manager status certificate <имя-сертификата>
,如果使用來自 ACME 的證書,它將查找具有給定名稱的證書和任何相關資源,例如 CertificateRequest、Secret、Issuer、Order 和 Challenges。
調試尚未準備好的證書的示例:
$ kubectl cert-manager status certificate acme-certificate
Name: acme-certificate
Namespace: default
Created at: 2020-08-21T16:44:13+02:00
Conditions:
Ready: False, Reason: DoesNotExist, Message: Issuing certificate as Secret does not exist
Issuing: True, Reason: DoesNotExist, Message: Issuing certificate as Secret does not exist
DNS Names:
- example.com
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Issuing 18m cert-manager Issuing certificate as Secret does not exist
Normal Generated 18m cert-manager Stored new private key in temporary Secret resource "acme-certificate-tr8b2"
Normal Requested 18m cert-manager Created new CertificateRequest resource "acme-certificate-qp5dm"
Issuer:
Name: acme-issuer
Kind: Issuer
Conditions:
Ready: True, Reason: ACMEAccountRegistered, Message: The ACME account was registered with the ACME server
error when finding Secret "acme-tls": secrets "acme-tls" not found
Not Before: <none>
Not After: <none>
Renewal Time: <none>
CertificateRequest:
Name: acme-certificate-qp5dm
Namespace: default
Conditions:
Ready: False, Reason: Pending, Message: Waiting on certificate issuance from order default/acme-certificate-qp5dm-1319513028: "pending"
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal OrderCreated 18m cert-manager Created Order resource default/acme-certificate-qp5dm-1319513028
Order:
Name: acme-certificate-qp5dm-1319513028
State: pending, Reason:
Authorizations:
URL: https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/97777571, Identifier: example.com, Initial State: pending, Wildcard: false
Challenges:
- Name: acme-certificate-qp5dm-1319513028-1825664779, Type: DNS-01, Token: J-lOZ39yNDQLZTtP_ZyrYojDqjutMAJOxCL1AkOEZWw, Key: U_W3gGV2KWgIUonlO2me3rvvEOTrfTb-L5s0V1TJMCw, State: pending, Reason: error getting clouddns service account: secret "clouddns-accoun" not found, Processing: true, Presented: false
該命令還可以幫助您詳細了解證書的內容。 Letsencrypt 頒發的證書的詳細示例:
$ kubectl cert-manager status certificate example
Name: example
[...]
Secret:
Name: example
Issuer Country: US
Issuer Organisation: Let's Encrypt
Issuer Common Name: Let's Encrypt Authority X3
Key Usage: Digital Signature, Key Encipherment
Extended Key Usages: Server Authentication, Client Authentication
Public Key Algorithm: RSA
Signature Algorithm: SHA256-RSA
Subject Key ID: 65081d98a9870764590829b88c53240571997862
Authority Key ID: a84a6a63047dddbae6d139b7a64565eff3a8eca1
Serial Number: 0462ffaa887ea17797e0057ca81d7ba2a6fb
Events: <none>
Not Before: 2020-06-02T04:29:56+02:00
Not After: 2020-08-31T04:29:56+02:00
Renewal Time: 2020-08-01T04:29:56+02:00
[...]
使用最新穩定的 Kubernetes API
Cert-manager 是最早實施 Kubernetes CRD 的公司之一。 這一點,以及我們對 Kubernetes 1.11 版本的支持,意味著我們需要支持遺留的 apiextensions.k8s.io/v1beta1
也適用於我們的 CRD admissionregistration.k8s.io/v1beta1
對於我們的網絡掛鉤。 它們現在已被棄用,並將在 Kubernetes 1.22 版本中刪除。 在我們的 1.0 版本中,我們現在提供全面支持 apiextensions.k8s.io/v1
и admissionregistration.k8s.io/v1
對於 Kubernetes 1.16(添加它們的地方)和更新版本。 對於之前版本的用戶,我們繼續提供支持 v1beta1
在我們的 legacy
版本。
改進的日誌記錄
在此版本中,我們將日誌庫更新為 klog/v2
,用於 Kubernetes 1.19。 我們還會審查我們撰寫的每份期刊,以確保它被分配了適當的級別。 我們以此為指導 Error
(0 級),它只打印重要錯誤,並以 Trace
(第 5 級)這將幫助您準確了解正在發生的事情。 通過此更改,如果您在運行 cert-manager 時不需要調試信息,我們會減少日誌數量。
提示:cert-manager 默認運行在 level 2 (Info
), 你可以使用 global.logLevel
在頭盔圖中。
注意:查看日誌是進行故障排除時的最後手段。 有關更多信息,請查看我們的
編者註:要了解更多關於 Kubernetes 的工作原理,從實踐教師那裡獲得寶貴的建議,以及優質的技術支持幫助,您可以參加在線強化
ACME 改進
cert-manager 最常見的用途可能與使用 ACME 從 Let's Encrypt 頒發證書有關。 1.0 版以使用社區反饋為我們的 ACME 發行者添加兩個小但重要的改進而著稱。
禁用帳戶密鑰生成
如果您大量使用 ACME 證書,您很可能在多個集群上使用同一個帳戶,因此您的證書頒發限制將適用於所有這些。 在復制中指定的秘密時,這在 cert-manager 中已經是可能的 privateKeySecretRef
. 這個用例有很多問題,因為 cert-manager 試圖提供幫助,如果找不到的話,它會很高興地創建一個新的帳戶密鑰。 這就是為什麼我們添加 disableAccountKeyGeneration
如果您將此選項設置為 true
- cert-manager 不會生成密鑰,並會警告您尚未為其提供帳戶密鑰。
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt
spec:
acme:
privateKeySecretRef:
name: example-issuer-account-key
disableAccountKeyGeneration: false
優選鏈
29 月 XNUMX 日讓我們加密 ISRG Root
. 交叉簽名證書將被替換為 Identrust
. 此更改不需要更改證書管理器設置,在此日期之後頒發的所有更新或新證書都將使用新的根 CA。
Let's Encrypt 已經使用此 CA 簽署了證書,並通過 ACME 將它們作為“備用證書鏈”提供。 在此版本的證書管理器中,可以在頒發者設置中設置對這些鏈的訪問。 在參數 preferredChain
您可以指定正在使用的 CA 的名稱,證書將通過該名稱頒發。 如果與請求匹配的 CA 證書可用,它將向您頒發證書。 請注意,這是首選選項,如果未找到任何內容,將頒發默認證書。 這將確保您在刪除 ACME 頒發者端的備用鏈後仍會續訂證書。
今天您已經可以收到由 ISRG Root
, 所以:
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
preferredChain: "ISRG Root X1"
如果你喜歡離開鏈條 IdenTrust
- 將此選項設置為 DST Root CA X3
:
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
preferredChain: "DST Root CA X3"
請注意,此根 CA 將很快被棄用,Let's Encrypt 將使此鏈保持活動狀態,直到 29 年 2021 月 XNUMX 日。
來源: www.habr.com