9.5. cert-manager Operator API フィールドのカスタマイズ
環境変数と引数をオーバーライドすることで、cert-manager Operator for Red Hat OpenShift API のフィールドをカスタマイズできます。
サポートされていない引数をオーバーライドするには、CertManager
リソースに spec.unsupportedConfigOverrides
セクションを追加しますが、spec.unsupportedConfigOverrides
の使用はサポートされていません。
9.5.1. cert-manager Operator API から環境変数をオーバーライドして cert-manager をカスタマイズ
CertManager
リソースに spec.controllerConfig
セクションを追加することで、cert-manager Operator for Red Hat OpenShift でサポートされている環境変数をオーバーライドできます。
前提条件
-
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform クラスターにアクセスできる。
手順
次のコマンドを実行して、
CertManager
リソースを編集します。oc edit certmanager cluster
$ oc edit certmanager cluster
Copy to Clipboard Copied! 次のオーバーライド引数を指定して、
spec.controllerConfig
セクションを追加します。apiVersion: operator.openshift.io/v1alpha1 kind: CertManager metadata: name: cluster ... spec: ... controllerConfig: overrideEnv: - name: HTTP_PROXY value: http://<proxy_url> - name: HTTPS_PROXY value: https://<proxy_url> - name: NO_PROXY value: <ignore_proxy_domains>
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 Copied! - 変更を保存してテキストエディターを終了し、変更を適用します。
検証
次のコマンドを実行して、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-manager
Copy to Clipboard Copied! 出力例
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 39s
Copy to Clipboard Copied! 次のコマンドを実行して、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 yaml
Copy to Clipboard Copied! 出力例
env: ... - name: HTTP_PROXY value: http://<PROXY_URL> - name: HTTPS_PROXY value: https://<PROXY_URL> - name: NO_PROXY value: <IGNORE_PROXY_DOMAINS>
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 Copied!
9.5.2. cert-manager Operator API からの引数をオーバーライドして cert-manager をカスタマイズ
CertManager
リソースに spec.controllerConfig
セクションを追加することで、cert-manager Operator for Red Hat OpenShift でサポートされる引数をオーバーライドできます。
前提条件
-
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform クラスターにアクセスできる。
手順
次のコマンドを実行して、
CertManager
リソースを編集します。oc edit certmanager cluster
$ oc edit certmanager cluster
Copy to Clipboard Copied! 次のオーバーライド引数を指定して、
spec.controllerConfig
セクションを追加します。apiVersion: operator.openshift.io/v1alpha1 kind: CertManager metadata: name: cluster ... spec: ... controllerConfig: overrideArgs: - '--dns01-recursive-nameservers=<server_address>' - '--dns01-recursive-nameservers-only' - '--acme-http01-solver-nameservers=<host>:<port>' - '--v=<verbosity_level>' - '--metrics-listen-address=<host>:<port>' - '--issuer-ambient-credentials' webhookConfig: overrideArgs: - '--v=4' cainjectorConfig: overrideArgs: - '--v=2'
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 Copy to Clipboard Copied! - 1
- DNS-01 セルフチェックをクエリーするネームサーバーのコンマ区切りリストを指定します。ネームサーバーは、
<host>:<port>
(例:1.1.1.1:53
) で指定することも、DNS over HTTPS (DoH) (例:https://1.1.1.1/dns-query
) を使用することもできます。 - 2
- そのドメインに関連付けられた権限のあるネームサーバーをチェックする代わりに、再帰的なネームサーバーのみを使用するように指定します。
- 3
- Automated Certificate Management Environment (ACME) HTTP01 セルフチェックをクエリーするための
<host>:<port>
ネームサーバーをコンマ区切りのリストで指定します。たとえば--acme-http01-solver-nameservers=1.1.1.1:53
です。 - 4 7 8
- ログの詳細レベルを設定するように設定し、ログメッセージの詳細レベルを決定します。
- 5
- メトリクスエンドポイントのホストとポートを指定します。デフォルト値は
--metrics-listen-address=0.0.0.0:9402
です。 - 6
- アンビエント認証情報を使用して DNS-01 チャレンジを解決するように ACME Issuer を設定する場合は、
--issuer-ambient-credentials
引数を使用する必要があります。
注記DNS over HTTPS (DoH) は、cert-manager Operator for Red Hat OpenShift バージョン 1.13.0 以降でのみサポートされます。
- 変更を保存してテキストエディターを終了し、変更を適用します。
検証
次のコマンドを実行して、cert-manager Pod の引数が更新されているか確認します。
oc get pods -n cert-manager -o yaml
$ oc get pods -n cert-manager -o yaml
Copy to Clipboard Copied! 出力例
... 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
... 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 Copied!
9.5.3. 証明書の削除時に TLS シークレットを自動的に削除する
CertManager
リソースに spec.controllerConfig
セクションを追加することで、cert-manager Operator for Red Hat OpenShift の --enable-certificate-owner-ref
フラグを有効にできます。--enable-certificate-owner-ref
フラグは、TLS 証明書が保存されているシークレットの所有者として証明書リソースを設定します。
cert-manager Operator for Red Hat OpenShift をアンインストールするか、クラスターから証明書リソースを削除すると、シークレットは自動的に削除されます。証明書 TLS シークレットが使用されている場所によっては、これが原因でネットワーク接続の問題が発生する可能性があります。
前提条件
-
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform クラスターにアクセスできる。 - cert-manager Operator for Red Hat OpenShift のバージョン 1.12.0 以降がインストールされている。
手順
次のコマンドを実行して、
Certificate
オブジェクトとそのシークレットが利用可能であることを確認します。oc get certificate
$ oc get certificate
Copy to Clipboard Copied! 出力例
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 8h
Copy to Clipboard Copied! 次のコマンドを実行して、
CertManager
リソースを編集します。oc edit certmanager cluster
$ oc edit certmanager cluster
Copy to Clipboard Copied! 次のオーバーライド引数を指定して、
spec.controllerConfig
セクションを追加します。apiVersion: operator.openshift.io/v1alpha1 kind: CertManager metadata: name: cluster # ... spec: # ... controllerConfig: overrideArgs: - '--enable-certificate-owner-ref'
apiVersion: operator.openshift.io/v1alpha1 kind: CertManager metadata: name: cluster # ... spec: # ... controllerConfig: overrideArgs: - '--enable-certificate-owner-ref'
Copy to Clipboard Copied! - 変更を保存してテキストエディターを終了し、変更を適用します。
検証
次のコマンドを実行して、cert-manager コントローラー 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 yaml
Copy to Clipboard Copied! 出力例
# ... metadata: name: cert-manager-6e4b4d7d97-zmdnb namespace: cert-manager # ... spec: containers: - args: - --enable-certificate-owner-ref
# ... metadata: name: cert-manager-6e4b4d7d97-zmdnb namespace: cert-manager # ... spec: containers: - args: - --enable-certificate-owner-ref
Copy to Clipboard Copied!
9.5.4. cert-manager コンポーネントの CPU およびメモリー制限をオーバーライドする
cert-manager Operator for Red Hat OpenShift をインストールした後、cert-manager コントローラー、CA インジェクター、Webhook などの cert-manager コンポーネントの cert-manager Operator for Red Hat OpenShift API から CPU およびメモリーの制限を設定できます。
前提条件
-
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform クラスターにアクセスできる。 - cert-manager Operator for Red Hat OpenShift のバージョン 1.12.0 以降がインストールされている。
手順
次のコマンドを入力して、cert-manager コントローラー、CA インジェクター、および Webhook のデプロイメントが使用可能であることを確認します。
oc get deployment -n cert-manager
$ oc get deployment -n cert-manager
Copy to Clipboard Copied! 出力例
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 53m
Copy to Clipboard Copied! CPU とメモリーの制限を設定する前に、次のコマンドを入力して cert-manager コントローラー、CA インジェクター、および Webhook の既存の設定を確認します。
oc get deployment -n cert-manager -o yaml
$ oc get deployment -n cert-manager -o yaml
Copy to Clipboard Copied! 出力例
# ... metadata: name: cert-manager namespace: cert-manager # ... spec: template: spec: containers: - name: cert-manager-controller resources: {} # ... metadata: name: cert-manager-cainjector namespace: cert-manager # ... spec: template: spec: containers: - name: cert-manager-cainjector resources: {} # ... metadata: name: cert-manager-webhook namespace: cert-manager # ... spec: template: spec: containers: - name: cert-manager-webhook resources: {} # ...
# ... 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 Copied! cert-manager コントローラー、CA インジェクター、Webhook の CPU およびメモリー制限を設定するには、次のコマンドを入力します。
$ oc patch certmanager.operator cluster --type=merge -p=" spec: controllerConfig: overrideResources: 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 "
$ 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 "
Copy to Clipboard Copied! - 1
- cert-manager コントローラー Pod 内の 1 つのコンテナーが要求できる CPU とメモリーの最大量を定義します。
- 2 5
- cert-manager コントローラー Pod が要求できる CPU 制限を指定できます。デフォルト値は
10m
です。 - 3 6
- cert-manager コントローラー Pod が要求できるメモリー制限を指定できます。デフォルト値は
32Mi
です。 - 4
- cert-manager コントローラー Pod のスケジューラーによって設定される CPU とメモリーの量を定義します。
- 7
- CA インジェクター Pod 内の 1 つのコンテナーが要求できる CPU とメモリーの最大量を定義します。
- 8 11
- CA インジェクター Pod が要求できる CPU 制限を指定できます。デフォルト値は
10m
です。 - 9 12
- CA インジェクター Pod が要求できるメモリー制限を指定できます。デフォルト値は
32Mi
です。 - 10
- CA インジェクター Pod のスケジューラーによって設定される CPU とメモリーの量を定義します。
- 13
- Webhook Pod 内の 1 つのコンテナーが要求できる CPU とメモリーの最大量を定義します。
- 14 17
- Webhook Pod が要求できる CPU 制限を指定できます。デフォルト値は
10m
です。 - 15 18
- Webhook Pod が要求できるメモリー制限を指定できます。デフォルト値は
32Mi
です。 - 16
- Webhook Pod のスケジューラーによって設定される CPU とメモリーの量を定義します。
出力例
certmanager.operator.openshift.io/cluster patched
certmanager.operator.openshift.io/cluster patched
Copy to Clipboard Copied!
検証
cert-manager コンポーネントの CPU とメモリーの制限が更新されていることを確認します。
oc get deployment -n cert-manager -o yaml
$ oc get deployment -n cert-manager -o yaml
Copy to Clipboard Copied! 出力例
# ... 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 # ...
# ... 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 Copied!
9.5.5. cert-manager コンポーネントのスケジュールオーバーライドを設定する
cert-manager コントローラー、CA インジェクター、Webhook などの cert-manager Operator for Red Hat OpenShift コンポーネントの Pod スケジューリングを、cert-manager Operator for Red Hat OpenShift API から設定できます。
前提条件
-
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform クラスターにアクセスできる。 - cert-manager Operator for Red Hat OpenShift のバージョン 1.15.0 以降がインストールされている。
手順
次のコマンドを実行して
certmanager.operator
カスタムリソースを更新し、目的のコンポーネントの Pod スケジューリングオーバーライドを設定します。nodeSelector
およびtolerations
設定を定義するには、controllerConfig
、webhookConfig
、またはcainjectorConfig
セクションのoverrideScheduling
フィールドを使用します。oc patch certmanager.operator cluster --type=merge -p="
$ oc patch certmanager.operator cluster --type=merge -p=" spec: controllerConfig: overrideScheduling: nodeSelector: node-role.kubernetes.io/control-plane: ''
1 tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule
2 webhookConfig: overrideScheduling: nodeSelector: node-role.kubernetes.io/control-plane: ''
3 tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule
4 cainjectorConfig: overrideScheduling: nodeSelector: node-role.kubernetes.io/control-plane: ''
5 tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule"
6 Copy to Clipboard Copied! - 1
- cert-manager コントローラーデプロイメントの
nodeSelector
を定義します。 - 2
- cert-manager コントローラーデプロイメントの
tolerations
を定義します。 - 3
- cert-manager webhook デプロイメントの
nodeSelector
を定義します。 - 4
- cert-manager webhook デプロイメントの
tolerations
を定義します。 - 5
- cert-manager cainjector デプロイメントの
nodeSelector
を定義します。 - 6
- cert-manager cainjector デプロイメントの
tolerations
を定義します。
検証
cert-manager
Pod の Pod スケジューリング設定を検証します。次のコマンドを実行して、
cert-manager
namespace のデプロイメントをチェックし、正しいnodeSelector
とtolerations
があることを確認します。oc get pods -n cert-manager -o wide
$ oc get pods -n cert-manager -o wide
Copy to Clipboard Copied! 出力例
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! 次のコマンドを実行して、デプロイメントに適用されている
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! 出力例
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 {"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 Copied!
次のコマンドを実行して、
cert-manager
namespace 内の Pod スケジューリングイベントを検証します。oc get events -n cert-manager --field-selector reason=Scheduled
$ oc get events -n cert-manager --field-selector reason=Scheduled
Copy to Clipboard Copied!