9.7. ACME 발행자 구성

cert-manager Operator for Red Hat OpenShift는 Let's Encrypt 와 같은 ACME(Automated Certificate Management Environment) CA 서버 사용을 지원하여 인증서를 발행합니다. 발행자 API 오브젝트에 시크릿 세부 정보를 지정하여 명시적 인증 정보를 구성합니다. 앰비언트 자격 증명은 Issuer API 개체에서 명시적으로 구성되지 않은 환경, 메타데이터 서비스 또는 로컬 파일에서 추출됩니다.

참고

Issuer 오브젝트는 namespace 범위입니다. 동일한 네임스페이스에서만 인증서를 발행할 수 있습니다. ClusterIssuer 오브젝트를 사용하여 클러스터의 모든 네임스페이스에서 인증서를 발행할 수도 있습니다.

ClusterIssuer 오브젝트를 정의하는 YAML 파일의 예

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: acme-cluster-issuer
spec:
  acme:
    ...

참고

기본적으로 앰비언트 자격 증명과 함께 ClusterIssuer 개체를 사용할 수 있습니다. 앰비언트 자격 증명과 함께 Issuer 오브젝트를 사용하려면 cert-manager 컨트롤러에 대해 --issuer-ambient-credentials 설정을 활성화해야 합니다.

9.7.1. ACME 발행자 정보

cert-manager Operator for Red Hat OpenShift의 ACME 발행자 유형은 ACME(Automated Certificate Management Environment) 인증 기관(CA) 서버를 나타냅니다. ACME CA 서버는 클라이언트가 인증서가 요청되는 도메인 이름을 소유하고 있는지 확인하는 챌린지에 의존합니다. 문제가 발생하면 cert-manager Operator for Red Hat OpenShift에서 인증서를 발행할 수 있습니다. 챌린지가 실패하면 cert-manager Operator for Red Hat OpenShift에서 인증서를 발행하지 않습니다.

참고

Let's Encrypt 및 Internet ACME 서버에서는 프라이빗 DNS 영역이 지원되지 않습니다.

9.7.1.1. 지원되는 ACME 챌린지 유형

cert-manager Operator for Red Hat OpenShift는 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 을 참조하십시오.

9.7.1.2. 지원되는 DNS-01 공급자

cert-manager Operator for Red Hat OpenShift는 ACME 발행자를 위한 다음 DNS-01 공급자를 지원합니다.

  • Amazon Route 53
  • Azure DNS

    참고

    cert-manager Operator for Red Hat OpenShift는 Microsoft Entra ID Pod ID를 사용하여 pod에 관리 ID를 할당하도록 지원하지 않습니다.

  • Google Cloud DNS
  • Webhook

    Red Hat은 OpenShift Container Platform에서 cert-manager가 있는 외부 Webhook를 사용하여 DNS 공급자를 테스트하고 지원합니다. 다음 DNS 공급자는 OpenShift Container Platform에서 테스트 및 지원됩니다.

    참고

    나열되지 않은 DNS 공급자를 사용하면 OpenShift Container Platform에서 작동할 수 있지만 Red Hat에서 이 공급자를 테스트하지 않았기 때문에 Red Hat에서 지원하지 않습니다.

9.7.2. HTTP-01 문제를 해결하기 위해 ACME 발행자 구성

cert-manager Operator for Red Hat OpenShift를 사용하여 ACME 발행자를 설정하여 HTTP-01 문제를 해결할 수 있습니다. 이 절차에서는 Let's Encrypt 를 ACME CA 서버로 사용합니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • 노출하려는 서비스가 있습니다. 이 절차에서 서비스의 이름은 sample-workload 입니다.

