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

GitLab Operator와 함께 오픈쉬프트에서 인그레스를 제공하는 두 가지 지원되는 방법이 있습니다.

NGINX Ingress Controller

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

graph TD U(최종 사용자) --> GTLB([gitlab.domain.com]) GTLB --해석함--> SRV_N[/Service/gitlab-nginx-ingress-controller/] SRV_N --연결--> DPL_N[Deployment/gitlab-nginx-ingress-controller] DPL_N -- 일치하는 인그레스를 찾음 --> ING{{Ingress/gitlab-webservice-default}} ING --프록시--> SRV_W[/Service/gitlab-webservice-default/] SRV_W --연결--> DPL_W[Deployment/gitlab-webservice-default]

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를 사용하려면 다음을 완료하세요:

  1. 설치 지침의 첫 번째 단계를 따라 GitLab Operator를 설치합니다.
  2. Webservice에 대해 생성된 라우트와 관련된 도메인 이름을 찾습니다:

    $ 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
    

    주의: 기본적으로 CertManager는 GitLab 관련 인그레스를 위해 TLS 인증서를 생성하고 관리합니다. 추가 옵션에 대해서는 TLS 문서를 참조하세요.

  4. 나머지 설치 지침을 따라 GitLab CR을 적용하고 CR 상태가 최종적으로 Ready임을 확인하세요.
  5. NGINX Ingress Controller의 서비스(로드밸런서 유형)의 외부 IP 주소를 찾아보세요:

    $ kubectl get svc -n gitlab-system gitlab-nginx-ingress-controller -ojsonpath='{.status.loadBalancer.ingress[].ip}'
    
    11.22.33.444
    
  6. 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를 사용합니다.

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

graph TD U(최종 사용자) --> GTLB([gitlab.domain.com]) GTLB --해석함--> SRV_R[/Service/router-default/] SRV_R --연결--> DPL_R[Deployment/router-default] DPL_R -- 일치하는 라우트를 찾음 --> RT{{Route/gitlab-webservice-default-xyz}} RT --프록시--> SRV_W[/Service/gitlab-webservice-default/] SRV_W --연결--> DPL_W[Deployment/gitlab-webservice-default]

주의: NGINX Ingress Controller 대신 OpenShift 라우터를 사용하는 경우 SSH를 통한 Git은 지원되지 않습니다.

설정

인그레스에 OpenShift Routes를 사용하려면 다음을 완료하세요:

  1. 설치 지침의 첫 번째 단계를 따라 GitLab Operator를 설치합니다.
  2. Webservice에 대해 생성된 라우트와 관련된 도메인 이름을 찾습니다:

    $ 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 라우터가 소유하도록 합니다.
              class: none
              annotations:
                # OpenShift 문서에 따르면 "edge"가 기본값이지만 이 주석이 수동으로 설정되지 않으면
                # TLS 설정은 해당 주석이 수동으로 설정될 때만 Route로 전달됩니다.
                route.openshift.io/termination: "edge"
    

    주의: 기본적으로 CertManager는 GitLab 관련 라우트를 위해 TLS 인증서를 생성하고 관리합니다. 추가 옵션에 대해서는 TLS 문서를 참조하세요. OpenShift 클러스터가 와일드카드 인증서로 보안되어 있는 경우, 옵션 2 를 통해 와일드카드 인증서를 사용하여 GitLab 관련 라우트를 보안할 수 있습니다.

  4. 나머지 설치 지침을 따라 GitLab CR을 적용하고 CR 상태가 최종적으로 Ready임을 확인하세요.

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

이 구성에서 OpenShift Routes는 GitLab Operator가 생성한 인그레스를 변환하여 생성됩니다. 이 변환에 대한 자세한 정보는 Route 문서에서 확인할 수 있습니다.