8.4. ACME 발행자를 사용하여 인증서 관리
cert-manager Operator for Red Hat OpenShift는 Let's Encrypt와 같은 ACME CA 서버 사용을 지원하여 인증서를 발행할 수 있습니다.
8.4.1. ACME 발행자 정보
Red Hat OpenShift용 cert-manager Operator의 ACME 발행자 유형은 ACME(Automated Certificate Management Environment) 인증 기관(CA) 서버를 나타냅니다. ACME CA 서버는 클라이언트 가 인증서가 요청되는 도메인 이름을 소유하고 있는지 확인하는 데 의존합니다. 문제가 성공하면 Red Hat OpenShift용 cert-manager Operator에서 인증서를 발행할 수 있습니다. 문제가 실패하면 Red Hat OpenShift용 cert-manager Operator에서 인증서를 발행하지 않습니다.
8.4.1.1. 지원되는 ACME 챌린지 유형
Red Hat OpenShift용 cert-manager Operator는 ACME 발급자에 대해 다음과 같은 챌린지 유형을 지원합니다.
- HTTP-01
HTTP-01 챌린지 유형을 사용하면 도메인의 HTTP URL 끝점에서 계산 키를 제공합니다. ACME CA 서버가 URL에서 키를 가져올 수 있는 경우 도메인의 소유자로 유효성을 검증할 수 있습니다.
자세한 내용은 업스트림 cert-manager 설명서의 HTTP01 을 참조하십시오.
- DNS-01
DNS-01 챌린지 유형을 사용하면 DNS TXT 레코드에서 계산 키를 제공합니다. ACME CA 서버에서 DNS 조회로 키를 가져올 수 있는 경우 도메인의 소유자로 유효성을 검증할 수 있습니다.
자세한 내용은 업스트림 cert-manager 설명서의 DNS01 을 참조하십시오.
8.4.1.2. 지원되는 DNS-01 공급자
Red Hat OpenShift용 cert-manager Operator는 ACME 발급자를 위한 다음 DNS-01 공급자를 지원합니다.
- Amazon Route 53
Azure DNS
참고Red Hat OpenShift용 cert-manager Operator는 Azure AD(Azure Active Directory) Pod ID를 사용하여 Pod에 관리형 ID를 할당하는 것을 지원하지 않습니다.
Google Cloud DNS
참고Red Hat OpenShift용 cert-manager Operator는 Google 워크로드 ID 페더레이션 사용을 지원하지 않습니다.
8.4.2. HTTP-01 문제를 해결하기 위해 ACME 발행자 구성
cert-manager Operator for Red Hat OpenShift를 사용하여 HTTP-01 문제를 해결하기 위해 ACME 발행자를 설정할 수 있습니다. 이 절차에서는 Let's Encrypt를 ACME CA 서버로 사용합니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다. -
노출하려는 서비스가 있습니다. 이 절차에서 서비스의 이름은
sample-workload
입니다.
절차
ACME 클러스터 발행자를 생성합니다.
ClusterIssuer
오브젝트를 정의하는 YAML 파일을 생성합니다.acme-cluster-issuer.yaml
파일 예apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-staging 1 spec: acme: preferredChain: "" privateKeySecretRef: name: <secret_for_private_key> 2 server: https://acme-staging-v02.api.letsencrypt.org/directory 3 solvers: - http01: ingress: class: openshift-default 4
다음 명령을 실행하여
ClusterIssuer
오브젝트를 생성합니다.$ oc create -f acme-cluster-issuer.yaml
사용자 워크로드의 서비스를 노출하는 Ingress를 생성합니다.
Namespace
오브젝트를 정의하는 YAML 파일을 생성합니다.namespace.yaml
파일 예apiVersion: v1 kind: Namespace metadata: name: my-ingress-namespace 1
- 1
- Ingress의 네임스페이스를 지정합니다.
다음 명령을 실행하여
Namespace
오브젝트를 생성합니다.$ oc create -f namespace.yaml
Ingress
오브젝트를 정의하는 YAML 파일을 생성합니다.ingress.yaml
파일 예apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: sample-ingress 1 namespace: my-ingress-namespace 2 annotations: cert-manager.io/cluster-issuer: letsencrypt-staging 3 acme.cert-manager.io/http01-ingress-class: openshift-default 4 spec: ingressClassName: openshift-default 5 tls: - hosts: - <hostname> 6 secretName: sample-tls 7 rules: - host: <hostname> 8 http: paths: - path: / pathType: Prefix backend: service: name: sample-workload 9 port: number: 80
- 1
- Ingress 이름을 지정합니다.
- 2
- Ingress용으로 생성한 네임스페이스를 지정합니다.
- 3
- 생성한 클러스터 발행자를 지정합니다.
- 4
- Ingress 클래스를 지정합니다.
- 5
- Ingress 클래스를 지정합니다.
- 6
- &
lt;hostname
>을 인증서와 연결할 주체 대체 이름으로 바꿉니다. 이 이름은 인증서에 DNS 이름을 추가하는 데 사용됩니다. - 7
- 생성된 인증서를 저장할 보안을 지정합니다.
- 8
- <
;hostname>
;을 호스트 이름으로 교체합니다. <host_name>.<cluster_ingress_domain
> 구문을 사용하여*.<cluster_ingress_domain
> 와일드카드 DNS 레코드를 활용하고 클러스터에 대한 인증서를 제공할 수 있습니다. 예를 들어apps.<cluster_base_domain>을 사용할 수 있습니다
. 그렇지 않으면 선택한 호스트 이름에 대한 DNS 레코드가 있는지 확인해야 합니다. - 9
- 노출할 서비스 이름을 지정합니다. 이 예에서는
sample-workload
라는 서비스를 사용합니다.
다음 명령을 실행하여
Ingress
오브젝트를 생성합니다.$ oc create -f ingress.yaml
8.4.3. DNS-01 문제를 해결하기 위해 ACME 발행자 구성
cert-manager Operator for Red Hat OpenShift를 사용하여 ACME 발행자를 설정하여 DNS-01 문제를 해결할 수 있습니다. 이 절차에서는 Let's Encrypt 를 ACME CA 서버로 사용하고 Amazon Route 53을 사용하여 DNS-01 문제를 해결하는 방법을 보여줍니다.
프라이빗 DNS 영역은 지원되지 않습니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 OpenShift Container Platform 클러스터에 액세스할 수 있습니다. Amazon Route 53에 대한 IAM 역할을 설정했습니다. 자세한 내용은 업스트림 cert-manager 설명서의 Route53 을 참조하십시오.
참고클러스터가 AWS STS(Security Token Service)를 사용하도록 구성되지 않은 경우 명시적
accessKeyID
및secretAccessKey
인증 정보를 제공해야 합니다. 클러스터가 AWS STS를 사용하는 경우 암시적 앰비언트 인증 정보를 사용할 수 있습니다.
절차
선택 사항: DNS-01 자체 검사의 네임서버 설정을 재정의합니다.
이 단계는 대상 퍼블릭 호스팅 영역이 클러스터의 기본 프라이빗 호스팅 영역과 겹치는 경우에만 필요합니다.
다음 명령을 실행하여
CertManager
리소스를 편집합니다.$ oc edit certmanager cluster
다음 덮어쓰기 인수를 사용하여
spec.controllerConfig
섹션을 추가합니다.apiVersion: operator.openshift.io/v1alpha1 kind: CertManager metadata: name: cluster ... spec: ... controllerConfig: 1 overrideArgs: - '--dns01-recursive-nameservers=1.1.1.1:53' 2 - '--dns01-recursive-nameservers-only' 3
- 파일을 저장하여 변경 사항을 적용합니다.
선택 사항: 발급자에 대한 네임스페이스를 생성합니다.
Namespace
오브젝트를 정의하는 YAML 파일을 생성합니다.namespace.yaml
파일 예apiVersion: v1 kind: Namespace metadata: name: my-issuer-namespace 1
- 1
- 발행자의 네임스페이스를 지정합니다.
다음 명령을 실행하여
Namespace
오브젝트를 생성합니다.$ oc create -f namespace.yaml
다음 명령을 실행하여 AWS 인증 정보를 저장할 시크릿을 생성합니다.
$ oc create secret generic aws-secret --from-literal=awsSecretAccessKey=<aws_secret_access_key> \ 1 -n my-issuer-namespace
- 1
- &
lt;aws_secret_access_key>
;를 AWS 시크릿 액세스 키로 교체합니다.
발급자를 만듭니다.
Issuer
오브젝트를 정의하는 YAML 파일을 생성합니다.issuer.yaml
파일 예apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: letsencrypt-staging 1 namespace: my-issuer-namespace 2 spec: acme: server: https://acme-staging-v02.api.letsencrypt.org/directory 3 email: "<email_address>" 4 privateKeySecretRef: name: <secret_private_key> 5 solvers: - dns01: route53: accessKeyID: <aws_key_id> 6 hostedZoneID: <hosted_zone_id> 7 region: us-east-1 secretAccessKeySecretRef: name: "aws-secret" 8 key: "awsSecretAccessKey" 9
- 1
- 발행자의 이름을 지정합니다.
- 2
- 발행자를 위해 생성한 네임스페이스를 지정합니다.
- 3
- ACME 서버의
디렉터리
끝점에 액세스할 URL을 지정합니다. 이 예에서는 Let's Encrypt staging 환경을 사용합니다. - 4
- <
;email_address>
;를 이메일 주소로 바꿉니다. - 5
- &
lt;secret_private_key
>를 ACME 계정 개인 키를 저장할 시크릿 이름으로 교체합니다. - 6
- <
;aws_key_id>
;를 AWS 키 ID로 바꿉니다. - 7
- <
;hosted_zone_id>
;를 호스팅 영역 ID로 바꿉니다. - 8
- 생성한 보안의 이름을 지정합니다.
- 9
- AWS 시크릿 액세스 키를 저장하는 시크릿의 키를 지정합니다.
다음 명령을 실행하여
Issuer
오브젝트를 생성합니다.$ oc create -f issuer.yaml
인증서를 생성합니다.
Certificate
오브젝트를 정의하는 YAML 파일을 생성합니다.certificate.yaml
파일 예apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: my-tls-cert 1 namespace: my-issuer-namespace 2 spec: isCA: false commonName: '<common_name>' 3 secretName: my-tls-cert 4 dnsNames: - '<domain_name>' 5 issuerRef: name: letsencrypt-staging 6 kind: Issuer
다음 명령을 실행하여
Certificate
오브젝트를 생성합니다.$ oc create -f certificate.yaml