9.9. cert-manager Operator for Red Hat OpenShift를 사용하여 경로 보안
OpenShift Container Platform에서 경로 API는 시크릿을 통해 TLS 인증서를 참조하는 구성 가능한 옵션을 제공하도록 확장됩니다. 외부 관리형 인증서 기술 프리뷰 기능이 활성화된 경로를 생성하면 수동 개입으로 인한 오류를 최소화하고 인증서 관리 프로세스를 간소화하고 OpenShift Container Platform 라우터를 활성화하여 참조된 인증서를 즉시 제공할 수 있습니다.
cert-manager Operator for Red Hat OpenShift를 사용하여 경로를 보호하는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
9.9.1. 클러스터의 경로를 보호하도록 인증서 구성
다음 단계에서는 Let's Encrypt ACME HTTP-01 챌린지 유형과 함께 cert-manager Operator for Red Hat OpenShift를 사용하여 OpenShift Container Platform 클러스터의 경로 리소스를 보호하는 프로세스를 보여줍니다.
사전 요구 사항
- Red Hat OpenShift용 cert-manager Operator 버전 1.14.0 이상을 설치했습니다.
-
RouteExternalCertificate
기능 게이트를 활성화했습니다. -
routes/custom-host
하위 리소스에 대한생성
및업데이트
권한이 있습니다. -
노출하려는
서비스
리소스가 있습니다.
프로세스
다음 명령을 실행하여 엣지 TLS 종료 및 사용자 정의 호스트 이름을 사용하여
Service
리소스에 대한경로
리소스를 생성합니다. 호스트 이름은 다음 단계에서인증서
리소스를 생성하는 동안 사용됩니다.$ oc create route edge <route_name> \ 1 --service=<service_name> \ 2 --hostname=<hostname> \ 3 --namespace=<namespace> 4
다음 명령을 실행하여 HTTP-01 솔러를 구성할
Issuer
를 만듭니다. 다른 ACME 발행자 유형의 경우 "ACME an issuer 구성"을 참조하십시오.Issuer.yaml
파일 예$ oc create -f - << EOF apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: letsencrypt-acme namespace: <namespace> 1 spec: acme: server: https://acme-v02.api.letsencrypt.org/directory privateKeySecretRef: name: letsencrypt-acme-account-key solvers: - http01: ingress: ingressClassName: openshift-default EOF
- 1
Issuer
가 있는 네임스페이스를 지정합니다. 경로의 네임스페이스와 동일해야 합니다.
다음 명령을 실행하여 경로에 대한
인증서
오브젝트를 생성합니다.secretName
은 cert-manager에서 발행하고 관리할 TLS 시크릿을 지정하고 다음 단계에서 경로에서도 참조합니다.$ oc create -f - << EOF apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: example-route-cert namespace: <namespace> 1 spec: commonName: <hostname> 2 dnsNames: - <hostname> 3 usages: - server auth issuerRef: kind: Issuer name: letsencrypt-acme secretName: <secret_name> 4 EOF
다음 명령을 사용하여 참조된 시크릿을 읽을 수 있는 라우터 서비스 계정 권한을 제공하는
역할
을 생성합니다.$ oc create role secret-reader \ --verb=get,list,watch \ --resource=secrets \ --resource-name=<secret_name> \ 1 --namespace=<namespace> 2
다음 명령을 사용하여 새로 생성된
Role
리소스와 라우터 서비스 계정을 바인딩할RoleBinding
리소스를 생성합니다.$ oc create rolebinding secret-reader-binding \ --role=secret-reader \ --serviceaccount=openshift-ingress:router \ --namespace=<namespace> 1
- 1
- 시크릿과 경로가 모두 있는 네임스페이스를 지정합니다.
경로의
.spec.tls.externalCertificate
필드를 업데이트하여 이전에 생성된 보안을 참조하고 다음 명령을 사용하여 cert-manager에서 발급한 인증서를 사용합니다.$ oc patch route <route_name> \ 1 -n <namespace> \ 2 --type=merge \ -p '{"spec":{"tls":{"externalCertificate":{"name":"<secret_name>"}}}}' 3
검증
다음 명령을 실행하여 인증서가 생성되고 사용할 준비가 되었는지 확인합니다.
$ oc get certificate -n <namespace> 1 $ oc get secret -n <namespace> 2
다음 명령을 실행하여 라우터에서 참조된 외부 인증서를 사용하고 있는지 확인합니다. 명령은 상태 코드
200 OK
와 함께 반환되어야 합니다.$ curl -IsS https://<hostname> 1
- 1
- 경로의 호스트 이름을 지정합니다.
다음 명령을 실행하여 서버 인증서의
subject
,subjectAltName
,issuer
가 모두 curl verbose 출력에서 예상대로 표시되는지 확인합니다.$ curl -v https://<hostname> 1
- 1
- 경로의 호스트 이름을 지정합니다.
이제 경로는 cert-manager가 발행한 참조 시크릿의 인증서로 성공적으로 보호됩니다. cert-manager는 인증서의 라이프 사이클을 자동으로 관리합니다.