Openshift에서 TLS Certificate 적용하기

Ryu·2022년 7월 25일
0

Openshift에서 동작하는 웹 서비스들에 대해 TLS인증서를 적용해야하는 일이 생겼다.

지금까지는 개인적인 용도로의 인증서는 Openssl을 사용했고 공식적인 용도로는 관련 부서에 요청하면 되었기에 인증서에 대해서 신경쓸 것이 없어서 흥미로운 작업이었다.

Openshift Certificate 구성하기

이를 위해서 잘 정리된 블로그는 아래에 있다.
Openshift Ingress Certificate 구성

위 블로그를 따라하면 Openshift를 설치하면 기본으로 따라오는 Openshift console에 secure하게 접근할 수 있다.

그런데 나는 Openshift 위에 설치된 Cloud Pak for Data(cp4d)라는 앱에 접근하고자 하는데 console과 다르게 해당 앱에는 인증서가 적용되지 않는 모양이었다.

이를 위해 console 서비스와 cp4d서비스의 route를 각각 비교해보니 아래 차이점이 있었다.

  • console 서비스의 TLS termination

  • cp4d 서비스의 TLS termination

console에 도착한 TLS 트래픽은 Ingress Operator를 통해 새로 암호화되고, cp4d에 도착한 TLS 트래픽은 복호화되지 않고 그대로 다음 서비스로 전달되는 것을 알 수 있다.

TLS termination에 대해선 다음 포스트에 정리되어있다. Openshift의 네트워킹

Cloud Pak for Data에 TLS Certificate 적용하기

cp4d 라우트의 TLS termination이 passthrough이니 이 라우트가 연결하는 서비스, 그 서비스로 접근할 수 있는 pod를 봐야한다. 확인해보니 cp4d에 포함된 nginx 인스턴스였다.

이제 옵션은 두가지이다.

  1. cp4d 라우트의 TLS termination을 reencrypt로 바꾸기
  2. cp4d nginx에서 나의 certificate를 사용하도록 해주기

오퍼레이터를 설치한 후 해당 오퍼레이터의 작동 방식을 변경하는 건 지양해야하므로 두번째 옵션을 선택하고 문서를 찾았다.

처음 찾은 문서는 v1.0 버전으로 nginx의 PV에 키 파일을 두고 nginx 서비스를 재시작하는 방법을 안내한다. 최신 문서가 없는 줄 알고 이렇게 적용했었는데, 빠르고 쉽지만 PV의 reclaim policyDelete이므로 좋은 방법은 아니다.

v4.5.x 따라하기

4.5 이상에선 cpd-cli를 사용하는 것을 가이드한다. 다만, 문서대로 따라하면 안되는 것들이 몇개 있다.

cpd-cli는 명령어 수행을 위해서 ansible 컨테이너를 만든다. 이 컨테이너는 cpd-cli-workspace을 볼륨으로 사용하기 때문에 필요한 파일들이 있다면 반드시 cpd-cli-workspace/olm-utils-workspace/work디렉토리에 위치해야 한다. 또한 수행하는 유저가 cpd-cli-workspace에 대해 write권한을 가져야 한다.

0. 변수 설정 (상황에 맞게)

$ export PROJECT_CPD_INSTANCE=cp4d \
  CPD_SECRET_NAME=cpd-tls-secret \
  CPD_CLI_WORKSPACE=/opt/cpd-cli-workspace/olm-utils-workspace/work

1. oc, cpd-cli 로그인

$ oc login --token=sha256... --server=https://api.{clusterName].{baseDomain}:6443

문서를 따라하면 cpd-cli manage login-to-ocp에서 --kubeconfig 옵션에 상관없이 kubeconfig 파일을 못찾는 에러가 발생한다. 컨테이너의 ansible 유저가 kubeconfig를 읽을 수 없기 때문이므로 아래 경로에 컨피그 파일을 넣어주고 권한을 주어야 한다.

$ cp ~/.kube/config ${CPD_CLI_WORKSPACE}/.olm-utils/.kubeconfig
$ chmod o+r ${CPD_CLI_WORKSPACE}/.olm-utils/.kubeconfig
$ cpd-cli manage login-to-ocp --server=https://api.{clusterName].{baseDomain}:6443

2. secret 생성

$ oc create secret generic ${CPD_SECRET_NAME} -n ${PROJECT_CPD_INSTANCE} --from-file=tls.crt=./fullchain.pem --from-file=tls.key=./privkey.pem

3. secret 적용

아래 명령을 통해 라우트를 삭제 후 재생성한다. 라우트 이름, hostname, TLS termination 등이 디폴트로 설정되므로 변경이 필요하면 문서를 참고하여 필요한 옵션을 지정할 수 있다.

$ cpd-cli manage setup-route \
--cpd_instance_ns=${PROJECT_CPD_INSTANCE} \
--cert_secret=${CPD_SECRET_NAME}

4. 확인

이제 cp4d 프론트엔드 페이지로 secure하게 접근할 수 있다.

0개의 댓글