Workhorse 구성

역사적인 이유로 Workhorse는 다음과 같은 것들을 사용합니다.

  • Command line flags.
  • Configuration file.
  • Environment variables.

새로운 Workhorse 구성 옵션을 구성 파일에 추가하세요.

CLI 옵션

  gitlab-workhorse [OPTIONS]

Options:
  -apiCiLongPollingDuration duration
        러너를 위한 작업을 장시간 폴링하기 위한 길이 (기본값 50ns)
  -apiLimit uint
        단일 시간에 허용된 API 요청의 수
  -apiQueueDuration duration
        요청의 최대 대기 기간 (기본값 30s)
  -apiQueueLimit uint
        대기열에 들어갈 수 있는 API 요청의 수
  -authBackend string
        인증/권한 부여 백엔드 (기본값 "http://localhost:8080")
  -authSocket string
        옵션: authBackend를 다이얼할 유닉스 도메인 소켓
  -cableBackend string
        ActionCable 백엔드
  -cableSocket string
        옵션: cableBackend를 다이얼할 유닉스 도메인 소켓
  -config string
        구성을 불러올 TOML 파일
  -developmentMode
        assets가 Rails 앱에서 제공되도록 허용
  -documentRoot string
        정적 파일 콘텐츠 경로 (기본값 "public")
  -listenAddr string
        HTTP 서버를 위한 청취 주소 (기본값 "localhost:8181")
  -listenNetwork string
        청취 'network' (tcp, tcp4, tcp6, unix) (기본값 "tcp")
  -listenUmask int
        유닉스 소켓을 위한 umask
  -logFile string
        로그 파일 위치
  -logFormat string
        사용할 로그 형식, 기본값은 text (text, json, structured, none) (기본값 "text")
  -pprofListenAddr string
        pprof 청취 주소, 예: 'localhost:6060'
  -prometheusListenAddr string
        Prometheus 청취 주소, 예: 'localhost:9229'
  -propagateCorrelationID X-Request-ID
        수신 요청 헤더 X-Request-ID에서 기존 Correlation-ID 재사용
  -proxyHeadersTimeout duration
        요청을 프록시하는 동안 응답 헤더를 기다릴 시간 (기본값 5m0s)
  -secretPath string
        인증을 위한 비밀 열쇠 파일 authBackend (기본값 "./.gitlab_workhorse_secret")
  -version
        버전을 출력하고 종료

‘auth backend’는 GitLab Rails 애플리케이션을 참조합니다. 이 이름은 GitLab Workhorse가 git pushgit pull을 HTTP로 처리했을 때의 이름입니다.

GitLab Workhorse는 TCP 또는 유닉스 도메인 소켓 중 하나를 청취할 수 있습니다. 또한 Go의 net/http/pprof 프로파일러 서버를 위한 두 번째 청취용 TCP 소켓을 열 수도 있습니다.

GitLab Workhorse는 -config 플래그를 통해 유효한 TOML 구성 파일을 전달하면, Redis 빌드 및 러너 등록 이벤트에서 청취할 수 있습니다. 일반적인 설정에는 다음만 필요합니다 (문자열을 실제 소켓으로 대체):

Redis

GitLab Workhorse는 CI 빌드 요청을 위해 Redis와 연동하여 장시간 폴링합니다. 구성 방법은 다음과 같습니다:

  • TOML 구성 파일에서 Redis 설정 구성
  • -apiCiLongPollingDuration CLI 옵션으로 CI 빌드 요청에 대한 폴링 동작 제어

CI 폴링을 비활성화한 채로 구성 파일에서 Redis를 활성화할 수 있습니다. 이 구성은 유휌 Redis Pub/Sub 연결을 결과로 낳습니다. 그 반대는 불가능합니다. CI 장시간 폴링은 올바른 Redis 구성이 필요합니다.

예를 들어, 구성 파일의 [redis] 섹션은 다음과 같이 될 수 있습니다:

[redis]
URL = "unix:///var/run/gitlab/redis.sock"
Password = "my_awesome_password"
  • URL - unix://path/to/redis.sock 또는 redis://host:port 형식의 문자열
  • Password - Redis 인스턴스에서 패스워드 보호가 필요한 경우에만 필요
  • Sentinel - Sentinel을 사용하는 경우 필요