프로세스

  1. ACME 클러스터 발행자를 생성합니다.

    1. 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:
                ingressClassName: openshift-default                                 4

      1
      클러스터 발행자의 이름을 제공합니다.
      2
      & lt;secret_private_key >를 ACME 계정 개인 키를 저장할 시크릿 이름으로 바꿉니다.
      3
      ACME 서버의 디렉터리 끝점에 액세스할 URL을 지정합니다. 이 예에서는 Let's Encrypt 스테이징 환경을 사용합니다.
      4
      Ingress 클래스를 지정합니다.
    2. 선택 사항: ingressClassName 을 지정하지 않고 오브젝트를 생성하는 경우 다음 명령을 사용하여 기존 수신을 패치합니다.

      $ oc patch ingress/<ingress-name> --type=merge --patch '{"spec":{"ingressClassName":"openshift-default"}}' -n <namespace>
    3. 다음 명령을 실행하여 ClusterIssuer 오브젝트를 생성합니다.

      $ oc create -f acme-cluster-issuer.yaml
  2. Ingress를 생성하여 사용자 워크로드의 서비스를 노출합니다.

    1. Namespace 오브젝트를 정의하는 YAML 파일을 생성합니다.

      namespace.yaml 파일 예

      apiVersion: v1
      kind: Namespace
      metadata:
        name: my-ingress-namespace 1

      1
      Ingress의 네임스페이스를 지정합니다.
    2. 다음 명령을 실행하여 Namespace 오브젝트를 생성합니다.

      $ oc create -f namespace.yaml
    3. 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
      &lt ;hostname&gt;을 호스트 이름으로 바꿉니다. < host_name>.<cluster_ingress_domain > 구문을 사용하여 *.<cluster_ingress_domain > 와일드카드 DNS 레코드 및 클러스터의 인증서를 제공할 수 있습니다. 예를 들어 apps.<cluster_base_domain>을 사용할 수 있습니다. 그렇지 않으면 선택한 호스트 이름에 대한 DNS 레코드가 있는지 확인해야 합니다.
      9
      노출할 서비스 이름을 지정합니다. 이 예에서는 sample-workload 라는 서비스를 사용합니다.
    4. 다음 명령을 실행하여 Ingress 오브젝트를 생성합니다.

      $ oc create -f ingress.yaml

9.7.3. AWS Route53에 대한 명시적 인증 정보를 사용하여 ACME 발행자 구성

cert-manager Operator for Red Hat OpenShift를 사용하여 AWS에서 명시적 인증 정보를 사용하여 ACME(Automated Certificate Management Environment) 발행자를 설정하여 DNS-01 문제를 해결할 수 있습니다. 이 절차에서는 Let's Encrypt 를 ACME 인증 기관(CA) 서버로 사용하고 Amazon Route 53을 사용하여 DNS-01 문제를 해결하는 방법을 보여줍니다.

사전 요구 사항

  • 명시적 accessKeyIDsecretAccessKey 인증 정보를 제공해야 합니다. 자세한 내용은 업스트림 cert-manager 문서의 Route53 을 참조하십시오.

    참고

    AWS에서 실행되지 않는 OpenShift Container Platform 클러스터의 명시적 인증 정보와 함께 Amazon Route 53을 사용할 수 있습니다.

