OpenShift의 Ingress

GitLab Operator와 함께 OpenShift에서 Ingress를 제공하는 두 가지 지원 방법이 있습니다:

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 -- 상응하는 ingress를 조회 --> 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 Ingress는 외부 IP 주소 대신 GitLab 인스턴스의 호스트 이름을 받을 수 있습니다. 이는 kubectl get ingress -n <namespace>ADDRESS 열 출력에서 확인할 수 있습니다.

OpenShift Router 컨트롤러는 잘못된 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가 수동으로 다시 생성합니다. 이들은 NGINX Ingress Controller에 의해 올바르게 소유되어야 하며 OpenShift Router에 의해 무시되어야 합니다.

참고: Ingress를 수동으로 삭제할 때 버그가 발생할 수 있습니다. 해결 방법은 GitLab Operator 컨트롤러 포드를 수동으로 삭제하는 것입니다. 자세한 내용은 #315를 참조하세요.

NGINX-Ingress Controller 생성 차단과 관련된 SCC 문제를 해결하려면 Operator Troubleshooting doc의 추가 문서를 참조하세요.

구성

기본적으로 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
    

    참고: 기본적으로 CertManager는 GitLab 관련 Ingress에 대한 TLS 인증서를 생성하고 관리합니다. 다른 옵션은 TLS 문서를 참조하세요.

  4. 나머지 설치 지침을 따르며 GitLab CR을 적용하고 CR 상태가 궁극적으로 Ready인지 확인합니다.

  5. NGINX Ingress Controller의 서비스(유형 LoadBalancer)의 외부 IP 주소를 찾습니다:

    $ kubectl get svc -n gitlab-system gitlab-nginx-ingress-controller -ojsonpath='{.status.loadBalancer.ingress[].ip}'
    
    11.22.33.444
    
  6. 다음 단계의 도메인과 외부 IP 주소를 연결하기 위해 DNS 제공업체에 A 레코드를 생성합니다:

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

    개별 A 레코드를 생성하는 것은 와일드카드 A 레코드 대신 기존 Route(예를 들어 OpenShift 대시보드를 위한 Route)가 예상대로 작동하도록 보장합니다.

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

그러면 GitLab은 https://gitlab.yourdomain.com에서 사용 가능합니다.

OpenShift Routes

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

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

graph TD U(최종 사용자) --> GTLB([gitlab.domain.com]) GTLB --해결됨--> SRV_R[/Service/router-default/] SRV_R --연결됨--> DPL_R[Deployment/router-default] DPL_R --상응하는 Route을 찾음--> RT{{Route/gitlab-webservice-default-xyz}} RT --프록시로 전달됨--> SRV_W[/Service/gitlab-webservice-default/] SRV_W --연결됨--> DPL_W[Deployment/gitlab-webservice-default]
note
Ingress를 위한 Routes 사용은 NGINX Ingress Controller 대신에
Git over SSH
가 지원되지 않습니다.

Setup

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:
              # OpenShift Router가 소유권을 갖도록
              # Ingress 객체에서 `spec.ingressClassName`을 해제합니다.
              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인지 확인합니다.

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

이 구성에서는 OpenShift Routes가 GitLab Operator에 의해 생성된 Ingress를 변환하여 생성됩니다.
이 변환에 대한 더 많은 정보는
Route 문서에서 확인할 수 있습니다.