웹 터미널(사용 중단)

Tier: Free, Premium, Ultimate
Offering: Self-managed
caution
이 기능은 GitLab 14.5에서 사용 중단되었습니다.
Self-managed GitLab의 경우, 기본적으로 이 기능을 사용할 수 없습니다. 관리자는 certificate_based_clusters라는 피처 플래그를 활성화할 수 있습니다.

쿠버네티스 통합의 도입으로 GitLab은 쿠버네티스 클러스터의 자격 증명을 저장하고 사용할 수 있습니다. GitLab은 이러한 자격 증명을 사용하여 환경에 대한 웹 터미널에 액세스할 수 있게 됩니다.

note
프로젝트에 대한 적어도 Maintainer 권한을 갖춘 사용자만이 웹 터미널에 액세스할 수 있습니다.

작동 방식

웹 터미널의 아키텍처 및 작동 방식에 대한 자세한 개요는 이 문서에서 확인할 수 있습니다. 간단히 말해서:

  • GitLab은 사용자에게 자체 쿠버네티스 자격 증명을 제공하고 배포 시 생성하는 파드에 적절한 라벨을 지정하도록 의존합니다.
  • 사용자가 환경의 터미널 페이지로 이동하면, GitLab으로 WebSocket 연결을 열 수 있는 JavaScript 애플리케이션이 제공됩니다.
  • WebSocket은 Rails 응용 프로그램 서버가 아닌 Workhorse에서 처리됩니다.
  • Workhorse는 연결 세부 정보 및 사용자 권한을 위해 주기적으로 Rails에 쿼리합니다. Rails은 Sidekiq를 사용하여 백그라운드에서 쿠버네티스에 쿼리합니다.
  • Workhorse는 사용자의 브라우저와 쿠버네티스 API 사이의 프록시 서버로 작동하여 WebSocket 프레임을 서로 전달합니다.
  • Workhorse는 정기적으로 Rails를 폴링하여 사용자가 터미널에 더 이상 액세스 권한이 없는 경우 또는 연결 세부 정보가 변경된 경우 WebSocket 연결을 종료합니다.

보안

GitLab 및 GitLab Runner는 상호 작용형 웹 터미널 데이터를 암호화하고 모든 것을 인가 가드로 보호하기 위해 몇 가지 주의를 취합니다. 이에 대한 자세한 내용은 아래에서 설명합니다.

  • 세션 서버가 구성되지 않은 경우 상호 작용형 웹 터미널이 완전히 비활성화됩니다.
  • 러너가 시작할 때마다 x509 인증서를 생성하여 wss (웹 소켓 보안) 연결에 사용합니다.
  • 생성된 작업마다 작업 종료 시 폐기되는 무작위 URL이 생성됩니다. 이 URL은 WebSocket 연결 설정에 사용됩니다. 세션 URL은 (IP|HOST):PORT/session/$SOME_HASH 형식입니다. IP/HOSTPORT는 구성된 listen_address입니다.
  • 생성된 각 세션 URL에는 wss 연결을 설정하려면 전달해야 하는 인가 헤더가 있습니다.
  • 세션 URL은 사용자에게 방식으로 공개되지 않습니다. GitLab이 모든 상태를 내부적으로 보유하고 이에 따라 프록시합니다.

웹 터미널 지원 사용 및 해제

note
AWS 클래식 로드 밸런서는 웹 소켓을 지원하지 않습니다. 웹 터미널을 사용하려면 AWS 네트워크 로드 밸런서를 사용하세요. 자세한 내용은 AWS Elastic Load Balancing 제품 비교를 참조하세요.

웹 터미널은 웹소켓을 사용하기 때문에 Workhorse 앞의 모든 HTTP/HTTPS 역방향 프록시는 ConnectionUpgrade 헤더를 다음 체인으로 전달하도록 구성되어야 합니다. GitLab은 기본적으로 이렇게 구성되어 있습니다.

그러나 GitLab 앞에서 로드 밸런서를 실행하는 경우 구성을 변경해야 할 수 있습니다. 다음은 인기있는 역방향 프록시를 위한 필요한 단계를 문서화한 가이드입니다.

Workhorse는 웹소켓 요청을 비웹소켓 엔드포인트로 통과시키지 않으므로 전역으로 이러한 헤더 지원을 활성화하는 것이 안전합니다. 보다 좁은 규칙 세트를 선호하는 경우 /terminal.ws로 끝나는 URL로 제한할 수도 있습니다. 그러나 여전히 약간의 거짓 긍정 결과를 얻을 수 있습니다.

설치를 자체 컴파일한 경우 구성을 변경해야 할 수 있습니다. 자세한 내용은 소스로부터 Community Edition 및 Enterprise Edition 업그레이드를 참조하세요.

GitLab에서 웹 터미널 지원을 비활성화하려면 체인의 첫 번째 HTTP 역방향 프록시에 ConnectionUpgrade 호프바이호프 헤더를 전달하지 않도록 하세요. 대부분의 사용자에게는 리눅스 패키지 설치와 함께 제공되는 NGINX 서버가 해당됩니다. 이 경우 다음을 수행해야 합니다:

  • gitlab.rb 파일에서 nginx['proxy_set_headers'] 섹션을 찾습니다.
  • 전체 블록이 주석 처리되지 않았는지 확인한 후 ConnectionUpgrade 라인을 주석 처리하거나 제거합니다.

고유의 로드 밸런서를 사용하는 경우 위의 가이드에서 권장하는 구성 변경을 뒤집으세요.

이러한 헤더가 전달되지 않은 경우, Workhorse는 웹 터미널을 사용하려는 사용자에게 400 Bad Request 응답을 반환합니다. 그 결과로 사용자는 Connection failed 메시지를 받게 됩니다.

WebSocket 연결 시간 제한

기본적으로 터미널 세션이 만료되지 않습니다. GitLab 인스턴스에서 터미널 세션 수명을 제한하려면 다음을 수행하세요:

  1. 왼쪽 사이드바에서 맨 아래로 이동하여 관리 영역(Admin Area)을 선택합니다.
  2. 설정 > 웹 터미널을 선택합니다.
  3. 최대 세션 시간을 설정합니다.