프로세스

  1. 선택 사항: DNS-01 자체 검사의 네임서버 설정을 재정의합니다.

    이 단계는 대상 퍼블릭 호스팅 영역이 클러스터의 기본 개인 호스팅 영역과 겹치는 경우에만 필요합니다.

    1. 다음 명령을 실행하여 CertManager 리소스를 편집합니다.

      $ oc edit certmanager cluster
    2. 다음 덮어쓰기 인수가 포함된 spec.controllerConfig 섹션을 추가합니다.

      apiVersion: operator.openshift.io/v1alpha1
      kind: CertManager
      metadata:
        name: cluster
        ...
      spec:
        ...
        controllerConfig:                                1
          overrideArgs:
            - '--dns01-recursive-nameservers-only'       2
            - '--dns01-recursive-nameservers=1.1.1.1:53' 3
      1
      spec.controllerConfig 섹션을 추가합니다.
      2
      해당 도메인과 연결된 권한 있는 이름 서버를 확인하는 대신 재귀 이름 서버만 사용하도록 지정합니다.
      3
      DNS-01 자체 검사를 쿼리하려면 쉼표로 구분된 < host>:<port > 네임서버 목록을 제공합니다. 공개 영역과 프라이빗 영역이 겹치지 않도록 1.1.1.1:53 값을 사용해야 합니다.
    3. 파일을 저장하여 변경 사항을 적용합니다.
  2. 선택 사항: 발행자의 네임스페이스를 생성합니다.

    $ oc new-project <issuer_namespace>
  3. 다음 명령을 실행하여 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&gt;를 AWS 시크릿 액세스 키로 바꿉니다.
  4. 발행자를 생성합니다.

    1. Issuer 오브젝트를 정의하는 YAML 파일을 생성합니다.

      issuer.yaml 파일 예

      apiVersion: cert-manager.io/v1
      kind: Issuer
      metadata:
        name: <letsencrypt_staging>                                        1
        namespace: <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: <region_name>                                    8
                secretAccessKeySecretRef:
                  name: "aws-secret"                                     9
                  key: "awsSecretAccessKey"                              10

      1
      발행자의 이름을 입력합니다.
      2
      발행자에 대해 생성한 네임스페이스를 지정합니다.
      3
      ACME 서버의 디렉터리 끝점에 액세스할 URL을 지정합니다. 이 예에서는 Let's Encrypt 스테이징 환경을 사용합니다.
      4
      &lt ;email_address&gt;를 이메일 주소로 바꿉니다.
      5
      & lt;secret_private_key >를 ACME 계정 개인 키를 저장할 시크릿 이름으로 바꿉니다.
      6
      &lt ;aws_key_id&gt;를 AWS 키 ID로 바꿉니다.
      7
      &lt ;hosted_zone_id&gt;를 호스팅 영역 ID로 바꿉니다.
      8
      & lt;region_name& gt;을 AWS 리전 이름으로 바꿉니다. 예를 들면 us-east-1 입니다.
      9
      생성한 시크릿의 이름을 지정합니다.
      10
      AWS 시크릿 액세스 키를 저장하는 생성한 시크릿에 키를 지정합니다.
    2. 다음 명령을 실행하여 Issuer 오브젝트를 생성합니다.

      $ oc create -f issuer.yaml

9.7.4. AWS에서 앰비언트 인증 정보를 사용하여 ACME 발행자 구성

cert-manager Operator for Red Hat OpenShift를 사용하여 AWS에서 앰비언트 인증 정보를 사용하여 ACME 발행자를 설정하여 DNS-01 문제를 해결할 수 있습니다. 이 절차에서는 Let's Encrypt 를 ACME CA 서버로 사용하고 Amazon Route 53을 사용하여 DNS-01 문제를 해결하는 방법을 보여줍니다.

사전 요구 사항

  • 클러스터가 AWS STS(보안 토큰 서비스)를 사용하도록 구성된 경우 AWS Security Token Service 클러스터용 cert-manager Operator에 대한 클라우드 인증 정보 구성 섹션의 지침을 따르십시오.
  • 클러스터가 AWS STS를 사용하지 않는 경우, AWS의 cert-manager Operator for Red Hat OpenShift에 대한 클라우드 인증 정보 구성 섹션의 지침을 따르십시오.

