오픈시프트에서의 인그레스
GitLab Operator를 사용하여 오픈시프트에서 인그레스를 제공하는 두 가지 지원되는 방법이 있습니다.
NGINX Ingress Controller
이 구성에서 트래픽은 다음과 같이 흐릅니다.
OpenShift 라우터가 NGINX Ingress Controller를 덮어쓰는 문제 해결
OpenShift 환경에서 GitLab Ingresses는 NGINX Service의 외부 IP 주소 대신 GitLab 인스턴스의 호스트명을 받을 수 있습니다. 이는 kubectl get ingress -n <namespace>
의 출력에서 ADDRESS
열에서 확인할 수 있습니다.
OpenShift 라우터 컨트롤러가 다른 Ingress 클래스 때문에 무시해야 하는 대신에 Ingress 리소스를 잘못 업데이트하는 문제가 있습니다. 다음 명령은 OpenShift 라우터 컨트롤러에게 올바르게 Ingresses를 무시하도록 지시합니다.
kubectl -n openshift-ingress-operator \
patch ingresscontroller default \
--type merge \
-p '{"spec":{"namespaceSelector":{"matchLabels":{"openshift.io/cluster-monitoring":"true"}}}}'
이 패치가 이미 생성된 Ingresses 이후에 적용되었을 경우에는 Ingresses를 매뉴얼으로 삭제해야 합니다. GitLab Operator가 이를 다시 생성할 것입니다. 이것들은 NGINX Ingress Controller에 의해 적절히 보유되고 OpenShift 라우터에 의해 무시될 것입니다.
NGINX-Ingress Controller의 생성을 막는 SCC 관련 문제에 대한 문제 해결은 Operator Troubleshooting 문서의 추가 문서에서 확인할 수 있습니다.
구성
기본적으로 GitLab Operator는 GitLab의 NGINX Ingress Controller 차트의 포크를 배포합니다.
Ingress를 위해 NGINX Ingress Controller를 사용하려면 다음을 완료하세요:
- 설치 지침의 첫 번째 단계를 따라 GitLab Operator를 설치합니다.
-
Webservice용으로 생성된 Route와 연결된 도메인 이름을 찾습니다:
$ kubectl get route -n openshift-console console -ojsonpath='{.status.ingress[0].host}' console-openshift-console.yourdomain.com
다음 단계에서 사용할 도메인은
console-openshift-console
이후의 부분입니다. -
GitLab CR 매니페스트를 생성하는 단계에서 도메인을 다음과 같이 설정하세요:
spec: chart: values: global: # 이전 단계에서 도메인을 구성하세요. hosts: domain: yourdomain.com
기본적으로 CertManager는 GitLab 관련 Ingresses의 TLS 인증서를 생성하고 관리합니다. 더 많은 옵션은 TLS 문서를 참조하세요. - 나머지 설치 지침을 따르고 GitLab CR을 적용하고 CR 상태가 최종적으로
Ready
임을 확인하세요. -
NGINX Ingress Controller의 Service(로드 밸런서 유형)의 외부 IP 주소를 찾습니다:
$ kubectl get svc -n gitlab-system gitlab-nginx-ingress-controller -ojsonpath='{.status.loadBalancer.ingress[].ip}' 11.22.33.444
-
DNS 공급자에 A 레코드를 생성하여 이전 단계의 도메인과 외부 IP 주소를 연결합니다:
-
gitlab.yourdomain.com
->11.22.33.444
-
registry.yourdomain.com
->11.22.33.444
-
minio.yourdomain.com
->11.22.33.444
기존의 라우트(예: OpenShift 대시보드의 라우트)가 예상대로 작동하도록 하기 위해 와일드카드 A 레코드 대신 개별 A 레코드를 생성하세요.
이러한 레코드들은 클라우드 제공자의 네트워크 설정의 공용 및 개인 영역에 모두 존재해야 합니다. 이러한 영역 간의 동등성은 적절한 클러스터 내 경로 설정을 보장하고 CertManager가 적절히 인증서를 발급할 수 있도록 합니다. -
그러면 https://gitlab.yourdomain.com
에서 GitLab에 액세스할 수 있어야 합니다.
OpenShift Routes
기본적으로 OpenShift는 라우트를 사용하여 Ingress를 관리합니다.
이 구성에서 트래픽은 다음과 같이 흐릅니다.
설정
Ingress를 위해 OpenShift Routes를 사용하려면 다음을 완료하세요:
- 설치 지침의 첫 번째 단계를 따라 GitLab Operator를 설치합니다.
-
Webservice용으로 생성된 Route와 연결된 도메인 이름을 찾습니다:
$ kubectl get route -n openshift-console console -ojsonpath='{.status.ingress[0].host}' console-openshift-console.yourdomain.com
다음 단계에서 사용할 도메인은
console-openshift-console
이후의 부분입니다. -
GitLab CR 매니페스트를 생성하는 단계에서도 다음을 설정하세요:
spec: chart: values: # NGINX Ingress Controller를 비활성화합니다. nginx-ingress: enabled: false global: # 이전 단계에서 도메인을 구성하세요. hosts: domain: yourdomain.com ingress: # Ingress 객체에서 `spec.ingressClassName`를 해제하여 OpenShift Router가 소유권을 갖도록 설정합니다. class: none annotations: # OpenShift 문서에 따르면 "edge"가 기본값이지만 TLS 구성은 이 주석이 매뉴얼으로 설정될 때만 Route에 전달됩니다. route.openshift.io/termination: "edge"
- 나머지 설치 지침을 따르고 GitLab CR을 적용하고 CR 상태가 최종적으로
Ready
임을 확인하세요.
그러면 https://gitlab.yourdomain.com
에서 GitLab에 액세스할 수 있어야 합니다.
이 구성에서는 OpenShift Routes가 GitLab Operator에 의해 생성된 Ingresses를 번역하여 생성됩니다. 이러한 번역에 대한 자세한 정보는 Route 문서에서 확인할 수 있습니다.