러너 컨트롤러
Offering: GitLab Self-Managed, GitLab Dedicated
이 기능의 가용성은 Feature flag로 제어됩니다. 러너 컨트롤러는 잡 라우터를 통해 라우팅되는 CI/CD 잡에 대한 승인 제어를 활성화합니다. 러너 컨트롤러는 인스턴스 레벨이며 범위 지정에 따라 잡에 적용됩니다.
이 기능의 가용성은 Feature flag로 제어됩니다. 자세한 내용은 기록을 참조하세요. 이 기능은 테스트용으로 사용 가능하지만 프로덕션 사용을 위한 준비가 되어 있지 않습니다.
히스토리
- GitLab 18.9에서
job_router_admission_control이라는 플래그와 함께 도입. 기본적으로 비활성화됨. 이 기능은 실험이며 GitLab 테스트 계약에 따릅니다. - GitLab 18.10에서 러너 범위 도입.
러너 컨트롤러는 잡 라우터를 통해 라우팅되는 CI/CD 잡에 대한 승인 제어를 활성화합니다. 잡이 실행되려고 할 때 잡 라우터는 연결된 러너 컨트롤러에 승인 요청을 보내고 커스텀 정책에 따라 잡을 승인하거나 거부할 수 있습니다.
러너 컨트롤러는 인스턴스 레벨이며 범위 지정에 따라 잡에 적용됩니다.
러너 컨트롤러를 사용하여:
- 이미지 허용 목록, 리소스 할당량 또는 보안 요구 사항과 같은 커스텀 승인 정책을 시행합니다.
- 용량 관리를 위한 잡 대기열 및 리소스 할당을 제어합니다.
- 컴플라이언스 적용을 위해 실행 전에 잡이 조직 정책을 충족하는지 확인합니다.
- 비용 제어를 위해 예산 또는 리소스 제한을 기반으로 잡 실행을 제한합니다.
승인 제어 워크플로우#
잡 라우터로 러너 컨트롤러를 구성하면 승인 제어 워크플로우는 다음과 같이 작동합니다:
- 러너 컨트롤러가 잡 라우터에 연결합니다.
- 컨트롤러가 자신을 등록하고 승인 요청 처리를 시작합니다.
- 잡이 승인이 필요할 때 잡 라우터는 연결된 컨트롤러에 잡 세부 정보를 보냅니다.
- 컨트롤러가 커스텀 정책에 대해 잡을 평가합니다.
- 컨트롤러가 승인 결정(이유와 함께 승인 또는 거부)을 보냅니다.
- 잡 라우터가 잡 실행을 진행하거나 거부를 보고합니다.
거부 이유 보기#
러너 컨트롤러가 잡을 거부하면 잡은 job_router_failure 실패 이유로 실패합니다.
잡 세부 정보 페이지에는 다음을 포함하는 메시지가 표시됩니다:
- 잡 라우터 정보
- 러너 컨트롤러 정보
- 러너 컨트롤러가 제공한 거부 이유

드라이 런 모드 로깅#
러너 컨트롤러가 dry_run 상태인 경우 거부 결정은 적용되지 않지만 잡 라우터(KAS) 백엔드 로그에 정보 메시지로 기록됩니다. 이 로그를 사용하여 적용을 활성화하기 전에 컨트롤러의 동작을 유효성 검사합니다.
러너 컨트롤러 상태#
러너 컨트롤러는 세 가지 상태 중 하나일 수 있습니다:
| 상태 | 설명 |
|---|---|
disabled |
러너 컨트롤러가 승인 요청을 받지 않습니다. 기본 상태입니다. |
enabled |
러너 컨트롤러가 승인 요청을 받고 그 결정이 잡 실행에 영향을 미칩니다. |
dry_run |
러너 컨트롤러가 승인 요청을 받습니다. 잡 라우터가 결정을 로그에 기록하지만 결정이 적용되지 않습니다. 이 상태를 사용하여 전략적 롤아웃을 위해 컨트롤러 동작을 유효성 검사하고 적용을 활성화하기 전에 배포 위험을 낮춥니다. |
범위 지정#
러너 컨트롤러는 활성화되려면 범위가 지정되어야 합니다. 범위가 없는 러너 컨트롤러는 enabled 또는 dry_run 상태인 경우에도 승인 요청을 받지 않습니다.
러너 컨트롤러는 두 가지 상호 배타적인 범위 유형을 지원합니다:
| 범위 | 설명 |
|---|---|
| 인스턴스 | 러너 컨트롤러가 GitLab 인스턴스의 모든 러너에 대한 잡을 평가합니다. 이 범위는 러너 범위와 결합할 수 없습니다. |
| 러너 | 러너 컨트롤러가 특정 러너에 대한 잡만 평가합니다. 컨트롤러를 하나 이상의 러너로 범위를 지정할 수 있습니다. 러너는 인스턴스 러너여야 합니다. |
추가 범위 유형(그룹, 프로젝트)이 이슈 586419에서 제안되었습니다.
러너 컨트롤러 범위 지정을 관리하려면 러너 컨트롤러 API를 참조하세요.
러너 컨트롤러 관리#
러너 컨트롤러는 REST API를 통해 관리됩니다. 아직 러너 컨트롤러를 관리하는 UI가 없습니다.
- 러너 컨트롤러를 생성, 나열, 업데이트 또는 삭제하려면 러너 컨트롤러 API를 참조하세요.
- 러너 컨트롤러의 범위를 생성, 나열 또는 삭제하려면 러너 컨트롤러 범위 API를 참조하세요.
- 러너 컨트롤러의 인증 토큰을 관리하려면 러너 컨트롤러 토큰 API를 참조하세요.
사전 조건:
- GitLab 인스턴스에 대한 관리자 액세스 권한이 있어야 합니다.
러너 컨트롤러 구현#
단계별 가이드는 튜토리얼: 러너 승인 컨트롤러 빌드를 참조하세요.
자체 러너 컨트롤러를 구현하려면 다음을 수행해야 합니다:
- GitLab에서 러너 컨트롤러를 만듭니다.
- 러너 컨트롤러의 범위를 지정합니다.
- 러너 컨트롤러 토큰을 얻습니다.
- 토큰으로 잡 라우터에 연결합니다.
- 잡 라우터에 컨트롤러를 등록합니다.
- 승인 요청을 처리하고 결정을 보냅니다.
기술 사양 및 protobuf 정의는 GitLab Agent for Kubernetes 저장소의 러너 컨트롤러 문서를 참조하세요.