프로세스

  1. 선택 사항: DNS-01 자체 검사의 네임서버 설정을 재정의합니다.

    이 단계는 대상 퍼블릭 호스팅 영역이 클러스터의 기본 개인 호스팅 영역과 겹치는 경우에만 필요합니다.

    1. 다음 명령을 실행하여 CertManager 리소스를 편집합니다.

      $ oc edit certmanager cluster
    2. 다음 덮어쓰기 인수가 포함된 spec.controllerConfig 섹션을 추가합니다.

      apiVersion: operator.openshift.io/v1alpha1
      kind: CertManager
      metadata:
        name: cluster
        ...
      spec:
        ...
        controllerConfig:                                1
          overrideArgs:
            - '--dns01-recursive-nameservers-only'       2
            - '--dns01-recursive-nameservers=1.1.1.1:53' 3
      1
      spec.controllerConfig 섹션을 추가합니다.
      2
      해당 도메인과 연결된 권한 있는 이름 서버를 확인하는 대신 재귀 이름 서버만 사용하도록 지정합니다.
      3
      DNS-01 자체 검사를 쿼리하려면 쉼표로 구분된 < host>:<port > 네임서버 목록을 제공합니다. 공개 영역과 프라이빗 영역이 겹치지 않도록 1.1.1.1:53 값을 사용해야 합니다.
    3. 파일을 저장하여 변경 사항을 적용합니다.
  2. 선택 사항: 발행자의 네임스페이스를 생성합니다.

    $ oc new-project <issuer_namespace>
  3. CertManager 리소스를 수정하여 --issuer-ambient-credentials 인수를 추가합니다.

    $ oc patch certmanager/cluster \
      --type=merge \
      -p='{"spec":{"controllerConfig":{"overrideArgs":["--issuer-ambient-credentials"]}}}'
  4. 발행자를 생성합니다.

    1. Issuer 오브젝트를 정의하는 YAML 파일을 생성합니다.

      issuer.yaml 파일 예

      apiVersion: cert-manager.io/v1
      kind: Issuer
      metadata:
        name: <letsencrypt_staging>                                        1
        namespace: <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:
                hostedZoneID: <hosted_zone_id>                           6
                region: us-east-1

      1
      발행자의 이름을 입력합니다.
      2
      발행자에 대해 생성한 네임스페이스를 지정합니다.
      3
      ACME 서버의 디렉터리 끝점에 액세스할 URL을 지정합니다. 이 예에서는 Let's Encrypt 스테이징 환경을 사용합니다.
      4
      &lt ;email_address&gt;를 이메일 주소로 바꿉니다.
      5
      & lt;secret_private_key >를 ACME 계정 개인 키를 저장할 시크릿 이름으로 바꿉니다.
      6
      &lt ;hosted_zone_id&gt;를 호스팅 영역 ID로 바꿉니다.
    2. 다음 명령을 실행하여 Issuer 오브젝트를 생성합니다.

      $ oc create -f issuer.yaml

9.7.5. GCP Cloud DNS에 대한 명시적 인증 정보를 사용하여 ACME 발행자 구성

cert-manager Operator for Red Hat OpenShift를 사용하여 GCP에서 명시적 인증 정보를 사용하여 ACME 발행자를 설정하여 DNS-01 문제를 해결할 수 있습니다. 이 절차에서는 Let's Encrypt 를 ACME CA 서버로 사용하고 Google CloudDNS를 사용하여 DNS-01 문제를 해결하는 방법을 보여줍니다.

사전 요구 사항

  • Google CloudDNS에 대해 원하는 역할을 가진 Google Cloud 서비스 계정을 설정했습니다. 자세한 내용은 업스트림 cert-manager 문서의 Google CloudDNS 를 참조하십시오.

    참고

    GCP에서 실행되지 않는 OpenShift Container Platform 클러스터의 명시적 인증 정보와 함께 Google CloudDNS를 사용할 수 있습니다.

