GitLab 사일런트 모드
GitLab v19.5Offering: GitLab Self-Managed
요약
사일런트 모드를 사용하면 GitLab 이 보내는 이메일 등의 아웃바운드 통신을 차단할 수 있습니다. 사일런트 모드는 특정한 테스트 및 검증 시나리오를 위해 설계되었으며, 프로덕션 환경의 범용 기능으로 사용해서는 안 됩니다.
사일런트 모드를 사용하면 GitLab 이 보내는 이메일 등의 아웃바운드 통신을 차단할 수 있습니다. 사일런트 모드는 실제로 사용 중인 환경에서 쓰도록 만들어진 기능이 아닙니다.
사일런트 모드를 사용하는 경우#
사일런트 모드는 특정한 테스트 및 검증 시나리오를 위해 설계되었으며, 프로덕션 환경의 범용 기능으로 사용해서는 안 됩니다.
사일런트 모드는 다음 시나리오를 위해 설계되었습니다.
- Geo 사이트 승격 테스트: 기본 사이트를 계속 가동한 상태로 보조 Geo 사이트를 승격하여 재해 복구 절차를 검증하는 경우입니다.
- 예를 들어 재해 복구 솔루션의 일부로 보조 Geo 사이트를 운영한다고 가정합니다. 재해 복구 계획이 실제로 작동하는지 확인하는 모범 사례로, 이 사이트를 기본 Geo 사이트로 승격하는 절차를 정기적으로 테스트하려고 합니다. 그러나 기본 사이트가 사용자에게 가장 낮은 지연 시간을 제공하는 리전에 있으므로 실제로 전체 장애 조치를 수행하고 싶지는 않습니다. 정기 테스트마다 다운타임을 감수하고 싶지도 않습니다. 그래서 기본 사이트를 계속 가동한 채 보조 사이트를 승격하고, 승격된 사이트에서 스모크 테스트를 시작합니다. 그런데 승격된 사이트가 사용자에게 이메일을 보내고, 푸시 미러가 외부 Git 리포지터리로 변경 사항을 푸시하는 문제가 생깁니다. 사일런트 모드는 이때 필요합니다. 사이트 승격 과정에서 사일런트 모드를 켜면 이 문제를 피할 수 있습니다.
- GitLab 백업 검증: 별도의 테스트 인스턴스에서 백업 복원을 시험하여 백업이 정상인지 확인하는 경우입니다. 사일런트 모드를 사용하면 사용자에게 잘못된 이메일이 발송되는 것을 막을 수 있습니다.
- 스테이징 환경 테스트: 사용자나 외부 시스템에 영향을 줄 수 있는 아웃바운드 통신을 발생시키지 않고 GitLab 기능을 테스트해야 하는 경우입니다. 특히 프로덕션 데이터를 스테이징 환경에 넣어 둔 경우에 해당합니다.
사일런트 모드가 적합하지 않은 경우는 다음과 같습니다.
- 프로덕션 환경: 사일런트 모드는 의도적으로 여러 GitLab 기능을 중단시킵니다. 특히 새로 추가된 기능에서 예기치 않은 오류가 발생할 수 있습니다. 사일런트 모드는 기본적으로 새로운 통신을 차단하는 방향으로 안전하게 동작해야 합니다.
사일런트 모드 켜기#
사전 요구 사항:
- 관리자 액세스 권한이 있어야 합니다.
사일런트 모드를 켜는 방법은 여러 가지입니다.
-
Web UI
- 오른쪽 위 모서리에서 Admin을 선택합니다.
- 왼쪽 사이드바에서 Settings > General을 선택합니다.
- Silent Mode를 확장한 다음 Enable Silent Mode 토글을 켭니다.
- 변경 사항은 즉시 저장됩니다.
-
API:
curl --request PUT --header "PRIVATE-TOKEN:$ADMIN_TOKEN" "<gitlab-url>/api/v4/application/settings?silent_mode_enabled=true" -
::Gitlab::CurrentSettings.update!(silent_mode_enabled: true)
적용되기까지 최대 1분이 걸릴 수 있습니다. 이슈 405433에서 이 지연을 제거하는 방안을 제안하고 있습니다.
사일런트 모드 끄기#
사전 요구 사항:
- 관리자 액세스 권한이 있어야 합니다.
사일런트 모드를 끄는 방법은 여러 가지입니다.
-
Web UI
- 오른쪽 위 모서리에서 Admin을 선택합니다.
- 왼쪽 사이드바에서 Settings > General을 선택합니다.
- Silent Mode를 확장한 다음 Enable Silent Mode 토글을 끕니다.
- 변경 사항은 즉시 저장됩니다.
-
API:
curl --request PUT --header "PRIVATE-TOKEN:$ADMIN_TOKEN" "<gitlab-url>/api/v4/application/settings?silent_mode_enabled=false" -
::Gitlab::CurrentSettings.update!(silent_mode_enabled: false)
적용되기까지 최대 1분이 걸릴 수 있습니다. 이슈 405433에서 이 지연을 제거하는 방안을 제안하고 있습니다.
사일런트 모드에서 GitLab 기능의 동작#
이 절에서는 사일런트 모드가 켜져 있을 때 GitLab의 현재 동작을 설명합니다. 사일런트 모드 첫 번째 이터레이션 작업은 에픽 9826에서 추적합니다.
사일런트 모드가 켜져 있으면 모든 사용자에게 페이지 상단에 해당 설정이 켜져 있으며 All outbound communications are blocked 임을 알리는 배너가 표시됩니다.
차단되는 아웃바운드 통신#
다음 기능의 아웃바운드 통신은 사일런트 모드에서 차단됩니다.
| 기능 | 참고 사항 |
|---|---|
| GitLab Duo | GitLab Duo 기능은 외부 언어 모델 공급자에 연결할 수 없습니다. |
| 프로젝트 및 그룹 웹훅 | UI를 통해 웹훅 테스트를 트리거하면 HTTP 상태 500 응답이 반환됩니다. |
| 시스템 훅 | |
| 원격 미러 | 원격 미러로의 푸시를 건너뜁니다. 원격 미러에서의 풀도 건너뜁니다. |
| 실행 가능한 통합 | 통합이 실행되지 않습니다. |
| Service Desk | 수신 이메일은 그대로 이슈를 생성하지만, Service Desk로 이메일을 보낸 사용자는 이슈 생성이나 자신의 이슈에 달린 댓글을 알림받지 못합니다. |
| 아웃바운드 이메일 | GitLab 이 이메일을 보내야 하는 시점에 해당 이메일은 전송되지 않고 삭제됩니다. 어디에도 큐에 쌓이지 않습니다. |
| 아웃바운드 HTTP 요청 | 기능이 명시적으로 차단되거나 건너뛰어지지 않은 경우에도 많은 HTTP 요청이 차단됩니다. 이때 SilentModeBlockedError 클래스의 오류가 발생할 수 있습니다. 특정 오류가 사일런트 모드 테스트에 문제가 된다면 GitLab 지원에 문의합니다. 일반적으로 호출자는 HTTP 요청을 시도하기보다 사일런트 모드가 켜져 있을 때 종료해야 합니다. 예외 사항은 사일런트 모드의 의도된 용도와 일치해야 합니다. |
차단되지 않는 아웃바운드 통신#
다음 기능의 아웃바운드 통신은 사일런트 모드에서 차단되지 않습니다.
| 기능 | 참고 사항 |
|---|---|
| 의존성 프록시 | 캐시되지 않은 이미지를 풀하면 평소와 같이 소스에서 가져옵니다. 풀 속도 제한을 고려합니다. |
| 파일 훅 | |
| 서버 훅 | |
| 고급 검색 | 두 GitLab 인스턴스가 동일한 고급 검색 인스턴스를 사용하면 두 인스턴스 모두 검색 데이터를 수정할 수 있습니다. 예를 들어 기본 Geo 사이트가 가동 중인 상태에서 보조 Geo 사이트를 승격한 뒤 발생할 수 있는 스플릿 브레인 시나리오입니다. |
| ClickHouse 호출 | ClickHouse 요청은 사이트 내부 통신으로 간주되므로 차단되지 않습니다. |
| Snowplow | 이슈 409661에 이러한 요청을 차단하자는 제안이 있습니다. |
| 더 이상 사용되지 않는 Kubernetes 연결 | 이러한 요청을 차단하자는 제안이 있습니다. |
| 컨테이너 레지스트리 웹훅 | 이러한 요청을 차단하자는 제안이 있습니다. |