GitLab 지원 SSH 구성
이 문서는 다양한 환경/플랫폼에서 Git SSH에 대한 구성 가이드라인을 제공합니다.
개요
GitLab Shell Helm 차트는 GitLab에 대한 Git SSH 액세스를 위해 구성된 SSH 서버를 제공합니다. 이 구성 요소는 클러스터 외부에서 포트 22
로 노출되어야 합니다.
GitLab Operator는 gitlab.gitlab-shell.enabled
가 true
로 설정되었을 때(기본 설정) gitlab-shell
을 배포합니다.
대상 플랫폼에 기반한 요구 사항을 요약하면 다음과 같습니다:
Git SSH가 필요합니까? | Kubernetes | OpenShift |
---|---|---|
아니요 | 다음 NGINX Ingress 프로바이더 중 하나를 사용해야 합니다(쿠버네티스에는 기본 Ingress 프로바이더가 없습니다). | 다음의 Ingress 프로바이더가 필요하지 않습니다 - 기본 라우트를 Ingress 프로바이더로 사용할 수 있습니다. |
네 | 다음 NGINX Ingress 프로바이더 중 하나를 사용해야 합니다(쿠버네티스에는 기본 Ingress 프로바이더가 없습니다). | 다음의 Ingress 프로바이더 중 하나를 사용해야 합니다 - 라우트는 포트 22 노출을 지원하지 않습니다.
|
Ingress 프로바이더
아래는 Ingress 프로바이더 목록과 관련된 참고 사항 및 플랫폼별 세부 정보입니다.
NGINX-Ingress Helm 차트
GitLab은 forked 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 Operator
(https://github.com/nginxinc/nginx-ingress-operator)는 gitlab-shell
을 노출하는 데 사용할 수 있는 NGINX Ingress Operator
의 대안입니다.
이 옵션에는 몇 가지 주의해야 할 사항이 있습니다:
- NGINXINC의
TransportServer/GlobalConfiguration
사용자 지정 리소스 정의는 기능 미리보기로 간주되며, 제품 사용 시 주의를 권장합니다. - NGINX Inc. Operator는 아직 상대적으로 어린 상태로, 버전 0.3.0에 불과합니다. 이는 더 늘어난 성숙한 Helm Charts가 포함된 설정 옵션을 거의 포함하고 있지 않습니다.
- 이 옵션은 여전히 NGINX 서비스에서 포트
22
를 수동으로 노출해야 합니다(NGINXIngressController CR에서 구성할 수 없음).
더 광범위한 연구 내용은 #58에 기록되어 있습니다.
OpenShift 라우트
OpenShift Routes는 OpenShift 클러스터의 기본 구성 요소입니다. 이것은 Kubernetes Ingresses에 해당하는 OpenShift 등가물입니다.
OpenShift에 배포할 때 GitLab CR에서 nginx-ingress.enabled=false
를 설정하고 OpenShift Routes가 외부 트래픽의 흐름을 제어하도록 할 수 있습니다. GitLab Operator가 Ingress 객체를 조화화할 때, OpenShift는 클러스터의 기본 도메인에 매핑되는 동등한 Route 객체를 자동으로 생성합니다.
OpenShift 라우트는 TCP 트래픽(포트 22
에서의 SSH) 노출을 지원하지 않으며, 따라서 gitlab-shell
을 통한 Git over SSH에 사용할 수 없습니다.
고려 사항
Ingress 사용 시 고려해야 할 사항은 다음과 같습니다.
OpenShift에서 타사 Ingress 프로바이더 사용
OpenShift에서 타사 Ingress 컨트롤러를 사용할 때, 몇 가지 경우에는 OpenShift Ingress 컨트롤러가 타사 Ingress 컨트롤러와 충돌할 수 있습니다.
한 예는 NGINX Ingress 컨트롤러가 Ingress ADDRESS
를 NGINX 서비스의 외부 IP 주소로 설정하고, 그런 다음 OpenShift Ingress 컨트롤러가 클러스터의 기본 도메인으로 재정의하는 것입니다. 이는 특히 external-dns와 같은 서비스를 사용할 때 DNS 구성과 충돌할 수 있습니다. 이 서비스는 Ingress가 IP 주소를 가지고 있어야 하므로 URL을 해당 NGINX 서비스에 매핑하기 위해 A 레코드를 생성할 수 있습니다. 이것은 GitLab Operator CI 환경 내에서의 경우입니다.
이를 해결하기 위해, 우리는 OpenShift Ingress 컨트롤러를 패치하여 GitLab 특정 네임스페이스에서 생성한 Ingress가 원하지 않는 방식으로 수정되지 않도록 보장합니다.