프로세스

  1. 선택 사항: DNS-01 자체 검사의 네임서버 설정을 재정의합니다.

    이 단계는 대상 퍼블릭 호스팅 영역이 클러스터의 기본 개인 호스팅 영역과 겹치는 경우에만 필요합니다.

    1. 다음 명령을 실행하여 CertManager 리소스를 편집합니다.

      $ oc edit certmanager cluster
    2. 다음 덮어쓰기 인수가 포함된 spec.controllerConfig 섹션을 추가합니다.

      apiVersion: operator.openshift.io/v1alpha1
      kind: CertManager
      metadata:
        name: cluster
        ...
      spec:
        ...
        controllerConfig:                                1
          overrideArgs:
            - '--dns01-recursive-nameservers-only'       2
            - '--dns01-recursive-nameservers=1.1.1.1:53' 3
      1
      spec.controllerConfig 섹션을 추가합니다.
      2
      해당 도메인과 연결된 권한 있는 이름 서버를 확인하는 대신 재귀 이름 서버만 사용하도록 지정합니다.
      3
      DNS-01 자체 검사를 쿼리하려면 쉼표로 구분된 < host>:<port > 네임서버 목록을 제공합니다. 공개 영역과 프라이빗 영역이 겹치지 않도록 1.1.1.1:53 값을 사용해야 합니다.
    3. 파일을 저장하여 변경 사항을 적용합니다.
  2. 선택 사항: 발행자의 네임스페이스를 생성합니다.

    $ oc new-project my-issuer-namespace
  3. 다음 명령을 실행하여 GCP 인증 정보를 저장할 시크릿을 생성합니다.

    $ oc create secret generic clouddns-dns01-solver-svc-acct --from-file=service_account.json=<path/to/gcp_service_account.json> -n my-issuer-namespace
  4. 발행자를 생성합니다.

    1. Issuer 오브젝트를 정의하는 YAML 파일을 생성합니다.

      issuer.yaml 파일 예

      apiVersion: cert-manager.io/v1
      kind: Issuer
      metadata:
        name: <acme_dns01_clouddns_issuer> 1
        namespace: <issuer_namespace> 2
      spec:
        acme:
          preferredChain: ""
          privateKeySecretRef:
            name: <secret_private_key> 3
          server: https://acme-staging-v02.api.letsencrypt.org/directory 4
          solvers:
          - dns01:
              cloudDNS:
                project: <project_id> 5
                serviceAccountSecretRef:
                  name: clouddns-dns01-solver-svc-acct 6
                  key: service_account.json 7

      1
      발행자의 이름을 입력합니다.
      2
      &lt ;issuer_namespace&gt;를 issuer 네임스페이스로 바꿉니다.
      3
      & lt;secret_private_key >를 ACME 계정 개인 키를 저장할 시크릿 이름으로 바꿉니다.
      4
      ACME 서버의 디렉터리 끝점에 액세스할 URL을 지정합니다. 이 예에서는 Let's Encrypt 스테이징 환경을 사용합니다.
      5
      & lt;project_id >를 Cloud DNS 영역이 포함된 GCP 프로젝트의 이름으로 바꿉니다.
      6
      생성한 시크릿의 이름을 지정합니다.
      7
      GCP 시크릿 액세스 키를 저장하는 생성한 시크릿에 키를 지정합니다.
    2. 다음 명령을 실행하여 Issuer 오브젝트를 생성합니다.

      $ oc create -f issuer.yaml

9.7.6. GCP에서 앰비언트 인증 정보를 사용하여 ACME 발행자 구성

cert-manager Operator for Red Hat OpenShift를 사용하여 GCP의 앰비언트 인증 정보를 사용하여 ACME 발행자를 설정하여 DNS-01 문제를 해결할 수 있습니다. 이 절차에서는 Let's Encrypt 를 ACME CA 서버로 사용하고 Google CloudDNS를 사용하여 DNS-01 문제를 해결하는 방법을 보여줍니다.

사전 요구 사항

  • 클러스터가 GCP 워크로드 ID를 사용하도록 구성된 경우 GCP 워크로드 ID를 사용하여 Red Hat OpenShift용 cert-manager Operator에 대한 클라우드 인증 정보 구성 섹션의 지침을 따르십시오.
  • 클러스터에서 GCP Workload Identity를 사용하지 않는 경우 GCP의 cert-manager Operator for Red Hat OpenShift에 대한 클라우드 인증 정보 구성 섹션의 지침을 따르십시오.