선택적 필드:

[redis]
DB = 0
MaxIdle = 1
MaxActive = 1
  • DB - 연결할 데이터베이스. 기본값은 0
  • MaxIdle - 한 번에 Redis 풀에 들어갈 수 있는 최대 유후 연결 수. 기본값은 1
  • MaxActive - 풀이 유지할 수 있는 연결 수. 기본값은 1

상대 URL 지원

GitLab을 example.com/gitlab와 같이 상대 URL로 마운트하는 경우, authBackend 설정에서 해당 상대 URL을 사용하세요:

gitlab-workhorse -authBackend http://localhost:8080/gitlab

TLS 지원

TLS가 있는 청취기를 설정하여 들어오는 요청에 사용하도록 구성할 수 있습니다. 서버의 인증서 및 해당 서버에 대한 일치 개인 키를 포함한 파일의 경로를 제공해야 합니다:

[[listeners]]
network = "tcp"
addr = "localhost:3443"
[listeners.tls]
  certificate = "/path/to/certificate"
  key = "/path/to/private/key"
  min_version = "tls1.2"
  max_version = "tls1.3"

certificate 파일은 서버의 인증서, 중간자 인증서 및 CA의 인증서를 연결한 것이어야 합니다.

메트릭 엔드포인트도 유사하게 구성할 수 있습니다:

[metrics_listener]
network = "tcp"
addr = "localhost:9229"
[metrics_listener.tls]
  certificate = "/path/to/certificate"
  key = "/path/to/private/key"
  min_version = "tls1.2"
  max_version = "tls1.3"

Sentinel 지원

[redis]
Sentinel = [ "redis://sentinel1:23456", "redis://sentinel2:23456" ]
SentinelMaster = "mymaster"

Sentinel TLS 지원

[redis]
Sentinel = [ "rediss://sentinel1:23456", "rediss://sentinel2:23456" ]
SentinelMaster = "mymaster"
[Sentinel.tls]
  certificate = "/path/to/certificate"
  key = "/path/to/private/key"
  ca_certificate = "/path/to/ca_certificate" # 선택 사항
  min_version = "tls1.2"                     # 선택 사항
  max_version = "tls1.3"                     # 선택 사항

authBackendauthSocket의 상호 작용

authBackendauthSocket의 상호 작용은 혼동스러울 수 있습니다. authSocket이 설정되면, authBackend의 호스트 부분은 재정의하지만 상대 경로는 재정의하지 않습니다.

표 양식으로는 다음과 같습니다:

authBackend authSocket Workhorse 연결 Rails 상대 URL
unset unset localhost:8080 /
http://localhost:3000 unset localhost:3000 /
http://localhost:3000/gitlab unset localhost:3000 /gitlab
unset /path/to/socket /path/to/socket /
http://localhost:3000 /path/to/socket /path/to/socket /
http://localhost:3000/gitlab /path/to/socket /path/to/socket /gitlab

cableBackendcableSocket에도 동일한 원칙이 적용됩니다.

메타데이터 옵션

[metadata] 섹션에 다음 옵션을 포함합니다.

설정명 타입 기본값 설명
zip_reader_limit_bytes bytes 104857600 (100 MB) zip 리더를 제한할 바이트 수입니다. 소개됨 - GitLab 16.9에서.

예:

[metadata]
zip_reader_limit_bytes = 209715200 # 200 MB

에러 추적

GitLab-Workhorse는 Sentry를 사용한 원격 에러 추적을 지원합니다. 이 기능을 활성화하려면 GITLAB_WORKHORSE_SENTRY_DSN 환경 변수를 설정하세요. 또한 GITLAB_WORKHORSE_SENTRY_ENVIRONMENT 환경 변수를 설정하여 스테이징, 프로덕션, 개발을 분리하여 Sentry 환경 기능을 사용할 수도 있습니다.

Linux 패키지 (Omnibus)
gitlab_workhorse['env'] = {
    'GITLAB_WORKHORSE_SENTRY_DSN' => 'https://foobar'
    'GITLAB_WORKHORSE_SENTRY_ENVIRONMENT' => 'production'
}
직접 컴파일 (소스)
export GITLAB_WORKHORSE_SENTRY_DSN='https://foobar'
export GITLAB_WORKHORSE_SENTRY_ENVIRONMENT='production'

