NEW:在TwitterMastodon

Helm

使用 Helm 安装

cert-manager 提供 Helm 图表作为 Kubernetes 和 OpenShift 上的一流安装方法。

请务必不要将 cert-manager 作为其他 Helm 图表的子图表嵌入;cert-manager 管理集群中的非命名空间资源,必须注意确保它只安装一次。

先决条件

安装 cert-manager

1. 添加 Helm 仓库

此仓库是 cert-manager 图表的唯一支持来源。互联网上存在一些其他镜像和副本,但这些都是完全非官方的,可能会带来安全风险。

值得注意的是,"Helm stable repository" 版本的 cert-manager 已弃用,不应使用。

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 后,您可以 验证 安装。

安装选项

可在 cert-manager 的 ArtifactHub 页面 上找到所有可用的 Helm 值的完整列表。

以下示例展示了如何通过覆盖默认 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 开关设置。

示例用法

以下是带有 cert-manager 作为子图表的 Chart.yaml 示例。

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

然后可以通过两种方式覆盖命名空间。

  1. Values.yaml 文件中
cert-manager: #defined by either the name or alias of your dependency in Chart.yaml
namespace: security
  1. 在使用 --set 的 helm 命令中
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 命令不会输出 Namespace 资源,并且会忽略 --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

如输出所示,CustomResourceDefinition 用于 Issuers,ClusterIssuers,Certificates,CertificateRequests,OrdersChallenges 不会被 Helm uninstall 命令删除。这是为了防止数据丢失,因为删除 CustomResourceDefinition 还会删除所有这些资源的实例。

☢️ 这将从集群中删除所有 Issuers,ClusterIssuers,Certificates,CertificateRequests,OrdersChallenges 资源。

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,OrdersChallenges 资源。如果您使用的是 v1.15.0 之前的版本,请确保在卸载 cert-manager 之前备份您的 cert-manager 资源。或者在卸载之前升级到 v1.15.0

命名空间卡在终止状态

如果命名空间已标记为删除,但未先删除 cert-manager 安装,则命名空间可能会卡在终止状态。这通常是由于 APIService 资源仍然存在,但 webhook 无法运行,因此无法访问。要解决此问题,请确保您已正确运行上述命令,如果仍然遇到问题,请运行以下命令。

kubectl delete apiservice v1beta1.webhook.cert-manager.io

使用 Flux Helm 控制器

Flux Helm 控制器可以安装和升级 cert-manager Helm 图表。

📖 在 持续部署:使用 Flux Helm 控制器 中了解更多信息。