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"

  webhookConfig:
    overrideArgs:
#...
    overrideResources:
#...
    overrideScheduling:
#...

  cainjectorConfig:
    overrideArgs:
#...
    overrideResources:
#...
    overrideScheduling:
#...
Copy to Clipboard Toggle word wrap

警告

要覆盖不支持的参数,您可以在 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。

下表列出了您可以在 CertManager CR 的 spec.controllerConfigspec.webhookConfigspec.cainjectorConfig 部分中配置的常用字段。

Expand
表 9.1. cert-manager 组件的 CertManager CR 中的常见可配置字段
字段类型描述

overrideArgs

string

您可以覆盖 cert-manager 组件支持的参数。

overrideEnv

dict

您可以覆盖 cert-manager 控制器支持的环境变量。此字段只支持 cert-manager 控制器组件。

overrideResources

object

您可以为 cert-manager 组件配置 CPU 和内存限值。

overrideScheduling

object

您可以为 cert-manager 组件配置 pod 调度限制。

9.5.1.2. cert-manager 组件的覆盖参数

您可以在 CertManager CR 的 spec.controllerConfig,spec.webhookConfig, 和 spec.cainjectorConfig 部分中为 cert-manager 组件配置覆盖参数。

下表描述了 cert-manager 组件的覆盖参数:

Expand
表 9.2. cert-manager 组件的覆盖参数
参数组件描述

--dns01-recursive-nameservers=<server_address>

Controller

