Git SSH 지원

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

개요

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

GitLab Operator는 gitlab.gitlab-shell.enabledtrue로 설정되어 있을 때 gitlab-shell을 배포합니다. 이것이 기본 설정입니다.

대상 플랫폼에 기반한 요구 사항을 요약하면 다음과 같습니다:

Git SSH가 필요한가요? Kubernetes OpenShift
아니요 아래 NGINX Ingress 제공업체 중 하나를 사용해야 합니다 (Kubernetes에는 기본 Ingress 제공업체가 없습니다). 아래의 Ingress 제공업체를 사용하지 않아도 됩니다. - 기본 라우트를 사용하여 Ingress 제공업체로 사용할 수 있습니다.
아래 NGINX Ingress 제공업체 중 하나를 사용해야 합니다 (Kubernetes에는 기본 Ingress 제공업체가 없습니다). 아래의 Ingress 제공업체 중 하나를 사용해야 합니다 - 라우트는 포트 22를 노출하는 것을 지원하지 않습니다.

Ingress 제공업체

아래는 Ingress 제공업체 목록과 관련 노트 및 플랫폼별 세부 정보입니다.

NGINX-Ingress Helm 차트

GitLab은 Git SSH를 “기본적으로” 지원하도록 수정된 NGINX 리소스를 배포하는 데 사용할 수 있는 forked NGINX-ingress 차트를 유지합니다.

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

이 Ingress 제공업체는 Kubernetes 및 OpenShift에서 모두 사용할 수 있습니다.

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

NGINX Ingress Operator

빌트인 NGINX-Ingress Helm 차트 fork 대신, NGINX Ingress Operator를 사용하여 gitlab-shell을 노출할 수 있습니다.

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

  • NGINXINC의 TransportServer/GlobalConfiguration CustomResourceDefinitions은 기능 미리보기로 간주되며 제품 사용에 조심을 권장합니다.
  • NGINX Inc. Operator는 여전히 상대적으로 어린 상태로, 버전 0.3.0에서만 사용할 수 있습니다. 어떤 스타일의 원천 Helm 차트보다는 훨씬 적은 구성 옵션을 포함하고 있습니다.
  • 이 옵션은 여전히 NGINX 서비스의 포트 22수동으로 노출하는 것이 필요합니다 (이것은 NGINXIngressController CR에서 구성할 수 없습니다).

더 많은 연구 내용은 #58에 기록되어 있습니다.

OpenShift 라우트

OpenShift 라우트는 OpenShift 클러스터에 대한 기본 구성 요소입니다. 이것은 Kubernetes Ingress에 해당하는 OpenShift의 동등한 것입니다.

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

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

고려사항

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

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

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

예를 들어, NGINX Ingress Controller는 Ingress의 ADDRESS를 NGINX 서비스의 외부 IP 주소로 설정하고, 그런 다음 OpenShift Ingress Controller가 클러스터의 기본 도메인으로 이를 재정의할 수 있습니다. 이는 특히 NGINX 서비스의 특정 IP 주소를 사용하여 URL을 매핑하는 A 레코드를 만들 수 있도록 하는 external-dns와 같은 서비스를 사용할 때 DNS 구성과 충돌할 수 있습니다. 이것은 GitLab Operator CI 환경에서 발생하는 경우입니다.

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