Openshift Custom Domain 설정

Overview

Kubernetes같은 경우는 클러스터 생성시, 도메인이 필요하지 않기 때문에 원하는 도메인을 사용하고 싶다면 별도로 ingress를 통해 세팅해줘야하는데요,

Openshift는 클러스터 생성시, 도메인을 넣어서 설치를 하게 되어있습니다. 그래서 클러스터가 가지고 있는 기본 도메인이 있고 서비스를 expose하여 route를 생성하게 되면 <svcName>.apps.<basedomain>이런 식으로 주소를 부여받게 됩니다.

그런데 Managed Cluster의 경우 자동적으로 클러스터에 부여받는 domain이 있는데요, 대부분의 경우 그 domain이 어마어마하게 깁니다.

$ oc get route

NAME                               HOST/PORT                                                                                                                                PATH   SERVICES                                       PORT    TERMINATION     WILDCARD

test-router         test-router-testnamespace.kr-ddd-298fdf11110631bdad517f871be4f871-0000.seo01.containers.appdomain.cloud                test-svc    8000                    None

미관상 보기 좋게 하기위해서, 또는 기존의 도메인 말고 다른 도메인으로 클러스터의 서비스에 접근하고 싶을 때, ingress를 사용하면 간단하게 해결할 수 있습니다.

주의!
Openshift의 base domain을 변경한다는 뜻이 아닙니다!

Steps

1. Custom Domain 준비하기

사용할 도메인을 준비하여 클러스터를 가리키게 합니다.
image

Managed Cluster의 경우 basedomain을 그대로 CNAME으로 등록하면 편합니다.

2. Cert준비

https연결을 위해 새로 만들 도메인의 cert를 발급받습니다.

참고 : 호다닥 공부해보는 x509와 친구들(2) - Let’s Encrypt

http연결에 대해서는 해당 과정 불필요

3. secret 생성

발급받은 cert를 ocp의 secret으로 생성합니다.

$ oc create secret tls testtest-ca \
--cert={location of certificate} \
--key={location of private key}

4. ingress 생성

다음으로 custom domain으로 연결할 서비스를 ingress로 정의해줍니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
spec:
  tls:
  - hosts:
    - app.testtest.testdomain.com
    secretName: testtest-ca
    - host: app.testtest.testdomain.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: test-svc
                port:
                  number: 80

그리고 배포해주면

$ oc get ingress
NAME               CLASS    HOSTS                                                                                                                            ADDRESS                                                                              PORTS     AGE
test-ingress   <none>   app.testtest.testdomain.com                                                                                                        kr-ddd-298fdf0f111631bdad517f8111e4f871-0000.seo01.containers.appdomain.cloud   80, 443   6h34m


$ oc get route

NAME                               HOST/PORT                                                                                                                                PATH   SERVICES                                       PORT    TERMINATION     WILDCARD

test-router         app.testtest.testdomain.com                test-svc    80                    None

생성했던 ingress와 ingress규칙별로 route가 생성되는 것을 확인할 수 있습니다.

이제 길고 어지러운 주소 대신 깔끔한 주소로 서비스를 사용할 수 있습니다!!


댓글남기기