프로세스

  1. 선택 사항: DNS-01 자체 검사의 네임서버 설정을 재정의합니다.

    이 단계는 대상 퍼블릭 호스팅 영역이 클러스터의 기본 개인 호스팅 영역과 겹치는 경우에만 필요합니다.

    1. 다음 명령을 실행하여 CertManager 리소스를 편집합니다.

      $ oc edit certmanager cluster
    2. 다음 덮어쓰기 인수가 포함된 spec.controllerConfig 섹션을 추가합니다.

      apiVersion: operator.openshift.io/v1alpha1
      kind: CertManager
      metadata:
        name: cluster
        ...
      spec:
        ...
        controllerConfig:                                1
          overrideArgs:
            - '--dns01-recursive-nameservers-only'       2
            - '--dns01-recursive-nameservers=1.1.1.1:53' 3
      1
      spec.controllerConfig 섹션을 추가합니다.
      2
      해당 도메인과 연결된 권한 있는 이름 서버를 확인하는 대신 재귀 이름 서버만 사용하도록 지정합니다.
      3
      DNS-01 자체 검사를 쿼리하려면 쉼표로 구분된 < host>:<port > 네임서버 목록을 제공합니다. 공개 영역과 프라이빗 영역이 겹치지 않도록 1.1.1.1:53 값을 사용해야 합니다.
    3. 파일을 저장하여 변경 사항을 적용합니다.
  2. 선택 사항: 발행자의 네임스페이스를 생성합니다.

    $ oc new-project <issuer_namespace>
  3. CertManager 리소스를 수정하여 --issuer-ambient-credentials 인수를 추가합니다.

    $ oc patch certmanager/cluster \
      --type=merge \
      -p='{"spec":{"controllerConfig":{"overrideArgs":["--issuer-ambient-credentials"]}}}'
  4. 발행자를 생성합니다.

    1. Issuer 오브젝트를 정의하는 YAML 파일을 생성합니다.

      issuer.yaml 파일 예

      apiVersion: cert-manager.io/v1
      kind: Issuer
      metadata:
        name: <acme_dns01_clouddns_issuer> 1
        namespace: <issuer_namespace>
      spec:
        acme:
          preferredChain: ""
          privateKeySecretRef:
            name: <secret_private_key> 2
          server: https://acme-staging-v02.api.letsencrypt.org/directory 3
          solvers:
          - dns01:
              cloudDNS:
                project: <gcp_project_id> 4

      1
      발행자의 이름을 입력합니다.
      2
      & lt;secret_private_key >를 ACME 계정 개인 키를 저장할 시크릿 이름으로 바꿉니다.
      3
      ACME 서버의 디렉터리 끝점에 액세스할 URL을 지정합니다. 이 예에서는 Let's Encrypt 스테이징 환경을 사용합니다.
      4
      <gcp_project_id>를 Cloud DNS 영역이 포함된 GCP 프로젝트의 이름으로 바꿉니다.
    2. 다음 명령을 실행하여 Issuer 오브젝트를 생성합니다.

      $ oc create -f issuer.yaml

9.7.7. Microsoft Azure DNS에 대한 명시적 인증 정보를 사용하여 ACME 발행자 구성

cert-manager Operator for Red Hat OpenShift를 사용하여 Microsoft Azure에서 명시적 인증 정보를 사용하여 ACME 발행자를 설정하여 DNS-01 문제를 해결할 수 있습니다. 이 절차에서는 Let's Encrypt 를 ACME CA 서버로 사용하고 Azure DNS를 사용하여 DNS-01 문제를 해결하는 방법을 보여줍니다.

사전 요구 사항

  • Azure DNS에 대해 원하는 역할을 가진 서비스 주체를 설정했습니다. 자세한 내용은 업스트림 cert-manager 설명서의 Azure DNS 를 참조하십시오.

    참고

    Microsoft Azure에서 실행되지 않는 OpenShift Container Platform 클러스터에 대해 다음 절차를 수행할 수 있습니다.