분산 추적

Workhorse는 LabKit을 통해 분산 추적을 지원하며 OpenTracing APIs를 사용합니다.

기본적으로 이진 파일에 추적 구현이 연결되어 있지 않습니다. 다른 OpenTracing 제공업체를 빌드 태그BUILD_TAGS 메이크 변수를 설정하여 연결할 수 있습니다.

지원되는 제공업체의 자세한 내용은 LabKit을 참조하세요. Jaeger 추적 지원 예제는 다음과 같이 태그를 포함합니다: BUILD_TAGS="tracer_static tracer_static_jaeger"

make BUILD_TAGS="tracer_static tracer_static_jaeger"

OpenTracing 제공업체로 Workhorse를 컴파일한 후 다음과 같이 GITLAB_TRACING 환경 변수로 추적 구성을 설정하세요.

GITLAB_TRACING=opentracing://jaeger ./gitlab-workhorse

상관 ID 전파

사용자가 새 프로젝트를 생성하는 등의 HTTP 요청을 보낼 때 초기 요청은 다른 서비스로 루팅되어, 해당 서비스를 통해 추가 요청을 생성할 수 있습니다. 이러한 요청을 서비스 간에 흐름을 추적하는 데 도움이 되도록 Workhorse는 상관 ID라고 불리는 무작위 값 생성합니다. Workhorse는 X-Request-Id HTTP 헤더와 함께 이 상관 ID를 보냅니다.

일부 GitLab 서비스(예: GitLab Shell)는 자체 상관 ID를 생성합니다. 또한 Gitaly 등의 다른 서비스는 원본 요청에서 상관 ID를 전달하는 내부 API 호출을 수행합니다. 양쪽 모두에서 상관 ID는 X-Request-Id HTTP 헤더와 함께 보내집니다.

기본적으로 Workhorse는 이 헤더를 무시하고 항상 새 상관 ID를 생성합니다. 이로 인해 디버깅이 더 어려워지고 분산 추적이 올바르게 작동하지 않습니다. 왜냐하면 새 상관 ID가 원래 상관 ID와 전혀 관련이 없기 때문입니다.

Workhorse는 -propagateCorrelationID 명령줄 플래그로 들어오는 상관 ID를 전파하도록 구성할 수 있습니다. 믿을 수 있는 클라이언트가 생산적으로 값을 생성할 수 없도록 IP 허용 목록과 함께 사용하는 것이 매우 권장됩니다.

IP 허용 목록은 Workhorse 구성 파일의 trusted_cidrs_for_propagation 옵션으로 지정합니다. 예를 들어:

trusted_cidrs_for_propagation = ["10.0.0.0/8", "127.0.0.1/32"]

참고: trusted_cidrs_for_propagation 옵션을 사용하려면 -propagateCorrelationID 플래그를 사용해야 합니다.

신뢰할 수 있는 프록시

Workhorse가 NGINX와 같은 역방향 프록시 뒤에 있을 때, trusted_cidrs_for_x_forwarded_for 옵션이 필요합니다. 이 옵션은 X-Forwarded-For HTTP 헤더로 원본 IP 주소를 제공하는 데 신뢰할 수 있는 CIDR 블록을 지정해야 합니다. 예를 들어:

trusted_cidrs_for_x_forwarded_for = ["10.0.0.0/8", "127.0.0.1/32"]

지속적인 프로파일링

Workhorse는 LabKit을 통해 Stackdriver Profiler를 사용한 지속적인 프로파일링을 지원합니다. 이진에 Stackdriver Profiler 구현이 연결되어 있지만(필수는 아니며 생략 가능), 예제:

make BUILD_TAGS=""

지속적인 프로파일링을 위해 Workhorse를 컴파일한 후 GITLAB_CONTINUOUS_PROFILING 환경 변수로 프로파일러 구성을 설정하세요. 예를 들어:

GITLAB_CONTINUOUS_PROFILING="stackdriver?service=workhorse&service_version=1.0.1&project_id=test-123 ./gitlab-workhorse"

관련 주제