오픈쉬프트에서의 인그레스
GitLab Operator와 함께 오픈쉬프트에서 인그레스를 제공하는 두 가지 지원되는 방법이 있습니다.
NGINX Ingress Controller
이 구성에서 트래픽은 다음과 같이 흐릅니다:
NGINX Ingress Controller에 대한 OpenShift 라우터 덮어쓰기의 해결책
OpenShift 환경에서 GitLab 인그레스가 NGINX 서비스의 외부 IP 주소 대신 GitLab 인스턴스의 호스트명을 받을 수 있습니다. 이는 kubectl get ingress -n <namespace>
명령의 ADDRESS
열에서 확인할 수 있습니다.
OpenShift 라우터 컨트롤러는 다른 인그레스 클래스 때문에 인그레스 자원을 무시하는 대신 인그레스 자원을 잘못 업데이트합니다. 다음 명령어는 OpenShift 라우터 컨트롤러가 OpenShift에 배포된 표준 인그레스 이외의 인그레스를 제대로 무시하도록 지시합니다:
kubectl -n openshift-ingress-operator \
patch ingresscontroller default \
--type merge \
-p '{"spec":{"namespaceSelector":{"matchLabels":{"openshift.io/cluster-monitoring":"true"}}}}'
이 패치는 이미 생성된 인그레스 이후에 적용된 경우 인그레스를 수동으로 삭제해야 합니다. GitLab Operator가 이를 수동으로 다시 생성합니다. 그러면 이들은 올바르게 NGINX Ingress Controller 소유가 되며 OpenShift 라우터에 의해 무시됩니다.
주의: 인그레스를 수동으로 삭제할 때 버그가 발생할 수 있습니다. 이러한 문제에 대한 해결책은 GitLab Operator 컨트롤러 Pod를 수동으로 삭제하는 것입니다. 자세한 내용은 #315를 참조하세요.
NGINX-Ingress Controller 생성을 방해하는 SCC 관련 문제를 해결하기 위한 TS(TrobleShooting)는 추가 문서인 Operator Troubleshooting 문서에서 확인할 수 있습니다.
구성
기본적으로 GitLab Operator는 GitLab의 NGINX Ingress Controller 차트 포크를 배포합니다.
인그레스에 NGINX Ingress Controller를 사용하려면 다음을 완료하세요:
- 설치 지침의 첫 번째 단계를 따라 GitLab Operator를 설치합니다.
-
Webservice에 대해 생성된 라우트와 관련된 도메인 이름을 찾습니다:
$ 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 관련 인그레스를 위해 TLS 인증서를 생성하고 관리합니다. 추가 옵션에 대해서는 TLS 문서를 참조하세요.
- 나머지 설치 지침을 따라 GitLab CR을 적용하고 CR 상태가 최종적으로
Ready
임을 확인하세요. -
NGINX Ingress Controller의 서비스(로드밸런서 유형)의 외부 IP 주소를 찾아보세요:
$ kubectl get svc -n gitlab-system gitlab-nginx-ingress-controller -ojsonpath='{.status.loadBalancer.ingress[].ip}' 11.22.33.444
-
DNS 제공자에서 도메인과 이전 단계의 외부 IP 주소를 연결하는 A 레코드를 생성하세요:
-
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는 인그레스를 관리하기 위해 Routes를 사용합니다.
이 구성에서 트래픽은 다음과 같이 흐릅니다:
주의: NGINX Ingress Controller 대신 OpenShift 라우터를 사용하는 경우 SSH를 통한 Git은 지원되지 않습니다.
설정
인그레스에 OpenShift Routes를 사용하려면 다음을 완료하세요:
- 설치 지침의 첫 번째 단계를 따라 GitLab Operator를 설치합니다.
-
Webservice에 대해 생성된 라우트와 관련된 도메인 이름을 찾습니다:
$ 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 라우터가 소유하도록 합니다. class: none annotations: # OpenShift 문서에 따르면 "edge"가 기본값이지만 이 주석이 수동으로 설정되지 않으면 # TLS 설정은 해당 주석이 수동으로 설정될 때만 Route로 전달됩니다. route.openshift.io/termination: "edge"
주의: 기본적으로 CertManager는 GitLab 관련 라우트를 위해 TLS 인증서를 생성하고 관리합니다. 추가 옵션에 대해서는 TLS 문서를 참조하세요. OpenShift 클러스터가 와일드카드 인증서로 보안되어 있는 경우, 옵션 2 를 통해 와일드카드 인증서를 사용하여 GitLab 관련 라우트를 보안할 수 있습니다.
- 나머지 설치 지침을 따라 GitLab CR을 적용하고 CR 상태가 최종적으로
Ready
임을 확인하세요.
그러면 https://gitlab.yourdomain.com
에서 GitLab에 액세스할 수 있어야 합니다.
이 구성에서 OpenShift Routes는 GitLab Operator가 생성한 인그레스를 변환하여 생성됩니다. 이 변환에 대한 자세한 정보는 Route 문서에서 확인할 수 있습니다.