9.5. 自定义 cert-manager Operator API 字段
您可以通过覆盖环境变量和参数来为 Red Hat OpenShift API 字段自定义 cert-manager Operator。
要覆盖不支持的参数,您可以在 CertManager
资源中添加 spec.unsupportedConfigOverrides
部分,但不支持使用 spec.unsupportedConfigOverrides
。
9.5.1. 通过覆盖 cert-manager Operator API 中的环境变量来自定义 cert-manager
您可以通过在 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
- 保存更改并退出文本编辑器以应用您的更改。
验证
运行以下命令,验证 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>
9.5.2. 通过覆盖 cert-manager Operator API 中的参数来自定义 cert-manager
您可以通过在 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' 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
- 提供以逗号分隔的名称服务器列表,以查询 DNS-01 自我检查。命名空间的指定形式可以是
<host>:<port>
(例如1.1.1.1:53
),或使用 DNS over HTTPS (DoH)(例如https://1.1.1.1/dns-query
)。 - 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 质询。
注意仅从 cert-manager Operator for Red Hat OpenShift version 1.13.0 或更高版本开始才支持 DNS over HTTPS (DoH)。
- 保存更改并退出文本编辑器以应用您的更改。
验证
运行以下命令,验证是否为 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.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 安装了 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.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 安装了 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: 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
验证
验证 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 # ...