Web terminals (deprecated)
Offering: GitLab Self-Managed
GitLab Self-Managed에서 기본적으로 이 기능은 사용할 수 없습니다. Kubernetes 통합의 도입으로 GitLab은 Kubernetes 클러스터의 자격 증명을 저장하고 사용할 수 있습니다. 프로젝트에서 Maintainer 역할 이상의 사용자만 웹 터미널에 액세스합니다.
히스토리
- 이 기능은 GitLab 14.5에서 더 이상 사용되지 않습니다.
- GitLab 15.0에서 GitLab Self-Managed에서 비활성화되었습니다.
GitLab Self-Managed에서 기본적으로 이 기능은 사용할 수 없습니다. 사용 가능하게 하려면 관리자가 certificate_based_clusters라는 기능 플래그를 활성화할 수 있습니다.
- 더 이상 사용되지 않는 Web IDE를 통해 액세스할 수 있는 웹 터미널에 대해 더 읽어보세요.
- 더 이상 사용되지 않는 실행 중인 CI 작업에서 액세스할 수 있는 웹 터미널에 대해 더 읽어보세요.
Kubernetes 통합의 도입으로 GitLab은 Kubernetes 클러스터의 자격 증명을 저장하고 사용할 수 있습니다. GitLab은 이러한 자격 증명을 사용하여 환경의 웹 터미널에 액세스를 제공합니다.
프로젝트에서 Maintainer 역할 이상의 사용자만 웹 터미널에 액세스합니다.
웹 터미널 작동 방식#
웹 터미널의 아키텍처와 작동 방식에 대한 자세한 개요는 이 문서에서 확인할 수 있습니다. 간략하게:
- GitLab은 사용자가 자체 Kubernetes 자격 증명을 제공하고 배포할 때 생성하는 파드에 적절하게 레이블을 지정하는 것에 의존합니다.
- 사용자가 환경의 터미널 페이지로 이동하면 GitLab으로 다시 WebSocket 연결을 여는 JavaScript 애플리케이션이 제공됩니다.
- WebSocket은 Rails 애플리케이션 서버가 아닌 Workhorse에서 처리됩니다.
- Workhorse는 연결 세부 정보와 사용자 권한에 대해 Rails를 쿼리합니다. Rails는 Sidekiq을 사용하여 백그라운드에서 Kubernetes를 쿼리합니다.
- Workhorse는 사용자 브라우저와 Kubernetes API 사이에서 프록시 서버 역할을 하여 두 사이에서 WebSocket 프레임을 전달합니다.
- Workhorse는 정기적으로 Rails를 폴링하여 사용자가 더 이상 터미널에 액세스할 권한이 없거나 연결 세부 정보가 변경된 경우 WebSocket 연결을 종료합니다.
보안#
GitLab과 GitLab Runner는 인터랙티브 웹 터미널 데이터를 두 사이에서 암호화하고 모든 것을 권한 가드로 보호하기 위해 몇 가지 예방 조치를 취합니다. 이에 대한 자세한 내용은 아래에 설명되어 있습니다.
- 인터랙티브 웹 터미널은
[session_server]가 구성되지 않으면 완전히 비활성화됩니다. - runner가 시작될 때마다
wss(Web Socket Secure) 연결에 사용되는x509인증서가 생성됩니다. - 생성된 모든 작업에 대해 작업 종료 시 삭제되는 임의의 URL이 생성됩니다. 이 URL은 웹 소켓 연결을 설정하는 데 사용됩니다. 세션 URL 형식은
(IP|HOST):PORT/session/$SOME_HASH이며IP/HOST및PORT는 구성된listen_address입니다. - 생성된 모든 세션 URL에는
wss연결을 설정하기 위해 전송해야 하는 인증 헤더가 있습니다. - 세션 URL은 어떠한 방식으로도 사용자에게 노출되지 않습니다. GitLab은 모든 상태를 내부적으로 보유하고 그에 따라 프록시합니다.
터미널 지원 활성화 및 비활성화#
AWS Classic Load Balancer는 웹 소켓을 지원하지 않습니다. 웹 터미널이 작동하도록 하려면 AWS Network Load Balancer를 사용하세요. 자세한 내용은 AWS Elastic Load Balancing 제품 비교를 참조하세요.
웹 터미널은 WebSocket을 사용하므로 Workhorse 앞의 모든 HTTP/HTTPS 역방향 프록시가 Connection 및 Upgrade 헤더를 체인의 다음 헤더로 전달하도록 구성해야 합니다. GitLab은 기본적으로 이를 수행하도록 구성됩니다.
그러나 GitLab 앞에 로드 밸런서를 실행하는 경우 구성을 일부 변경해야 할 수 있습니다. 이 가이드는 널리 사용되는 역방향 프록시에 대한 필요한 단계를 문서화합니다:
Workhorse는 WebSocket 요청이 WebSocket이 아닌 엔드포인트를 통과하지 못하도록 하므로 이러한 헤더에 대한 지원을 전역적으로 활성화하는 것이 안전합니다. 더 좁은 규칙 세트를 선호하는 경우 /terminal.ws로 끝나는 URL로 제한할 수 있습니다. 이 접근 방식은 여전히 몇 가지 거짓 긍정이 발생할 수 있습니다.
설치를 자체 컴파일한 경우 구성을 일부 변경해야 할 수 있습니다. 자세한 내용은 소스에서 Community Edition 및 Enterprise Edition 업그레이드를 읽으세요.
GitLab에서 웹 터미널 지원을 비활성화하려면 체인의 첫 번째 HTTP 역방향 프록시에서 Connection 및 Upgrade 홉바이홉 헤더 전달을 중지하세요. 대부분의 사용자에게는 Linux 패키지 설치와 함께 번들된 NGINX 서버입니다. 이 경우:
gitlab.rb파일의nginx['proxy_set_headers']섹션을 찾습니다.- 전체 블록이 주석 처리 해제되어 있는지 확인한 다음
Connection및Upgrade줄을 주석 처리하거나 제거합니다.
자체 로드 밸런서의 경우 앞서 나열된 가이드에서 권장하는 구성 변경 사항을 되돌리세요.
이러한 헤더가 전달되지 않으면 Workhorse는 웹 터미널을 사용하려는 사용자에게 400 Bad Request 응답을 반환합니다. 결과적으로 Connection failed 메시지를 받습니다.
WebSocket 연결 시간 제한#
기본적으로 터미널 세션은 만료되지 않습니다.
사전 조건:
- 관리자 액세스.
GitLab 인스턴스에서 터미널 세션 수명을 제한하려면:
- 오른쪽 상단에서 Admin을 선택합니다.
- 왼쪽 사이드바에서 Settings > General을 선택합니다.
- Web terminal을 확장합니다.
max session time을 설정합니다.
