Helm
使用 Helm 安裝
cert-manager 提供 Helm 圖表作為在 Kubernetes 和 OpenShift 上安裝的主要方法。
請務必永遠不要將 cert-manager 嵌入為其他 Helm 圖表的子圖表;cert-manager 管理您叢集中非命名空間的資源,必須小心確保它只安裝一次。
先決條件
- 安裝 Helm 3 或更高版本.
- 安裝支援版本的 Kubernetes 或 OpenShift。
- 如果您在雲端平台上使用 Kubernetes,請閱讀與 Kubernetes 平台供應商的相容性。
安裝 cert-manager
1. 新增 Helm 儲存庫
此儲存庫是唯一支援的 cert-manager 圖表來源。網路上有一些其他的鏡像和副本,但這些都是完全非官方的,可能存在安全風險。
特別值得注意的是,cert-manager 的「Helm stable 儲存庫」版本已棄用,不應使用。
helm repo add jetstack https://charts.jetstack.io --force-update
2. 安裝 cert-manager
要安裝 cert-manager Helm 圖表,請使用如下所述的Helm install 命令。
helm install \cert-manager jetstack/cert-manager \--namespace cert-manager \--create-namespace \--version v1.16.1 \--set crds.enabled=true
3. (選用)驗證安裝
部署 cert-manager 後,您可以驗證安裝。
安裝選項
完整的可用 Helm 值列表位於cert-manager 的 ArtifactHub 頁面。
下面的範例展示了如何透過覆寫預設的 Helm 值來調整 cert-manager 的安裝
helm install \cert-manager jetstack/cert-manager \--namespace cert-manager \--create-namespace \--version v1.16.1 \--set crds.enabled=true \--set prometheus.enabled=false \ # Example: disabling prometheus using a Helm parameter--set webhook.timeoutSeconds=4 # Example: changing the webhook timeout using a Helm parameter
將 cert-manager 安裝為子圖表
如果您已將 cert-manager 配置為子圖表,cert-manager 的所有元件都將安裝到您正在安裝的 helm 發佈版本的命名空間中。
在某些情況下,您可能希望指定安裝 cert-manager 的命名空間,使其與傘狀圖表的命名空間不同。
這是 Helm 和子圖表的一個已知問題,您無法為子圖表指定命名空間,大多數公共圖表透過允許使用者透過值檔案設定命名空間來解決這個問題,但這需要維護者將其新增到圖表中。
此功能現在已在 cert-manager 圖表中提供,可以在值檔案中設定,也可以透過 --set
開關設定。
使用範例
以下是一個範例 Chart.yaml
,其中 cert-manager 作為子圖表
apiVersion: v2name: example_chartdescription: A Helm chart with cert-manager as subcharttype: applicationversion: 0.1.0appVersion: "0.1.0"dependencies:- name: cert-managerversion: v1.16.1repository: https://charts.jetstack.ioalias: cert-managercondition: cert-manager.enabled
然後,您可以透過 2 種方式覆寫命名空間
- 在
Values.yaml
檔案中
cert-manager: #defined by either the name or alias of your dependency in Chart.yamlnamespace: security
- 在 helm 命令中使用
--set
helm install example example_chart \--namespace example \--create-namespace \--set cert-manager.namespace=security
以上範例會將 cert-manager 安裝到 security 命名空間中。
輸出 YAML
可以使用 Helm template 命令建立靜態 YAML 清單,而不用直接使用 Helm 安裝 cert-manager。可以透過提供旗標來覆寫預設的 Helm 值來調整此靜態清單
helm template \cert-manager jetstack/cert-manager \--namespace cert-manager \--version v1.16.1 \--set crds.enabled=true \# --set prometheus.enabled=false \ # Example: disabling prometheus using a Helm parameter> cert-manager.custom.yaml
ℹ️
helm template
命令不會輸出命名空間資源,並忽略--create-namespace
旗標。您必須確保要部署產生的 YAML 的命名空間存在。
解除安裝
警告:要解除安裝 cert-manager,您應始終使用與安裝相同的過程,但順序相反。無論 cert-manager 是從靜態清單還是 Helm 安裝的,偏離以下過程都可能導致問題和潛在的損壞狀態。請確保在解除安裝時遵循以下步驟,以防止這種情況發生。
在繼續之前,請確保已刪除使用者建立的所有 cert-manager 資源。您可以使用以下命令檢查是否有任何現有資源
kubectl get Issuers,ClusterIssuers,Certificates,CertificateRequests,Orders,Challenges --all-namespaces
刪除所有這些資源後,您就可以使用您安裝時決定的程序來解除安裝 cert-manager。
使用 Helm 解除安裝
從 helm
安裝解除安裝 cert-manager,就是在 kubectl
和 helm
上執行刪除命令,反向執行安裝過程。
$ helm uninstall cert-manager -n cert-managerThese resources were kept due to the resource policy:[CustomResourceDefinition] certificaterequests.cert-manager.io[CustomResourceDefinition] certificates.cert-manager.io[CustomResourceDefinition] challenges.acme.cert-manager.io[CustomResourceDefinition] clusterissuers.cert-manager.io[CustomResourceDefinition] issuers.cert-manager.io[CustomResourceDefinition] orders.acme.cert-manager.iorelease "cert-manager" uninstalled
如輸出所示,Issuers
、ClusterIssuers
、Certificates
、CertificateRequests
、Orders
和 Challenges
的 CustomResourceDefinition
不會被 Helm 解除安裝命令移除。這是為了防止資料遺失,因為移除 CustomResourceDefinition
也會移除這些資源的所有實例。
☢️ 這會從叢集中移除所有
Issuers
、ClusterIssuers
、Certificates
、CertificateRequests
、Orders
和Challenges
資源kubectl delete crd \issuers.cert-manager.io \clusterissuers.cert-manager.io \certificates.cert-manager.io \certificaterequests.cert-manager.io \orders.acme.cert-manager.io \challenges.acme.cert-manager.io
⚠️
v1.15.0
之前的 cert-manager 版本在解除安裝時不會保留CustomResourceDefinition
,並將從叢集中移除所有Issuers
、ClusterIssuers
、Certificates
、CertificateRequests
、Orders
和Challenges
資源。如果您使用的是v1.15.0
之前的版本,請務必在解除安裝 cert-manager 之前備份您的 cert-manager 資源。或者升級到v1.15.0
再解除安裝。
命名空間卡在終止狀態
如果命名空間在尚未刪除 cert-manager 安裝的情況下就被標記為刪除,該命名空間可能會卡在終止狀態。這通常是因為 APIService
資源仍然存在,但 webhook 已不再運行,因此無法連線。要解決這個問題,請確保您已正確執行上述命令,如果仍然遇到問題,請執行
kubectl delete apiservice v1beta1.webhook.cert-manager.io
使用 Flux Helm Controller
cert-manager Helm chart 可以由 Flux Helm Controller 安裝和升級。
📖 請在持續部署:使用 Flux Helm Controller中閱讀更多資訊。