9.5. 使用 CertManager 自定义资源自定义 cert-manager Operator
为 Red Hat OpenShift 安装 cert-manager Operator 后,您可以通过配置 CertManager 自定义资源(CR)来执行以下操作:
- 配置参数以修改 cert-manager 组件的行为,如 cert-manager 控制器、CA 注入器和 Webhook。
- 为控制器 pod 设置环境变量。
- 定义资源请求和限值来管理 CPU 和内存使用情况。
- 配置调度规则,以控制 pod 在集群中运行的位置。
CertManager CR YAML 文件示例
要覆盖不支持的参数,您可以在 CertManager 资源中添加 spec.unsupportedConfigOverrides 部分,但不支持使用 spec.unsupportedConfigOverrides。
9.5.1. CertManager 自定义资源中的字段解释 复制链接链接已复制到粘贴板!
您可以使用 CertManager 自定义资源(CR)为 Red Hat OpenShift 配置 cert-manager Operator 的以下核心组件:
-
cert-manager controller:您可以使用
spec.controllerConfig字段来配置 cert-manager 控制器 pod。 -
Webhook:您可以使用
spec.webhookConfig字段来配置 Webhook pod,该 pod 处理验证和变异请求。 -
CA injector:您可以使用
spec.cainjectorConfig字段来配置 CA 注入器 pod。
9.5.1.1. cert-manager 组件的 CertManager CR 中的常见可配置字段 复制链接链接已复制到粘贴板!
下表列出了您可以在 CertManager CR 的 spec.controllerConfig、spec.webhookConfig 和 spec.cainjectorConfig 部分中配置的常用字段。
| 字段 | 类型 | 描述 |
|---|---|---|
|
|
| 您可以覆盖 cert-manager 组件支持的参数。 |
|
|
| 您可以覆盖 cert-manager 控制器支持的环境变量。此字段只支持 cert-manager 控制器组件。 |
|
|
| 您可以为 cert-manager 组件配置 CPU 和内存限值。 |
|
|
| 您可以为 cert-manager 组件配置 pod 调度限制。 |
9.5.1.2. cert-manager 组件的覆盖参数 复制链接链接已复制到粘贴板!
您可以在 CertManager CR 的 spec.controllerConfig,spec.webhookConfig, 和 spec.cainjectorConfig 部分中为 cert-manager 组件配置覆盖参数。
下表描述了 cert-manager 组件的覆盖参数:
| 参数 | 组件 | 描述 |
|---|---|---|
|
| Controller |
提供以逗号分隔的名称服务器列表,以查询 DNS-01 自我检查。命名空间的指定形式可以是 注意 仅从 cert-manager Operator for Red Hat OpenShift version 1.13.0 或更高版本开始才支持 DNS over HTTPS (DoH)。 |
|
| Controller | 指定只使用递归名称服务器,而不是检查与该域关联的权威名称服务器。 |
|
| Controller |
提供以逗号分隔的 |
|
| Controller |
指定指标端点的主机和端口。默认值为 |
|
| Controller | 您可以使用此参数配置 ACME Issuer,以使用 ambient 凭证来解决 DNS-01 质询。 |
|
| Controller | 此参数将证书资源设置为存储 TLS 证书的 secret 的所有者。如需更多信息,请参阅"删除证书时自动删除 TLS secret"。 |
|
| Controller |
定义 ACME HTTP-01 solver pod 的最大 CPU 限制。默认值为 |
|
| Controller |
定义 ACME HTTP-01 solver pod 的最大内存限值。默认值为 |
|
| Controller |
定义 ACME HTTP-01 solver pod 的最小 CPU 请求。默认值为 |
|
| Controller |
定义 ACME HTTP-01 solver pod 的最小内存请求。默认值为 |
|
| Controller, Webhook, CA injector | 指定日志级别详细程度,以确定日志消息的详细程度。 |
9.5.1.3. cert-manager 控制器的可覆盖环境变量 复制链接链接已复制到粘贴板!
您可以在 CertManager CR 的 spec.controllerConfig.overrideEnv 字段中为 cert-manager 控制器配置可覆盖环境变量。
下表描述了 cert-manager 控制器的超量环境变量:
| 环境变量 | 描述 |
|---|---|
|
| 用于传出 HTTP 请求的代理服务器。 |
|
| 用于传出 HTTPS 请求的代理服务器。 |
|
| 绕过代理的主机列表(以逗号分隔)。 |
9.5.1.4. cert-manager 组件的可覆盖资源参数 复制链接链接已复制到粘贴板!
您可以在 CertManager CR 的 spec.controllerConfig,spec.webhookConfig, 和 spec.cainjectorConfig 部分中为 cert-manager 组件配置 CPU 和内存限值。
下表描述了 cert-manager 组件的可覆盖资源参数:
| 字段 | 描述 |
|---|---|
|
| 定义组件 pod 可以使用的最大 CPU 量。 |
|
| 定义组件 pod 可以使用的最大内存量。 |
|
| 定义调度程序为组件 pod 请求的最小 CPU 量。 |
|
| 定义调度程序为组件 pod 请求的最小内存量。 |
9.5.1.5. cert-manager 组件的可覆盖调度参数 复制链接链接已复制到粘贴板!
您可以在 CertManager CR 的 spec.controllerConfig、spec.webhookConfig 字段和 spec.cainjectorConfig 部分中为 cert-manager 组件配置 pod 调度约束。
下表描述了 cert-manager 组件的 pod 调度参数:
| 字段 | 描述 |
|---|---|
|
| 键值对,将 pod 限制到特定的节点。 |
|
| 在污点节点上调度 pod 的容限列表。 |
您可以通过在 CertManager 资源中添加 spec.controllerConfig 部分来覆盖 Red Hat OpenShift 的 cert-manager Operator 支持的环境变量。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问 OpenShift Container Platform 集群。
流程
运行以下命令来编辑
CertManager资源:oc edit certmanager cluster
$ oc edit certmanager clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下覆盖参数添加
spec.controllerConfig部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意有关可覆盖环境变量的更多信息,请参阅 CertManager 自定义资源"中的"Explanation of field"中的"Overridable 环境变量"。
- 保存更改并退出文本编辑器以应用您的更改。
验证
运行以下命令,验证 cert-manager 控制器 pod 是否已重新部署:
oc get pods -l app.kubernetes.io/name=cert-manager -n cert-manager
$ oc get pods -l app.kubernetes.io/name=cert-manager -n cert-managerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE cert-manager-bd7fbb9fc-wvbbt 1/1 Running 0 39s
NAME READY STATUS RESTARTS AGE cert-manager-bd7fbb9fc-wvbbt 1/1 Running 0 39sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证是否为 cert-manager pod 更新环境变量:
oc get pod <redeployed_cert-manager_controller_pod> -n cert-manager -o yaml
$ oc get pod <redeployed_cert-manager_controller_pod> -n cert-manager -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以通过在 CertManager 资源中添加 spec.controllerConfig 部分来覆盖 Red Hat OpenShift 的 cert-manager Operator 支持的参数。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问 OpenShift Container Platform 集群。
流程
运行以下命令来编辑
CertManager资源:oc edit certmanager cluster
$ oc edit certmanager clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下覆盖参数添加
spec.controllerConfig部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 有关可覆盖的 aruguments 的详情,请参考 CertManager 自定义资源"Explanation of fields" 中的 "Overridable parameters for the cert-manager components" 部分。
- 保存更改并退出文本编辑器以应用您的更改。
验证
运行以下命令,验证是否为 cert-manager pod 更新参数:
oc get pods -n cert-manager -o yaml
$ oc get pods -n cert-manager -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.4. 在删除证书时自动删除 TLS secret 复制链接链接已复制到粘贴板!
您可以通过在 CertManager 资源中添加 spec.controllerConfig 部分,为 Red Hat OpenShift 的 cert-manager Operator 启用 --enable-certificate-owner-ref 标志。--enable-certificate-owner-ref 标志将证书资源设置为存储 TLS 证书的 secret 的所有者。
如果您为 Red Hat OpenShift 卸载 cert-manager Operator,或从集群中删除证书资源,secret 会被自动删除。这可能导致网络连接问题,具体取决于使用证书 TLS secret 的位置。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问 OpenShift Container Platform 集群。 - 您已为 Red Hat OpenShift 安装了 cert-manager Operator 版本 1.12.0 或更高版本。
流程
运行以下命令,检查
Certificate对象及其 secret 是否可用:oc get certificate
$ oc get certificateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY SECRET AGE certificate-from-clusterissuer-route53-ambient True certificate-from-clusterissuer-route53-ambient 8h
NAME READY SECRET AGE certificate-from-clusterissuer-route53-ambient True certificate-from-clusterissuer-route53-ambient 8hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来编辑
CertManager资源:oc edit certmanager cluster
$ oc edit certmanager clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下覆盖参数添加
spec.controllerConfig部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改并退出文本编辑器以应用您的更改。
验证
运行以下命令,验证 cert-manager controller pod 是否更新了
--enable-certificate-owner-ref标志:oc get pods -l app.kubernetes.io/name=cert-manager -n cert-manager -o yaml
$ oc get pods -l app.kubernetes.io/name=cert-manager -n cert-manager -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.5. 覆盖 cert-manager 组件的 CPU 和内存限值 复制链接链接已复制到粘贴板!
为 Red Hat OpenShift 安装 cert-manager Operator 后,您可以为 cert-manager 组件(如 cert-manager controller、CA injector 和 Webhook)从 cert-manager Operator 为 Red Hat OpenShift API 配置 CPU 和内存限值。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问 OpenShift Container Platform 集群。 - 您已为 Red Hat OpenShift 安装了 cert-manager Operator 版本 1.12.0 或更高版本。
流程
输入以下命令检查 cert-manager 控制器、CA injector 和 Webhook 的部署是否可用:
oc get deployment -n cert-manager
$ oc get deployment -n cert-managerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY UP-TO-DATE AVAILABLE AGE cert-manager 1/1 1 1 53m cert-manager-cainjector 1/1 1 1 53m cert-manager-webhook 1/1 1 1 53m
NAME READY UP-TO-DATE AVAILABLE AGE cert-manager 1/1 1 1 53m cert-manager-cainjector 1/1 1 1 53m cert-manager-webhook 1/1 1 1 53mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在设置 CPU 和内存限值前,请输入以下命令检查 cert-manager 控制器、CA injector 和 Webhook 的现有配置:
oc get deployment -n cert-manager -o yaml
$ oc get deployment -n cert-manager -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为 cert-manager 控制器、CA injector 和 Webhook 配置 CPU 和内存限值,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 有关超额资源参数的信息,请参阅 CertManager 自定义资源"Explanation of fields" 中的 "Overridable resource parameters for the cert-manager components" 部分。
输出示例
certmanager.operator.openshift.io/cluster patched
certmanager.operator.openshift.io/cluster patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 cert-manager 组件的 CPU 和内存限值是否已更新:
oc get deployment -n cert-manager -o yaml
$ oc get deployment -n cert-manager -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5.6. 为 cert-manager 组件配置调度覆盖 复制链接链接已复制到粘贴板!
您可以为 Red Hat OpenShift 组件(如 cert-manager controller、CA injector 和 Webhook)为 cert-manager Operator 为 Red Hat OpenShift API 配置 pod 调度。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问 OpenShift Container Platform 集群。 - 您已为 Red Hat OpenShift 安装了 cert-manager Operator 版本 1.15.0 或更高版本。
流程
运行以下命令,更新
certmanager.operator自定义资源,为所需组件配置 pod 调度覆盖。使用controllerConfig、webhookConfig或cainjectorConfig部分下的overrideScheduling字段来定义nodeSelector和tolerations设置。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 有关超额调度参数的详情,请参考 CertManager 自定义资源"Explanation of fields" 中的 "Overridable scheduling parameters for the cert-manager components" 部分。
验证
验证
cert-managerpod 的 pod 调度设置:运行以下命令,检查
cert-manager命名空间中的部署,以确认它们具有正确的nodeSelector和tolerations:oc get pods -n cert-manager -o wide
$ oc get pods -n cert-manager -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES cert-manager-58d9c69db4-78mzp 1/1 Running 0 10m 10.129.0.36 ip-10-0-1-106.ec2.internal <none> <none> cert-manager-cainjector-85b6987c66-rhzf7 1/1 Running 0 11m 10.128.0.39 ip-10-0-1-136.ec2.internal <none> <none> cert-manager-webhook-7f54b4b858-29bsp 1/1 Running 0 11m 10.129.0.35 ip-10-0-1-106.ec2.internal <none> <none>
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES cert-manager-58d9c69db4-78mzp 1/1 Running 0 10m 10.129.0.36 ip-10-0-1-106.ec2.internal <none> <none> cert-manager-cainjector-85b6987c66-rhzf7 1/1 Running 0 11m 10.128.0.39 ip-10-0-1-136.ec2.internal <none> <none> cert-manager-webhook-7f54b4b858-29bsp 1/1 Running 0 11m 10.129.0.35 ip-10-0-1-106.ec2.internal <none> <none>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查应用到部署的
nodeSelector和tolerations设置:oc get deployments -n cert-manager -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{.spec.template.spec.nodeSelector}{"\n"}{.spec.template.spec.tolerations}{"\n\n"}{end}'$ oc get deployments -n cert-manager -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{.spec.template.spec.nodeSelector}{"\n"}{.spec.template.spec.tolerations}{"\n\n"}{end}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,验证
cert-manager命名空间中的 pod 调度事件:oc get events -n cert-manager --field-selector reason=Scheduled
$ oc get events -n cert-manager --field-selector reason=ScheduledCopy to Clipboard Copied! Toggle word wrap Toggle overflow