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
섹션을 추가하여 cert-manager Operator for Red Hat OpenShift에 대해 지원되는 환경 변수를 덮어쓸 수 있습니다.
사전 요구 사항
-
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
섹션을 추가하여 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
)로 지정하거나 HTTPS(DoH)를 통해 DNS를 사용할 수 있습니다(예:https://1.1.1.1/dns-query
). - 2
- 해당 도메인과 연결된 권한 있는 이름 서버를 확인하는 대신 재귀 이름 서버만 사용하도록 지정합니다.
- 3
- 쉼표로 구분된 <
host>:<port
> 네임서버 목록을 제공하여 ACME(Automated Certificate Management Environment) HTTP01 자체 검사를 쿼리합니다. 예를 들면--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-ambient-credentials
인수를 사용해야 합니다.
참고DoH(DNS over HTTPS)는 cert-manager Operator for Red Hat OpenShift 버전 1.13.0 이상에서만 지원됩니다.
- 변경 사항을 저장하고 텍스트 편집기를 종료하여 변경 사항을 적용합니다.
검증
다음 명령을 실행하여 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 시크릿 삭제
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 클러스터에 액세스할 수 있습니다. - Red Hat OpenShift용 cert-manager Operator 버전 1.12.0 이상이 설치되어 있어야 합니다.
프로세스
다음 명령을 실행하여
Certificate
오브젝트 및 해당 시크릿을 사용할 수 있는지 확인합니다.$ 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 컨트롤러 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 및 메모리 제한 덮어쓰기
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 클러스터에 액세스할 수 있습니다. - Red Hat OpenShift용 cert-manager Operator 버전 1.12.0 이상이 설치되어 있어야 합니다.
프로세스
다음 명령을 입력하여 cert-manager 컨트롤러, CA 인젝터 및 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 인젝터 및 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 인젝터 및 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 인젝터 Pod에서 요청할 수 있는 CPU 제한을 지정할 수 있습니다. 기본값은
10m
입니다. - 9 12
- CA 인젝터 Pod에서 요청할 수 있는 메모리 제한을 지정할 수 있습니다. 기본값은
32Mi
입니다. - 10
- CA 인젝터 Pod에 대한 스케줄러에서 설정한 CPU 및 메모리 양을 정의합니다.
- 13
- 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 # ...
9.5.5. cert-manager 구성 요소에 대한 스케줄링 덮어쓰기 구성
cert-manager 컨트롤러, CA 인젝터 및 Webhook와 같은 Red Hat OpenShift 구성 요소의 cert-manager Operator for 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
및허용 오차
설정을 정의합니다.$ 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
검증
cert-manager
Pod의 Pod 예약 설정을 확인합니다.다음 명령을 실행하여
cert-manager
네임스페이스의 배포를 확인하여 올바른nodeSelector
및허용 오차
가 있는지 확인합니다.$ 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
및허용 오차
설정을 확인합니다.$ 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