OpenShift Ingress

GitLab Operator를 사용하여 OpenShift에서 Ingress를 제공하는 데 두 가지 지원되는 방법이 있습니다:

NGINX Ingress Controller

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

graph TD U(End User) --> GTLB([gitlab.domain.com]) GTLB --해석--> SRV_N[/Service/gitlab-nginx-ingress-controller/] SRV_N --연결--> DPL_N[Deployment/gitlab-nginx-ingress-controller] DPL_N --일치하는 Ingress 조회--> ING{{Ingress/gitlab-webservice-default}} ING --프록시--> SRV_W[/Service/gitlab-webservice-default/] SRV_W --연결--> DPL_W[Deployment/gitlab-webservice-default]

OpenShift Router가 NGINX Ingress Controller를 덮어쓰는 경우의 해결책

OpenShift 환경에서 GitLab Ingresses는 NGINX Service의 외부 IP 주소 대신 GitLab 인스턴스의 호스트 이름을 받을 수 있습니다. 이는 kubectl get ingress -n <namespace> 명령어의 ADDRESS 열에서 확인할 수 있습니다.

OpenShift Router 컨트롤러는 Ingress class가 다르기 때문에 Ingress 자원을 무시해야 하는데도 불구하고 잘못된 Ingress 자원을 업데이트합니다. 다음 명령은 OpenShift Router 컨트롤러가 OpenShift에 배포된 표준 Ingress 이외의 Ingress를 올바르게 무시하도록 지시합니다:

  kubectl -n openshift-ingress-operator \
    patch ingresscontroller default \
    --type merge \
    -p '{"spec":{"namespaceSelector":{"matchLabels":{"openshift.io/cluster-monitoring":"true"}}}}'

이 패치가 이미 생성된 Ingress에 적용된 경우에는 수동으로 Ingress를 삭제해야 합니다. GitLab Operator가 수동으로 이를 다시 생성합니다. 이러한 Ingress는 올바르게 NGINX Ingress Controller의 소유이어야 하며 OpenShift Router에 의해 무시되어야 합니다.

참고: Ingress를 수동으로 삭제하는 경우 버그가 발생할 수 있습니다. 이 경우 GitLab Operator 컨트롤러 Pod를 수동으로 삭제해야 합니다. 더 많은 정보는 #315를 참조하세요.

NGINX-Ingress Controller 생성을 차단하는 SCC 관련 문제에 대한 문제 해결을 위해 Operator Troubleshooting 문서의 추가 문서를 참조하세요.

구성

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

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 manifest를 생성하는 단계에서 다음과 같이 도메인을 설정하세요:

    spec:
      chart:
        values:
          global:
            # 이전 단계에서 도메인을 구성하세요.
            hosts:
              domain: yourdomain.com
    

    참고: 기본적으로, CertManager는 GitLab과 관련된 Ingress에 대한 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 제공업체에 이전 단계의 외부 IP 주소와 도메인을 연결하는 A 레코드를 생성하세요:

    • gitlab.yourdomain.com -> 11.22.33.444
    • registry.yourdomain.com -> 11.22.33.444
    • minio.yourdomain.com -> 11.22.33.444

    기존의 Route (예: OpenShift 대시보드의 Route)가 여전히 예상대로 작동하도록 하려면 와일드카드 A 레코드가 아닌 개별 A 레코드를 작성해야 합니다.

    참고: 이러한 레코드는 클라우드 제공업체 네트워크 설정의 공용사설 영역 모두에 존재해야 합니다. 이러한 영역 간의 동등함은 적절한 클러스터 내부 라우팅을 보장하고 CertManager가 인증서를 올바르게 발급할 수 있도록 합니다.

그러면 https://gitlab.yourdomain.com에서 GitLab을 사용할 수 있을 것입니다.

OpenShift 라우트

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

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

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

참고: NGINX Ingress Controller 대신 Ingress에 라우트를 사용하는 것은 SSH를 통한 Git 를 지원하지 않는다는 것을 의미합니다.

설정

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

  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.openshift.io/termination: "edge"
    

    참고: 기본적으로 CertManager는 GitLab 관련 라우트의 TLS 인증서를 생성하고 관리합니다. 더 많은 옵션에 대한 정보는 TLS 문서를 참조하십시오. OpenShift 클러스터가 와일드카드 인증서로 보호되어 있는 경우, 옵션 2 을 사용하여 와일드카드 인증서가 GitLab 관련 라우트를 보호할 수 있습니다.

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

그럼으로써 GitLab은 https://gitlab.yourdomain.com에서 사용 가능해야 합니다.

이 구성에서 OpenShift 라우트는 GitLab Operator에 의해 생성된 Ingress를 변환하여 생성됩니다. 이 변환에 대한 자세한 내용은 라우트 문서에서 확인할 수 있습니다.