新訊:在TwitterMastodon取得專案更新

Helm

使用 Helm 安裝

cert-manager 提供 Helm 圖表作為在 Kubernetes 和 OpenShift 上安裝的主要方法。

請務必永遠不要將 cert-manager 嵌入為其他 Helm 圖表的子圖表;cert-manager 管理您叢集中非命名空間的資源,必須小心確保它只安裝一次。

先決條件

安裝 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: v2
name: example_chart
description: A Helm chart with cert-manager as subchart
type: application
version: 0.1.0
appVersion: "0.1.0"
dependencies:
- name: cert-manager
version: v1.16.1
repository: https://charts.jetstack.io
alias: cert-manager
condition: cert-manager.enabled

然後,您可以透過 2 種方式覆寫命名空間

  1. Values.yaml 檔案中
cert-manager: #defined by either the name or alias of your dependency in Chart.yaml
namespace: security
  1. 在 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,就是在 kubectlhelm 上執行刪除命令,反向執行安裝過程。

$ helm uninstall cert-manager -n cert-manager
These 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.io
release "cert-manager" uninstalled

如輸出所示,IssuersClusterIssuersCertificatesCertificateRequestsOrdersChallengesCustomResourceDefinition 不會被 Helm 解除安裝命令移除。這是為了防止資料遺失,因為移除 CustomResourceDefinition 也會移除這些資源的所有實例。

☢️ 這會從叢集中移除所有 IssuersClusterIssuersCertificatesCertificateRequestsOrdersChallenges 資源

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,並將從叢集中移除所有 IssuersClusterIssuersCertificatesCertificateRequestsOrdersChallenges 資源。如果您使用的是 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中閱讀更多資訊。