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 文件示例
apiVersion: operator.openshift.io/v1alpha1
kind: CertManager
metadata:
name: cluster
spec:
controllerConfig:
overrideArgs:
- "--dns01-recursive-nameservers=8.8.8.8:53,1.1.1.1:53"
overrideEnv:
- name: HTTP_PROXY
value: http://proxy.example.com:8080
overrideResources:
limits:
cpu: "200m"
memory: "512Mi"
requests:
cpu: "100m"
memory: "256Mi"
overrideScheduling:
nodeSelector:
custom: "label"
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
overrideReplicas: 2
#...
webhookConfig:
overrideArgs:
#...
overrideResources:
#...
overrideScheduling:
#...
overrideReplicas:
#...
cainjectorConfig:
overrideArgs:
#...
overrideResources:
#...
overrideScheduling:
#...
overrideReplicas:
#...
要覆盖不支持的参数,您可以在 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 组件配置副本。默认值为
如需更多信息,请参阅高可用性。 |
|
|
| 您可以为 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使用以下覆盖参数添加
spec.controllerConfig部分:apiVersion: operator.openshift.io/v1alpha1 kind: CertManager metadata: name: cluster ... spec: ... controllerConfig: overrideEnv: - name: HTTP_PROXY value: http://<proxy_url>1 - name: HTTPS_PROXY value: https://<proxy_url>2 - name: NO_PROXY value: <ignore_proxy_domains>3 注意有关可覆盖环境变量的更多信息,请参阅 CertManager 自定义资源"中的"Explanation of field"中的"Overridable 环境变量"。
- 保存更改并退出文本编辑器以应用您的更改。
验证
运行以下命令,验证 cert-manager 控制器 pod 是否已重新部署:
$ oc get pods -l app.kubernetes.io/name=cert-manager -n cert-manager输出示例
NAME READY STATUS RESTARTS AGE cert-manager-bd7fbb9fc-wvbbt 1/1 Running 0 39s运行以下命令,验证是否为 cert-manager pod 更新环境变量:
$ oc get pod <redeployed_cert-manager_controller_pod> -n cert-manager -o yaml输出示例
env: ... - name: HTTP_PROXY value: http://<PROXY_URL> - name: HTTPS_PROXY value: https://<PROXY_URL> - name: NO_PROXY value: <IGNORE_PROXY_DOMAINS>
您可以通过在 CertManager 资源中添加 spec.controllerConfig 部分来覆盖 Red Hat OpenShift 的 cert-manager Operator 支持的参数。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问 OpenShift Container Platform 集群。
流程
运行以下命令来编辑
CertManager资源:$ oc edit certmanager cluster使用以下覆盖参数添加
spec.controllerConfig部分:apiVersion: operator.openshift.io/v1alpha1 kind: CertManager metadata: name: cluster ... spec: ... controllerConfig: overrideArgs: - '--dns01-recursive-nameservers=<server_address>'1 - '--dns01-recursive-nameservers-only' - '--acme-http01-solver-nameservers=<host>:<port>' - '--v=<verbosity_level>' - '--metrics-listen-address=<host>:<port>' - '--issuer-ambient-credentials' - '--acme-http01-solver-resource-limits-cpu=<quantity>' - '--acme-http01-solver-resource-limits-memory=<quantity>' - '--acme-http01-solver-resource-request-cpu=<quantity>' - '--acme-http01-solver-resource-request-memory=<quantity>' webhookConfig: overrideArgs: - '--v=<verbosity_level>' cainjectorConfig: overrideArgs: - '--v=<verbosity_level>'- 1
- 有关可覆盖的 aruguments 的详情,请参考 CertManager 自定义资源"Explanation of fields" 中的 "Overridable parameters for the cert-manager components" 部分。
- 保存更改并退出文本编辑器以应用您的更改。
验证
运行以下命令,验证是否为 cert-manager pod 更新参数:
$ oc get pods -n cert-manager -o yaml输出示例
... metadata: name: cert-manager-6d4b5d4c97-kldwl namespace: cert-manager ... spec: containers: - args: - --acme-http01-solver-nameservers=1.1.1.1:53 - --cluster-resource-namespace=$(POD_NAMESPACE) - --dns01-recursive-nameservers=1.1.1.1:53 - --dns01-recursive-nameservers-only - --leader-election-namespace=kube-system - --max-concurrent-challenges=60 - --metrics-listen-address=0.0.0.0:9042 - --v=6 ... metadata: name: cert-manager-cainjector-866c4fd758-ltxxj namespace: cert-manager ... spec: containers: - args: - --leader-election-namespace=kube-system - --v=2 ... metadata: name: cert-manager-webhook-6d48f88495-c88gd namespace: cert-manager ... spec: containers: - args: ... - --v=4
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输出示例
NAME READY SECRET AGE certificate-from-clusterissuer-route53-ambient True certificate-from-clusterissuer-route53-ambient 8h运行以下命令来编辑
CertManager资源:$ oc edit certmanager cluster使用以下覆盖参数添加
spec.controllerConfig部分:apiVersion: operator.openshift.io/v1alpha1 kind: CertManager metadata: name: cluster # ... spec: # ... controllerConfig: overrideArgs: - '--enable-certificate-owner-ref'- 保存更改并退出文本编辑器以应用您的更改。
验证
运行以下命令,验证 cert-manager controller pod 是否更新了
--enable-certificate-owner-ref标志:$ oc get pods -l app.kubernetes.io/name=cert-manager -n cert-manager -o yaml输出示例
# ... metadata: name: cert-manager-6e4b4d7d97-zmdnb namespace: cert-manager # ... spec: containers: - args: - --enable-certificate-owner-ref
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输出示例
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在设置 CPU 和内存限值前,请输入以下命令检查 cert-manager 控制器、CA injector 和 Webhook 的现有配置:
$ oc get deployment -n cert-manager -o yaml输出示例
# ... metadata: name: cert-manager namespace: cert-manager # ... spec: template: spec: containers: - name: cert-manager-controller resources: {}1 # ... metadata: name: cert-manager-cainjector namespace: cert-manager # ... spec: template: spec: containers: - name: cert-manager-cainjector resources: {}2 # ... metadata: name: cert-manager-webhook namespace: cert-manager # ... spec: template: spec: containers: - name: cert-manager-webhook resources: {}3 # ...要为 cert-manager 控制器、CA injector 和 Webhook 配置 CPU 和内存限值,请输入以下命令:
$ oc patch certmanager.operator cluster --type=merge -p=" spec: controllerConfig: overrideResources:1 limits: cpu: 200m memory: 64Mi requests: cpu: 10m memory: 16Mi webhookConfig: overrideResources: limits: cpu: 200m memory: 64Mi requests: cpu: 10m memory: 16Mi cainjectorConfig: overrideResources: limits: cpu: 200m memory: 64Mi requests: cpu: 10m memory: 16Mi "- 1
- 有关超额资源参数的信息,请参阅 CertManager 自定义资源"Explanation of fields" 中的 "Overridable resource parameters for the cert-manager components" 部分。
输出示例
certmanager.operator.openshift.io/cluster patched
验证
验证 cert-manager 组件的 CPU 和内存限值是否已更新:
$ oc get deployment -n cert-manager -o yaml输出示例
# ... metadata: name: cert-manager namespace: cert-manager # ... spec: template: spec: containers: - name: cert-manager-controller resources: limits: cpu: 200m memory: 64Mi requests: cpu: 10m memory: 16Mi # ... metadata: name: cert-manager-cainjector namespace: cert-manager # ... spec: template: spec: containers: - name: cert-manager-cainjector resources: limits: cpu: 200m memory: 64Mi requests: cpu: 10m memory: 16Mi # ... metadata: name: cert-manager-webhook namespace: cert-manager # ... spec: template: spec: containers: - name: cert-manager-webhook resources: limits: cpu: 200m memory: 64Mi requests: cpu: 10m memory: 16Mi # ...
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设置。$ oc patch certmanager.operator cluster --type=merge -p=" spec: controllerConfig: overrideScheduling:1 nodeSelector: node-role.kubernetes.io/control-plane: '' tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule webhookConfig: overrideScheduling: nodeSelector: node-role.kubernetes.io/control-plane: '' tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule cainjectorConfig: overrideScheduling: nodeSelector: node-role.kubernetes.io/control-plane: '' tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule" "- 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输出示例
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>运行以下命令,检查应用到部署的
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}'输出示例
cert-manager {"kubernetes.io/os":"linux","node-role.kubernetes.io/control-plane":""} [{"effect":"NoSchedule","key":"node-role.kubernetes.io/master","operator":"Exists"}] cert-manager-cainjector {"kubernetes.io/os":"linux","node-role.kubernetes.io/control-plane":""} [{"effect":"NoSchedule","key":"node-role.kubernetes.io/master","operator":"Exists"}] cert-manager-webhook {"kubernetes.io/os":"linux","node-role.kubernetes.io/control-plane":""} [{"effect":"NoSchedule","key":"node-role.kubernetes.io/master","operator":"Exists"}]
运行以下命令,验证
cert-manager命名空间中的 pod 调度事件:$ oc get events -n cert-manager --field-selector reason=Scheduled