Git over SSH 지원

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

전망

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

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

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

Git over SSH를 필요로 합니까? Kubernetes OpenShift
아니요 아래의 NGINX Ingress 프로바이더 중 하나를 사용해야 합니다 (Kubernetes에는 기본 Ingress 프로바이더가 없음). 아래의 Ingress 프로바이더가 필요하지 않습니다. 내장된 라우트를 Ingress 프로바이더로 사용할 수 있습니다.
아래의 NGINX Ingress 프로바이더 중 하나를 사용해야 합니다 (Kubernetes에는 기본 Ingress 프로바이더가 없음). 아래의 Ingress 프로바이더 중 하나를 사용해야 합니다. 라우트는 포트 22를 노출하는 것을 지원하지 않습니다.

Ingress 프로바이더

아래는 Ingress 프로바이더 디렉터리과 관련된 참고 사항 및 플랫폼별 세부 정보입니다.

NGINX-Ingress Helm 차트

GitLab은 변형된 NGINX-ingress 차트를 유지관리하고 있으며, 이를 사용하여 Git over SSH를 지원하는 수정된 NGINX 리소스를 배포할 수 있습니다.

이것은 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 클러스터의 내장 컴포넌트입니다. 이것은 Kubernetes Ingresses에 해당하는 OpenShift의 컴포넌트입니다.

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

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

고려 사항

아래는 Ingress 사용 시 고려해야 할 사항입니다.

OpenShift에서 제3자 Ingress 프로바이더 사용

OpenShift에서 제3자 Ingress 컨트롤러를 사용할 때, 특정 경우에는 OpenShift Ingress 컨트롤러가 제3자 Ingress 컨트롤러와 충돌할 수 있습니다.

한 예는 NGINX Ingress 컨트롤러가 Ingress ADDRESS를 NGINX 서비스의 외부 IP 주소로 설정한 후 OpenShift Ingress 컨트롤러가 클러스터의 기본 도메인으로 재정의하는 것입니다. 이는 Ingress가 특정 NGINX 서비스의 IP 주소를 가지고 URL을 해당 NGINX 서비스에 매핑하기 위해 external-dns와 같은 서비스를 사용할 때 DNS 구성과 충돌할 수 있습니다. 이는 GitLab Operator CI 환경에서의 경우입니다.

이를 해결하기 위해, 우리는 OpenShift Ingress 컨트롤러를 패치합니다 OpenShift-특정 네임스페이스만 관리하도록하여 GitLab-특정 네임스페이스에서 생성되는 Ingress가 원치 않는 수정을 받지 않도록합니다.