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입니다.
프로세스
ACME 클러스터 발행자를 생성합니다.
ClusterIssuer오브젝트를 정의하는 YAML 파일을 생성합니다.acme-cluster-issuer.yaml파일의 예apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-staging1 spec: acme: preferredChain: "" privateKeySecretRef: name: <secret_for_private_key>2 server: https://acme-staging-v02.api.letsencrypt.org/directory3 solvers: - http01: ingress: ingressClassName: openshift-default4 선택 사항:
ingressClassName을 지정하지 않고 오브젝트를 생성하는 경우 다음 명령을 사용하여 기존 수신을 패치합니다.$ oc patch ingress/<ingress-name> --type=merge --patch '{"spec":{"ingressClassName":"openshift-default"}}' -n <namespace>다음 명령을 실행하여
ClusterIssuer오브젝트를 생성합니다.$ oc create -f acme-cluster-issuer.yaml
Ingress를 생성하여 사용자 워크로드의 서비스를 노출합니다.
Namespace오브젝트를 정의하는 YAML 파일을 생성합니다.namespace.yaml파일 예apiVersion: v1 kind: Namespace metadata: name: my-ingress-namespace1 - 1
- Ingress의 네임스페이스를 지정합니다.
다음 명령을 실행하여
Namespace오브젝트를 생성합니다.$ oc create -f namespace.yamlIngress오브젝트를 정의하는 YAML 파일을 생성합니다.ingress.yaml파일 예apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: sample-ingress1 namespace: my-ingress-namespace2 annotations: cert-manager.io/cluster-issuer: letsencrypt-staging3 spec: ingressClassName: openshift-default4 tls: - hosts: - <hostname>5 secretName: sample-tls6 rules: - host: <hostname>7 http: paths: - path: / pathType: Prefix backend: service: name: sample-workload8 port: number: 80- 1
- Ingress의 이름을 지정합니다.
- 2
- Ingress에 대해 생성한 네임스페이스를 지정합니다.
- 3
- 생성한 클러스터 발행자를 지정합니다.
- 4
- Ingress 클래스를 지정합니다.
- 5
- &
lt;hostname>을 인증서와 연결할 주체 대체 이름(SAN)으로 바꿉니다. 이 이름은 인증서에 DNS 이름을 추가하는 데 사용됩니다. - 6
- 인증서를 저장하는 보안을 지정합니다.
- 7
- <
;hostname>을 호스트 이름으로 바꿉니다. <host_name>.<cluster_ingress_domain> 구문을 사용하여*.<cluster_ingress_domain> 와일드카드 DNS 레코드 및 클러스터의 인증서를 제공할 수 있습니다. 예를 들어apps.<cluster_base_domain>을 사용할 수 있습니다. 그렇지 않으면 선택한 호스트 이름에 대한 DNS 레코드가 있는지 확인해야 합니다. - 8
- 노출할 서비스 이름을 지정합니다. 이 예에서는
sample-workload라는 서비스를 사용합니다.
다음 명령을 실행하여
Ingress오브젝트를 생성합니다.$ oc create -f ingress.yaml