8.8. 自定义 cert-manager Operator API 字段

您可以通过覆盖环境变量和参数来为 Red Hat OpenShift API 字段自定义 cert-manager Operator。

警告

要覆盖不支持的参数,您可以在 CertManager 资源中添加 spec.unsupportedConfigOverrides 部分,但不支持使用 spec.unsupportedConfigOverrides

8.8.1. 通过覆盖 cert-manager Operator API 中的环境变量来自定义 cert-manager

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

先决条件

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

流程

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

    $ oc edit certmanager cluster
  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
    1 2
    <proxy_url> 替换为代理服务器 URL。
    3
    <ignore_proxy_domains> 替换为以逗号分隔的域列表。代理服务器会忽略这些域。
  3. 保存更改并退出文本编辑器以应用您的更改。

验证

  1. 运行以下命令,验证 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

  2. 运行以下命令,验证是否为 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>

8.8.2. 通过覆盖 cert-manager Operator API 中的参数来自定义 cert-manager

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

先决条件

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

流程

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

    $ oc edit certmanager cluster
  2. 使用以下覆盖参数添加 spec.controllerConfig 部分:

    apiVersion: operator.openshift.io/v1alpha1
    kind: CertManager
    metadata:
      name: cluster
      ...
    spec:
      ...
      controllerConfig:
        overrideArgs:
          - '--dns01-recursive-nameservers=<host>:<port>' 1
          - '--dns01-recursive-nameservers-only' 2
          - '--acme-http01-solver-nameservers=<host>:<port>' 3
          - '--v=<verbosity_level>' 4
          - '--metrics-listen-address=<host>:<port>' 5
          - '--issuer-ambient-credentials' 6
      webhookConfig:
        overrideArgs:
          - '--v=4' 7
      cainjectorConfig:
        overrideArgs:
          - '--v=2' 8
    1
    提供以逗号分隔的 <host>:<port> 名称服务器列表来查询 DNS-01 自我检查。例如,--dns01-recursive-nameservers=1.1.1.1:53
    2
    指定只使用递归名称服务器,而不是检查与该域关联的权威名称服务器。
    3
    提供以逗号分隔的 <host>:<port> 名称服务器列表,以查询自动证书管理环境(ACME) HTTP01 自我检查。例如,--acme-http01-solver-nameservers=1.1.1.1:53
    4 7 8
    指定设置日志级别详细程度来确定日志消息的详细程度。
    5
    指定指标端点的主机和端口。默认值为 --metrics-listen-address=0.0.0.0:9402
    6
    在配置 ACME Issuer 以使用 --issuer-ambient-credentials 参数时,您必须使用 ambient 凭证来解决 DNS-01 质询。
  3. 保存更改并退出文本编辑器以应用您的更改。

验证

  • 运行以下命令,验证是否为 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

8.8.3. 在删除证书时自动删除 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 1.12.0 或更高版本安装了 cert-manager Operator。

流程

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

    $ oc get certificate

    输出示例

    NAME                                             READY   SECRET                                           AGE
    certificate-from-clusterissuer-route53-ambient   True    certificate-from-clusterissuer-route53-ambient   8h

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

    $ oc edit certmanager cluster
  3. 使用以下覆盖参数添加 spec.controllerConfig 部分:

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

验证

  • 运行以下命令,验证 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

8.8.4. 覆盖 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 1.12.0 或更高版本安装了 cert-manager Operator。

流程

  1. 输入以下命令检查 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

  2. 在设置 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
    # ...

    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:
          limits: 1
            cpu: 200m 2
            memory: 64Mi 3
          requests: 4
            cpu: 10m 5
            memory: 16Mi 6
      webhookConfig:
        overrideResources:
          limits: 7
            cpu: 200m 8
            memory: 64Mi 9
          requests: 10
            cpu: 10m 11
            memory: 16Mi 12
      cainjectorConfig:
        overrideResources:
          limits: 13
            cpu: 200m 14
            memory: 64Mi 15
          requests: 16
            cpu: 10m 17
            memory: 16Mi 18
    "
    1
    定义 cert-manager 控制器 pod 中单个容器可以请求的最大 CPU 和内存量。
    2 5
    您可以指定 cert-manager 控制器 pod 可以请求的 CPU 限制。默认值为 10m
    3 6
    您可以指定 cert-manager 控制器 pod 可以请求的内存限值。默认值为 32Mi
    4
    为 cert-manager 控制器 pod 定义调度程序设置的 CPU 和内存量。
    7
    定义 CA 注入程序 pod 中单个容器可以请求的最大 CPU 和内存量。
    8 11
    您可以指定 CA injector pod 可以请求的 CPU 限制。默认值为 10m
    9 12
    您可以指定 CA 注入程序 pod 可以请求的内存限值。默认值为 32Mi
    10
    为 CA 注入器 pod 定义调度程序设置的 CPU 和内存量。
    13
    定义最大 CPU 和内存量,定义 Webhook pod 中单个容器可以请求的最大 CPU 和内存量。
    14 17
    您可以指定 Webhook pod 可以请求的 CPU 限值。默认值为 10m
    15 18
    您可以指定 Webhook pod 可以请求的内存限值。默认值为 32Mi
    16
    定义 Webhook pod 的调度程序设置的 CPU 和内存量。

    输出示例

    certmanager.operator.openshift.io/cluster patched

验证

  1. 验证 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
    # ...