프로세스

  1. 선택 사항: DNS-01 자체 검사의 네임서버 설정을 재정의합니다.

    이 단계는 대상 퍼블릭 호스팅 영역이 클러스터의 기본 개인 호스팅 영역과 겹치는 경우에만 필요합니다.

    1. 다음 명령을 실행하여 CertManager 리소스를 편집합니다.

      $ oc edit certmanager cluster
    2. 다음 덮어쓰기 인수가 포함된 spec.controllerConfig 섹션을 추가합니다.

      apiVersion: operator.openshift.io/v1alpha1
      kind: CertManager
      metadata:
        name: cluster
        ...
      spec:
        ...
        controllerConfig:                                1
          overrideArgs:
            - '--dns01-recursive-nameservers-only'       2
            - '--dns01-recursive-nameservers=1.1.1.1:53' 3
      1
      spec.controllerConfig 섹션을 추가합니다.
      2
      해당 도메인과 연결된 권한 있는 이름 서버를 확인하는 대신 재귀 이름 서버만 사용하도록 지정합니다.
      3
      DNS-01 자체 검사를 쿼리하려면 쉼표로 구분된 < host>:<port > 네임서버 목록을 제공합니다. 공개 영역과 프라이빗 영역이 겹치지 않도록 1.1.1.1:53 값을 사용해야 합니다.
    3. 파일을 저장하여 변경 사항을 적용합니다.
  2. 선택 사항: 발행자의 네임스페이스를 생성합니다.

    $ oc new-project my-issuer-namespace
  3. 다음 명령을 실행하여 Azure 인증 정보를 저장할 시크릿을 생성합니다.

    $ oc create secret generic <secret_name> --from-literal=<azure_secret_access_key_name>=<azure_secret_access_key_value> \ 1 2 3
        -n my-issuer-namespace
    1
    &lt ;secret_name&gt;을 시크릿 이름으로 바꿉니다.
    2
    & lt;azure_secret_access_key_name >을 Azure 시크릿 액세스 키 이름으로 바꿉니다.
    3
    & lt;azure_secret_access_key_value&gt;를 Azure 시크릿 키로 바꿉니다.
  4. 발행자를 생성합니다.

    1. Issuer 오브젝트를 정의하는 YAML 파일을 생성합니다.

      issuer.yaml 파일 예

      apiVersion: cert-manager.io/v1
      kind: Issuer
      metadata:
        name: <acme-dns01-azuredns-issuer>   1
        namespace: <issuer_namespace>   2
      spec:
        acme:
          preferredChain: ""
          privateKeySecretRef:
            name: <secret_private_key> 3
          server: https://acme-staging-v02.api.letsencrypt.org/directory 4
          solvers:
          - dns01:
              azureDNS:
                clientID: <azure_client_id> 5
                clientSecretSecretRef:
                  name: <secret_name> 6
                  key: <azure_secret_access_key_name> 7
                subscriptionID: <azure_subscription_id> 8
                tenantID: <azure_tenant_id> 9
                resourceGroupName: <azure_dns_zone_resource_group> 10
                hostedZoneName: <azure_dns_zone> 11
                environment: AzurePublicCloud

      1
      발행자의 이름을 입력합니다.
      2
      &lt ;issuer_namespace&gt;를 issuer 네임스페이스로 바꿉니다.
      3
      & lt;secret_private_key >를 ACME 계정 개인 키를 저장할 시크릿 이름으로 바꿉니다.
      4
      ACME 서버의 디렉터리 끝점에 액세스할 URL을 지정합니다. 이 예에서는 Let's Encrypt 스테이징 환경을 사용합니다.
      5
      &lt ;azure_client_id&gt;를 Azure 클라이언트 ID로 바꿉니다.
      6
      & lt;secret_name >을 클라이언트 시크릿 이름으로 바꿉니다.
      7
      & lt;azure_secret_access_key_name&gt;을 클라이언트 시크릿 키 이름으로 바꿉니다.
      8
      &lt ;azure_subscription_id&gt;를 Azure 서브스크립션 ID로 바꿉니다.
      9
      &lt ;azure_tenant_id&gt;를 Azure 테넌트 ID로 바꿉니다.
      10
      & lt;azure_dns_zone_resource_group >을 Azure DNS 영역 리소스 그룹의 이름으로 바꿉니다.
      11
      & lt;azure_dns_zone& gt;을 Azure DNS 영역 이름으로 바꿉니다.
    2. 다음 명령을 실행하여 Issuer 오브젝트를 생성합니다.

      $ oc create -f issuer.yaml

9.7.8. 추가 리소스