오픈시프트에서의 인그레스

GitLab Operator를 사용하여 오픈시프트에서 인그레스를 제공하는 두 가지 지원되는 방법이 있습니다.

NGINX Ingress Controller

이 구성에서 트래픽은 다음과 같이 흐릅니다.

graph TD U(End User) --> GTLB([gitlab.domain.com]) GTLB --resolves to--> SRV_N[/Service/gitlab-nginx-ingress-controller/] SRV_N --connects to--> DPL_N[Deployment/gitlab-nginx-ingress-controller] DPL_N -- looks up corresponding ingress --> ING{{Ingress/gitlab-webservice-default}} ING --proxies to--> SRV_W[/Service/gitlab-webservice-default/] SRV_W --connects to--> DPL_W[Deployment/gitlab-webservice-default]

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 라우터에 의해 무시될 것입니다.

note
Ingresses를 매뉴얼으로 삭제할 때 버그가 발생할 수 있습니다. 버그 해결을 위해 GitLab Operator 컨트롤러 Pod를 매뉴얼으로 삭제해야 합니다. 자세한 내용은 #315를 참조하세요.

NGINX-Ingress Controller의 생성을 막는 SCC 관련 문제에 대한 문제 해결은 Operator Troubleshooting 문서의 추가 문서에서 확인할 수 있습니다.

구성

기본적으로 GitLab Operator는 GitLab의 NGINX Ingress Controller 차트의 포크를 배포합니다.

Ingress를 위해 NGINX Ingress Controller를 사용하려면 다음을 완료하세요:

  1. 설치 지침의 첫 번째 단계를 따라 GitLab Operator를 설치합니다.
  2. Webservice용으로 생성된 Route와 연결된 도메인 이름을 찾습니다:

    $ kubectl get route -n openshift-console console -ojsonpath='{.status.ingress[0].host}'
    console-openshift-console.yourdomain.com
    

    다음 단계에서 사용할 도메인은 console-openshift-console 이후의 부분입니다.

  3. GitLab CR 매니페스트를 생성하는 단계에서 도메인을 다음과 같이 설정하세요:

    spec:
      chart:
        values:
          global:
            # 이전 단계에서 도메인을 구성하세요.
            hosts:
              domain: yourdomain.com
    
    note
    기본적으로 CertManager는 GitLab 관련 Ingresses의 TLS 인증서를 생성하고 관리합니다. 더 많은 옵션은 TLS 문서를 참조하세요.
  4. 나머지 설치 지침을 따르고 GitLab CR을 적용하고 CR 상태가 최종적으로 Ready임을 확인하세요.
  5. NGINX Ingress Controller의 Service(로드 밸런서 유형)의 외부 IP 주소를 찾습니다:

    $ kubectl get svc -n gitlab-system gitlab-nginx-ingress-controller -ojsonpath='{.status.loadBalancer.ingress[].ip}'
    11.22.33.444
    
  6. 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 레코드를 생성하세요.

    note
    이러한 레코드들은 클라우드 제공자의 네트워크 설정의 공용 개인 영역에 모두 존재해야 합니다. 이러한 영역 간의 동등성은 적절한 클러스터 내 경로 설정을 보장하고 CertManager가 적절히 인증서를 발급할 수 있도록 합니다.

그러면 https://gitlab.yourdomain.com에서 GitLab에 액세스할 수 있어야 합니다.

OpenShift Routes

기본적으로 OpenShift는 라우트를 사용하여 Ingress를 관리합니다.

이 구성에서 트래픽은 다음과 같이 흐릅니다.

graph TD U(End User) --> GTLB([gitlab.domain.com]) GTLB --resolves to--> SRV_R[/Service/router-default/] SRV_R --connects to--> DPL_R[Deployment/router-default] DPL_R -- looks up corresponding Route --> RT{{Route/gitlab-webservice-default-xyz}} RT --proxies to--> SRV_W[/Service/gitlab-webservice-default/] SRV_W --connects to--> DPL_W[Deployment/gitlab-webservice-default]
note
NGINX Ingress Controller 대신 OpenShift 라우터를 사용하여 Ingress를 하는 경우 SSH를 통한 Git은 지원되지 않습니다.

설정

Ingress를 위해 OpenShift Routes를 사용하려면 다음을 완료하세요:

  1. 설치 지침의 첫 번째 단계를 따라 GitLab Operator를 설치합니다.
  2. Webservice용으로 생성된 Route와 연결된 도메인 이름을 찾습니다:

    $ kubectl get route -n openshift-console console -ojsonpath='{.status.ingress[0].host}'
    console-openshift-console.yourdomain.com
    

    다음 단계에서 사용할 도메인은 console-openshift-console 이후의 부분입니다.

  3. 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"
    
    note
    기본적으로 CertManager는 GitLab 관련 Routes의 TLS 인증서를 생성하고 관리합니다. 더 많은 옵션은 TLS 문서를 참조하세요. 만약 OpenShift 클러스터가 와일드카드 인증서로 보호되어 있다면, 옵션 2 을 사용하여 와일드카드 인증서를 통해 GitLab 관련 Routes를 보호할 수 있습니다.
  4. 나머지 설치 지침을 따르고 GitLab CR을 적용하고 CR 상태가 최종적으로 Ready임을 확인하세요.

그러면 https://gitlab.yourdomain.com에서 GitLab에 액세스할 수 있어야 합니다.

이 구성에서는 OpenShift Routes가 GitLab Operator에 의해 생성된 Ingresses를 번역하여 생성됩니다. 이러한 번역에 대한 자세한 정보는 Route 문서에서 확인할 수 있습니다.