提供以逗号分隔的名称服务器列表,以查询 DNS-01 自我检查。命名空间的指定形式可以是 <host>:<port>(例如 1.1.1.1:53),或使用 DNS over HTTPS (DoH)(例如 https://1.1.1.1/dns-query)。

注意

仅从 cert-manager Operator for Red Hat OpenShift version 1.13.0 或更高版本开始才支持 DNS over HTTPS (DoH)。

--dns01-recursive-nameservers-only

Controller

指定只使用递归名称服务器,而不是检查与该域关联的权威名称服务器。

--acme-http01-solver-nameservers=<host>:<port>

Controller

提供以逗号分隔的 <host>:<port> 名称服务器列表,以查询自动证书管理环境(ACME) HTTP01 自我检查。例如,--acme-http01-solver-nameservers=1.1.1.1:53

--metrics-listen-address=<host>:<port>

Controller

指定指标端点的主机和端口。默认值为 --metrics-listen-address=0.0.0.0:9402

--issuer-ambient-credentials

Controller

您可以使用此参数配置 ACME Issuer,以使用 ambient 凭证来解决 DNS-01 质询。

--enable-certificate-owner-ref

Controller

此参数将证书资源设置为存储 TLS 证书的 secret 的所有者。如需更多信息,请参阅"删除证书时自动删除 TLS secret"。

--acme-http01-solver-resource-limits-cpu

Controller

定义 ACME HTTP-01 solver pod 的最大 CPU 限制。默认值为 100m

--acme-http01-solver-resource-limits-memory

Controller

定义 ACME HTTP-01 solver pod 的最大内存限值。默认值为 64Mi

--acme-http01-solver-resource-request-cpu

Controller

定义 ACME HTTP-01 solver pod 的最小 CPU 请求。默认值为 10m

--acme-http01-solver-resource-request-memory

Controller

定义 ACME HTTP-01 solver pod 的最小内存请求。默认值为 64Mi

--v=<verbosity_level>

Controller, Webhook, CA injector

指定日志级别详细程度,以确定日志消息的详细程度。

9.5.1.3. cert-manager 控制器的可覆盖环境变量

您可以在 CertManager CR 的 spec.controllerConfig.overrideEnv 字段中为 cert-manager 控制器配置可覆盖环境变量。

下表描述了 cert-manager 控制器的超量环境变量:

Expand
表 9.3. cert-manager 控制器的可覆盖环境变量
环境变量描述

HTTP_PROXY

用于传出 HTTP 请求的代理服务器。

HTTPS_PROXY

用于传出 HTTPS 请求的代理服务器。

NO_PROXY

绕过代理的主机列表(以逗号分隔)。

9.5.1.4. cert-manager 组件的可覆盖资源参数

您可以在 CertManager CR 的 spec.controllerConfig,spec.webhookConfig, 和 spec.cainjectorConfig 部分中为 cert-manager 组件配置 CPU 和内存限值。

下表描述了 cert-manager 组件的可覆盖资源参数:

Expand
表 9.4. cert-manager 组件的可覆盖资源参数
字段描述

overrideResources.limits.cpu

定义组件 pod 可以使用的最大 CPU 量。

overrideResources.limits.memory

定义组件 pod 可以使用的最大内存量。

overrideResources.requests.cpu

定义调度程序为组件 pod 请求的最小 CPU 量。

overrideResources.requests.memory

定义调度程序为组件 pod 请求的最小内存量。

9.5.1.5. cert-manager 组件的可覆盖调度参数

您可以在 CertManager CR 的 spec.controllerConfigspec.webhookConfig 字段和 spec.cainjectorConfig 部分中为 cert-manager 组件配置 pod 调度约束。

下表描述了 cert-manager 组件的 pod 调度参数:

Expand
表 9.5. cert-manager 组件的可覆盖调度参数
字段描述

overrideScheduling.nodeSelector

键值对,将 pod 限制到特定的节点。

overrideScheduling.tolerations

在污点节点上调度 pod 的容限列表。

您可以通过在 CertManager 资源中添加 spec.controllerConfig 部分来覆盖 Red Hat OpenShift 的 cert-manager Operator 支持的环境变量。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问 OpenShift Container Platform 集群。

流程

  1. 运行以下命令来编辑 CertManager 资源:

    $ oc edit certmanager cluster
    Copy to Clipboard Toggle word wrap
  2. 使用以下覆盖参数添加 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
    Copy to Clipboard Toggle word wrap
    1 2
    <proxy_url> 替换为代理服务器 URL。
    3
    <ignore_proxy_domains> 替换为以逗号分隔的域列表。代理服务器会忽略这些域。
    注意

    有关可覆盖环境变量的更多信息,请参阅 CertManager 自定义资源"中的"Explanation of field"中的"Overridable 环境变量"。

  3. 保存更改并退出文本编辑器以应用您的更改。

验证

  1. 运行以下命令,验证 cert-manager 控制器 pod 是否已重新部署:

    $ oc get pods -l app.kubernetes.io/name=cert-manager -n cert-manager
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                          READY   STATUS    RESTARTS   AGE
    cert-manager-bd7fbb9fc-wvbbt  1/1     Running   0          39s
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令,验证是否为 cert-manager pod 更新环境变量:

    $ oc get pod <redeployed_cert-manager_controller_pod> -n cert-manager -o yaml
    Copy to Clipboard Toggle word wrap

    输出示例

        env:
        ...
        - name: HTTP_PROXY
          value: http://<PROXY_URL>
        - name: HTTPS_PROXY
          value: https://<PROXY_URL>
        - name: NO_PROXY
          value: <IGNORE_PROXY_DOMAINS>
    Copy to Clipboard Toggle word wrap

您可以通过在 CertManager 资源中添加 spec.controllerConfig 部分来覆盖 Red Hat OpenShift 的 cert-manager Operator 支持的参数。

先决条件

  • 您可以使用具有 cluster-admin 角色的用户访问 OpenShift Container Platform 集群。

流程

  1. 运行以下命令来编辑 CertManager 资源:

    $ oc edit certmanager cluster
    Copy to Clipboard Toggle word wrap
  2. 使用以下覆盖参数添加 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>'
    Copy to Clipboard Toggle word wrap
    1
    有关可覆盖的 aruguments 的详情,请参考 CertManager 自定义资源"Explanation of fields" 中的 "Overridable parameters for the cert-manager components" 部分。
  3. 保存更改并退出文本编辑器以应用您的更改。

验证

  • 运行以下命令,验证是否为 cert-manager pod 更新参数:

    $ oc get pods -n cert-manager -o yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    ...
      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
    Copy to Clipboard Toggle word wrap

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 或更高版本。

流程

  1. 运行以下命令,检查 Certificate 对象及其 secret 是否可用:

    $ oc get certificate
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                             READY   SECRET                                           AGE
    certificate-from-clusterissuer-route53-ambient   True    certificate-from-clusterissuer-route53-ambient   8h
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令来编辑 CertManager 资源:

    $ oc edit certmanager cluster
    Copy to Clipboard Toggle word wrap
  3. 使用以下覆盖参数添加 spec.controllerConfig 部分:

    apiVersion: operator.openshift.io/v1alpha1
    kind: CertManager
    metadata:
      name: cluster
    # ...
    spec:
    # ...
      controllerConfig:
        overrideArgs:
          - '--enable-certificate-owner-ref'
    Copy to Clipboard Toggle word wrap
  4. 保存更改并退出文本编辑器以应用您的更改。

验证

  • 运行以下命令,验证 cert-manager controller pod 是否更新了 --enable-certificate-owner-ref 标志:

    $ oc get pods -l app.kubernetes.io/name=cert-manager -n cert-manager -o yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    # ...
      metadata:
        name: cert-manager-6e4b4d7d97-zmdnb
        namespace: cert-manager
    # ...
      spec:
        containers:
        - args:
          - --enable-certificate-owner-ref
    Copy to Clipboard Toggle word wrap

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 或更高版本。

流程

  1. 输入以下命令检查 cert-manager 控制器、CA injector 和 Webhook 的部署是否可用:

    $ oc get deployment -n cert-manager
    Copy to Clipboard Toggle word wrap

    输出示例

    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
    Copy to Clipboard Toggle word wrap

  2. 在设置 CPU 和内存限值前,请输入以下命令检查 cert-manager 控制器、CA injector 和 Webhook 的现有配置:

    $ oc get deployment -n cert-manager -o yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    # ...
      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
    
    # ...
    Copy to Clipboard Toggle word wrap

    1 2 3
    默认情况下,spec.resources 字段为空。cert-manager 组件没有 CPU 和内存限值。
  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
    "
    Copy to Clipboard Toggle word wrap
    1
    有关超额资源参数的信息,请参阅 CertManager 自定义资源"Explanation of fields" 中的 "Overridable resource parameters for the cert-manager components" 部分。

    输出示例

    certmanager.operator.openshift.io/cluster patched
    Copy to Clipboard Toggle word wrap

验证

  1. 验证 cert-manager 组件的 CPU 和内存限值是否已更新:

    $ oc get deployment -n cert-manager -o yaml
    Copy to Clipboard Toggle word wrap

    输出示例

    # ...
      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
    # ...
    Copy to Clipboard Toggle word wrap

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 调度覆盖。使用 controllerConfigwebhookConfigcainjectorConfig 部分下的 overrideScheduling 字段来定义 nodeSelectortolerations 设置。

    $ 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"
    "
    Copy to Clipboard Toggle word wrap
    1
    有关超额调度参数的详情,请参考 CertManager 自定义资源"Explanation of fields" 中的 "Overridable scheduling parameters for the cert-manager components" 部分。

验证

  1. 验证 cert-manager pod 的 pod 调度设置:

    1. 运行以下命令,检查 cert-manager 命名空间中的部署,以确认它们具有正确的 nodeSelectortolerations

      $ oc get pods -n cert-manager -o wide
      Copy to Clipboard Toggle word wrap

      输出示例

      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 Toggle word wrap

    2. 运行以下命令,检查应用到部署的 nodeSelectortolerations 设置:

      $ 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 Toggle word wrap

      输出示例

      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"}]
      Copy to Clipboard Toggle word wrap

  2. 运行以下命令,验证 cert-manager 命名空间中的 pod 调度事件:

    $ oc get events -n cert-manager --field-selector reason=Scheduled
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat