SSH를 통한 Git 지원

이 문서는 다양한 환경/플랫폼에서 SSH를 통한 Git 설정 지침을 제공합니다.

개요

GitLab Shell Helm 차트는 GitLab에 대한 Git SSH 액세스를 위해 구성된 SSH 서버를 제공합니다. 이 구성 요소는 클러스터 외부에서 포트 22로 노출되어야 합니다.

GitLab Operator는 gitlab.gitlab-shell.enabledtrue로 설정되면 기본 설정인 gitlab-shell을 배포합니다.

목표 플랫폼에 따른 요구 사항을 요약하면 다음과 같습니다:

SSH를 통한 Git이 필요하십니까? Kubernetes OpenShift
아니요 아래의 NGINX Ingress 공급자 중 하나를 사용해야 합니다 (Kubernetes에는 내장된 Ingress 공급자가 없습니다). 아래의 Ingress 공급자가 필요하지 않습니다 - 내장된 Routes를 Ingress 공급자로 사용할 수 있습니다.
아래의 NGINX Ingress 공급자 중 하나를 사용해야 합니다 (Kubernetes에는 내장된 Ingress 공급자가 없습니다). 아래의 Ingress 공급자 중 하나를 사용해야 합니다 - Routes는 포트 22를 노출하는 것을 지원하지 않습니다.

Ingress 공급자

아래는 관련 메모 및 플랫폼별 세부 정보와 함께 Ingress 공급자 목록입니다.

NGINX-Ingress Helm 차트

GitLab은 Git을 통해 SSH를 지원하도록 수정된 NGINX 리소스를 배포하는 데 사용할 수 있는 포크된 NGINX-ingress 차트를 유지 관리합니다.

이것은 GitLab Operator를 사용할 때의 기본 구성이며, GitLab CR에서 nginx-ingress.enabled={true,false}로 제어됩니다. false로 설정하면 외부 NGINX 인스턴스를 사용할 수 있습니다.

이 Ingress 공급자는 Kubernetes와 OpenShift 모두에서 사용할 수 있습니다.

NGINX Ingress 공급자의 설치 옵션에 대한 자세한 정보는 설치 문서에서 확인할 수 있습니다.

NGINX Ingress Operator

내장된 NGINX-Ingress Helm 차트 포크의 대안으로, NGINX Ingress Operator를 사용하여 gitlab-shell을 노출할 수 있습니다.

이 옵션에는 몇 가지 주의할 점이 있습니다:

  • NGINXINC의 TransportServer/GlobalConfiguration 사용자 정의 리소스 정의는 기능 미리보기로 간주되며, 프로덕션 사용 시 주의가 권장됩니다.
  • NGINX Inc. Operator는 아직 상대적으로 젊은 버전 0.3.0에 불과합니다. 두 제조의 더 성숙한 Helm 차트에 비해 구성 옵션이 거의 포함되어 있지 않습니다.
  • 이 옵션은 여전히 NGINX 서비스에서 포트 22수동으로 노출해야 합니다 (이는 NGINXIngressController CR에서 구성할 수 없습니다).

보다 광범위한 연구는 #58에 기록되어 있습니다.

OpenShift Routes

OpenShift Routes는 OpenShift 클러스터의 내장 구성 요소입니다. 이는 OpenShift의 Kubernetes Ingresses에 해당합니다.

OpenShift에 배포할 때, GitLab CR에서 nginx-ingress.enabled=false로 설정하고 OpenShift Routes가 외부 트래픽 흐름을 제어하도록 할 수 있습니다. GitLab Operator가 Ingress 객체를 조정할 때 OpenShift는 클러스터 기본 도메인에 매핑되는 동등한 Route 객체를 자동으로 생성합니다.

OpenShift Routes는 TCP 트래픽(포트 22에서 SSH)을 노출하는 것을 지원하지 않으므로, gitlab-shell을 통해 SSH를 통한 Git에 사용할 수 없습니다.

고려 사항

Ingress 작업 시 고려해야 할 항목은 다음과 같습니다.

OpenShift에서 서드파티 Ingress 제공업체 사용

OpenShift에서 서드파티 Ingress 컨트롤러를 사용할 때, 경우에 따라 OpenShift Ingress Controller가 서드파티 Ingress 컨트롤러와 충돌할 수 있습니다.

한 예로, NGINX Ingress Controller는 Ingress ADDRESS를 NGINX 서비스의 외부 IP 주소로 설정하고, 그 후 OpenShift Ingress Controller가 클러스터의 기본 도메인으로 덮어쓰게 됩니다. 이는 특히 Ingress에 IP 주소가 있어야 URL을 특정 NGINX 서비스에 매핑하기 위한 A 레코드를 생성할 수 있는 external-dns와 같은 서비스를 사용할 때 DNS 구성과 충돌할 수 있습니다. 이는 GitLab Operator CI 환경 내에서 발생합니다.

이를 해결하기 위해, 우리는 OpenShift Ingress Controller를 패치합니다 OpenShift 전용 네임스페이스만 관리하도록 하여, GitLab 전용 네임스페이스에서 생성한 Ingress가 원하지 않게 수정되지 않도록 합니다.