- 호스트 설정 구성
- 수평 Pod Autoscaler 설정 구성
- PodDisruptionBudget 설정 구성
- CronJob 설정 구성
- 모니터링 설정 구성
- 인그레스 설정 구성
- GitLab 버전
- 모든 이미지 태그에 접미사 추가
- PostgreSQL 설정 구성
- Redis 설정 구성
- 레지스트리 설정 구성
- Gitaly 설정 구성
- Praefect 설정 구성
- MinIO 설정 구성
- appConfig 설정 구성
- Rails 설정 구성
- Workhorse 설정 구성
- GitLab 페이지 구성
- 웹서비스 구성
- 사용자 정의 인증 기관
- 어플리케이션 리소스
- GitLab 베이스 이미지
- 서비스 어카운트
- 어노테이션
- 노드 선택자
- 라벨
- 추적
- extraEnv
- extraEnvFrom
- OAuth 설정 구성
- Kerberos
- 발신 이메일
- 플랫폼
- Affinity
- 파드 우선 순위 및 선점
- 로그 회전
- 작업
- Traefik
글로벌을 사용하여 차트 구성
GitLab 래퍼 Helm 차트를 설치할 때 구성 중복을 줄이기 위해 values.yaml
의 global
섹션에 설정할 수 있는 여러 구성 설정이 있습니다.
이러한 글로벌 설정은 여러 차트 전반에 걸쳐 사용되며, 다른 모든 설정은 해당 차트 내에 범위가 지정됩니다. 글로벌 변수가 작동하는 방법에 대한 자세한 내용은 Helm 글로벌 문서를 참조하세요.
- 호스트 구성
- 인그레스 구성
- GitLab 버전
- PostgreSQL
- Redis
- 레지스트리
- Gitaly
- Praefect
- MinIO
- appConfig
- Rails
- Workhorse
- GitLab Shell
- Pages
- Webservice
- 사용자 정의 인증 기관
- 애플리케이션 리소스
- GitLab 기본 이미지
- 서비스 어카운트
- 주석
- 추적
- extraEnv
- extraEnvFrom
- OAuth
- Kerberos
- 발신 이메일
- 플랫폼
- 애필리언스
- Pod 우선순위 및 선취
- 로그 로테이션
- 작업
- Traefik
호스트 설정 구성
GitLab 글로벌 호스트 설정은 global.hosts
키 아래에 있습니다.
global:
hosts:
domain: example.com
hostSuffix: staging
https: false
externalIP:
gitlab:
name: gitlab.example.com
https: false
registry:
name: registry.example.com
https: false
minio:
name: minio.example.com
https: false
smartcard:
name: smartcard.example.com
kas:
name: kas.example.com
pages:
name: pages.example.com
https: false
ssh: gitlab.example.com
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
domain
| 문자열 | example.com
| 기본 도메인입니다. GitLab과 Registry는 이 설정의 서브도메인으로 노출됩니다. 이 설정은 example.com 으로 기본 설정되나, name 속성이 구성된 호스트에 대해서는 사용되지 않습니다. 아래의 gitlab.name , minio.name , registry.name 섹션을 참조하세요.
|
externalIP
| nil
| 제공자로부터 요청된 외부 IP 주소를 설정합니다. 이것은 더 복잡한 nginx.service.loadBalancerIP 를 대신하여 NGINX 차트에 템플릿화됩니다.
| |
externalGeoIP
| nil
|
NGINX Geo 차트를 위한 것으로, 단일화된 URL을 사용하는 GitLab Geo 사이트에 정적 IP를 구성합니다. externalIP 와 달라야 합니다.
| |
https
| 부울 | true
| true로 설정하면 NGINX 차트에서 인증서에 액세스해야 합니다. Ingress 앞에 TLS 종료가 있는 경우, 아마도 global.ingress.tls.enabled 를 살펴보고 싶을 것입니다. 외부 URL이 https:// 대신 http:// 을 사용하려면 false로 설정하세요.
|
hostSuffix
| 문자열 | 아래 참조. | |
gitlab.https
| 부울 | false
|
hosts.https 나 gitlab.https 가 true로 설정되면 GitLab 외부 URL은 http:// 대신 https:// 를 사용합니다.
|
gitlab.name
| 문자열 | GitLab의 호스트 이름입니다. 설정된 경우, 이 호스트 이름은 global.hosts.domain 및 global.hosts.hostSuffix 설정과 관계없이 사용됩니다.
| |
gitlab.hostnameOverride
| 문자열 | Webservice의 인그레스 구성에 사용된 호스트 이름을 덮어씁니다. GitLab이 내부 호스트 이름으로 변경된 WAF(WAF가 호스트 이름을 내부 호스트 이름(예: gitlab.example.com –> gitlab.cluster.local )으로 변경하는 경우) 뒤에 도달해야 하는 경우 유용합니다.
| |
gitlab.serviceName
| 문자열 | webservice
| GitLab 서버를 운영하는 service 의 이름입니다. 차트는 서비스의 호스트 이름(및 현재 .Release.Name )을 템플릿화하여 올바른 내부 서비스 이름을 생성합니다.
|
gitlab.servicePort
| 문자열 | workhorse
| GitLab 서버에 도달할 수 있는 service 의 이름이 지정됩니다.
|
keda.enabled
| 부울 | false
|
KEDA ScaledObjects 대신 HorizontalPodAutoscaler 를 사용합니다.
|
minio.https
| 부울 | false
|
hosts.https 나 minio.https 가 true로 설정되면 MinIO 외부 URL은 http:// 대신 https:// 를 사용합니다.
|
minio.name
| 문자열 | minio
| MinIO의 호스트 이름입니다. 설정된 경우, 이 호스트 이름은 global.hosts.domain 및 global.hosts.hostSuffix 설정과 관계없이 사용됩니다.
|
(이하 생략)
hostSuffix
hostSuffix
은 기본 도메인
을 사용하여 호스트 이름을 조합할 때 서브도메인에 추가되지만, 자체 name
이 설정된 호스트에는 사용되지 않습니다.
기본값은 설정되지 않은 상태입니다. 설정된 경우 해당 접미어는 하이픈과 함께 서브도메인에 추가됩니다.
아래 예는 외부 호스트 이름으로 gitlab-staging.example.com
및 registry-staging.example.com
을 사용하도록합니다:
global:
hosts:
domain: example.com
hostSuffix: staging
수평 Pod Autoscaler 설정 구성
HPA(Horizontal Pod Autoscaler)를위한 GitLab 글로벌 호스트 설정은 global.hpa
키 아래에 있습니다:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
apiVersion
| 문자열 | HorizontalPodAutoscaler 객체 정의에 사용할 API 버전. |
PodDisruptionBudget 설정 구성
PDB(PodDisruptionBudget)를위한 GitLab 글로벌 호스트 설정은 global.pdb
키 아래에 있습니다:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
apiVersion
| 문자열 | PodDisruptionBudget 객체 정의에 사용할 API 버전. |
CronJob 설정 구성
CronJob에 대한 GitLab 글로벌 호스트 설정은 global.batch.cronJob
키 아래에 있습니다:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
apiVersion
| 문자열 | CronJob 객체 정의에 사용할 API 버전. |
모니터링 설정 구성
ServiceMonitors 및 PodMonitors에 대한 GitLab 글로벌 설정은 global.monitoring
키 아래에 있습니다:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled
| 부울 | false
|
monitoring.coreos.com/v1 API의 가용성에 관계없이 모니터링 리소스를 활성화합니다.
|
인그레스 설정 구성
Ingress에 대한 GitLab 글로벌 호스트 설정은 global.ingress
키 아래에 있습니다:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
apiVersion
| 문자열 | Ingress 객체 정의에 사용할 API 버전. | |
annotations.*annotation-key*
| 문자열 |
annotation-key 가 값과 함께 모든 Ingress에 주석으로 사용될 문자열입니다. 예: global.ingress.annotations."nginx\.ingress\.kubernetes\.io/enable-access-log"=true . 기본적으로 전역 주석은 제공되지 않습니다.
| |
configureCertmanager
| 부울 | true
| 아래 참조. |
useNewIngressForCerts
| 부울 | false
| 아래 참조. |
class
| 문자열 | gitlab-nginx
|
kubernetes.io/ingress.class 주석 또는 Ingress 리소스의 spec.IngressClassName 를 제어하는 전역 설정. 비활성화하려면 none 으로 설정하거나 불필요한 Ingress 리소스를 배포하지 않도록하려면 nginx-ingress.enabled=false 로 설정하세요.
|
enabled
| 부울 | true
| 지원하는 서비스를 위해 Ingress 객체를 생성할지 여부를 제어하는 전역 설정. |
tls.enabled
| 부울 | true
| 이 값을 false 로 설정하면 GitLab의 TLS를 비활성화합니다. 이는 Ingress의 TLS 종료를 사용할 수 없는 경우에 유용합니다. 완전히 https를 비활성화하려면 global.hosts.https 와 함께 false 로 설정해야합니다.
|
tls.secretName
| 문자열 |
global.hosts.domain 에서 사용되는 도메인의 와일드 카드 인증서 및 키가 포함 된 Kubernetes TLS Secret의 이름.
| |
path
| 문자열 | /
|
Ingress 객체의 path 항목에 대한 기본값
|
pathType
| 문자열 | Prefix
|
Path Type는 경로 일치 방법을 지정하는 데 사용됩니다. 현재 기본값은 Prefix 이지만 사용 사례에 따라 ImplementationSpecific 또는 Exact 를 사용할 수 있습니다.
|
provider
| 문자열 | nginx
| 사용할 Ingress 공급자를 정의하는 전역 설정. 기본 제공자로는 nginx 가 사용됩니다.
|
여러 클라우드 제공업체에 대한 샘플 구성은 예제 폴더에서 찾을 수 있습니다.
Ingress 경로
이 차트는 global.ingress.path
를 사용하여 사용자가 Ingress 객체의 path
정의를 변경해야하는 경우를 지원합니다.
많은 사용자는이 설정이 필요하지 않을 수 있으며 설정하면 안됩니다.
GCP에서 ingress.class: gce
또는 AWS에서 ingress.class: alb
를 사용할 때 로드 밸런서 / 프록시 동작과 일치하도록 path
정의를 /*
로 끝내야하는 사용자를 위해이 설정이 필요합니다.
이 설정은이 차트 전체의 Ingress 리소스에 대한 모든 path
항목이 이로 된 상태로 렌더링되도록 보장합니다.
유일한 예외는 gitlab/webservice
배포 설정을 채우는 경우로, 여기서 path
를 지정해야합니다.
클라우드 제공 업체 로드 밸런서
다양한 클라우드 제공 업체의 로드 밸런서 구현은 이 차트의 일부로 배포된 Ingress 리소스 및 NGINX 컨트롤러 구성에 영향을 미칩니다. 다음 표는 예시를 보여줍니다.
Provider | Layer | Example snippet |
---|---|---|
AWS | 4 | aws/elb-layer4-loadbalancer
|
AWS | 7 | aws/elb-layer7-loadbalancer
|
AWS | 7 | aws/alb-full
|
global.ingress.configureCertmanager
인그레스 객체에 대한 cert-manager의 자동 구성을 제어하는 글로벌 설정입니다. true
이면, certmanager-issuer.email
이 설정되어야 합니다.
만약 false
이고 global.ingress.tls.secretName
이 설정되어 있지 않다면, 이는 모든 Ingress 객체에 대한 자동 self-signed 인증서 생성을 활성화합니다.
외부 cert-manager
를 사용하려면 다음을 제공해야 합니다:
gitlab.webservice.ingress.tls.secretName
registry.ingress.tls.secretName
minio.ingress.tls.secretName
global.ingress.annotations
global.ingress.useNewIngressForCerts
cert-manager
의 동작을 변경하여 ACME 챌린지 확인을 동적으로 만든 새 Ingress로 수행하도록 하는 글로벌 설정입니다.
기본 논리(global.ingress.useNewIngressForCerts
가 false
일 때)는 확인을 위해 기존 Ingress를 재사용합니다. 이 기본값은 일부 상황에 적합하지 않습니다. 플래그를 true
로 설정하면 각 확인을 위해 새 Ingress 객체가 생성됩니다.
global.ingress.useNewIngressForCerts
는 GKE Ingress 컨트롤러와 함께 사용될 때 true
로 설정할 수 없습니다. 이를 사용하려면 전체 세부 정보는 릴리스 노트를 참조하세요.
GitLab 버전
참고: 이 값은 개발 목적이나 GitLab 지원부서의 명시적인 요청으로만 사용되어야 합니다. 운영 환경에서는 이 값을 사용하지 않고 Helm을 사용하여 배포에 설명된대로 버전을 설정하세요.
차트의 기본 이미지 태그에 사용되는 GitLab 버전은 global.gitlabVersion
키를 사용하여 변경할 수 있습니다:
--set global.gitlabVersion=11.0.1
이는 webservice
, sidekiq
, 및 migration
차트에 사용된 기본 이미지 태그에 영향을 줍니다. gitaly
, gitlab-shell
, 및 gitlab-runner
이미지 태그는 별도로 업데이트해야 합니다. GitLab 버전과 호환되는 버전으로 업데이트해야 합니다.
모든 이미지 태그에 접미사 추가
Helm 차트에서 사용되는 모든 이미지 이름에 접미사를 추가하려면 global.image.tagSuffix
키를 사용할 수 있습니다.
이용 사례로는 GitLab에서 fips(연방 정보 처리 표준)-호환 컨테이너 이미지를 사용하려는 경우, 해당 이미지 태그에 -fips
확장를 사용하고 싶은 경우가 있습니다.
--set global.image.tagSuffix="-fips"
PostgreSQL 설정 구성
GitLab 글로벌 PostgreSQL 설정은 global.psql
키 아래에 있습니다.
GitLab은 main
데이터베이스와 ci
를 위한 두 개의 데이터베이스 연결을 사용합니다. 기본적으로 동일한 PostgreSQL 데이터베이스를 가리킵니다.
global.psql
하위에 있는 값들은 기본값이며 두 데이터베이스 구성에 모두 적용됩니다. 두 개의 데이터베이스를 사용하려면 global.psql.main
및 global.psql.ci
에 연결 정보를 지정할 수 있습니다.
global:
psql:
host: psql.example.com
# serviceName: pgbouncer
port: 5432
database: gitlabhq_production
username: gitlab
applicationName:
preparedStatements: false
databaseTasks: true
connectTimeout:
keepalives:
keepalivesIdle:
keepalivesInterval:
keepalivesCount:
tcpUserTimeout:
password:
useSecret: true
secret: gitlab-postgres
key: psql-password
file:
main: {}
# host: postgresql-main.hostedsomewhere.else
# ...
ci: {}
# host: postgresql-ci.hostedsomewhere.else
# ...
Name | Type | Default | Description |
---|---|---|---|
host
| String | 사용할 PostgreSQL 서버의 호스트명. 이 차트에서 배포된 PostgreSQL을 사용하는 경우 이 값은 생략될 수 있습니다. | |
serviceName
| String | PostgreSQL 데이터베이스를 운영하는 service 의 이름. 이 값이 존재하면, 그리고 host 가 아니면, 차트는 service 의 호스트명을 host 값 대신에 템플릿화합니다.
| |
database
| String | gitlabhq_production
| PostgreSQL 서버에서 사용할 데이터베이스의 이름. |
password.useSecret
| Boolean | true
| PostgreSQL의 암호가 시크릿 또는 파일에서 읽히는지를 제어합니다. |
password.file
| String | PostgreSQL의 암호를 포함하는 파일의 경로를 정의합니다. password.useSecret 가 true인 경우 무시됩니다.
| |
password.key
| String | PostgreSQL의 password.key 속성은 시크릿에서 암호를 포함하는 키의 이름을 정의합니다. password.useSecret 가 false이면 무시됩니다.
| |
password.secret
| String | PostgreSQL의 password.secret 속성은 사용할 Kubernetes Secret 의 이름을 정의합니다. password.useSecret 가 false이면 무시됩니다.
| |
port
| Integer | 5432
| PostgreSQL 서버에 연결할 포트. |
username
| String | gitlab
| 데이터베이스에 인증하기 위해 사용할 사용자 이름. |
preparedStatements
| Boolean | false
| PostgreSQL 서버와 통신할 때 준비된 문장(prepared statements)을 사용할지 여부. |
databaseTasks
| Boolean | true
| 지정된 데이터베이스에 대해 GitLab이 데이터베이스 작업을 수행할지 여부. main 과 동일한 호스트/포트/데이터베이스를 공유할 때 자동으로 비활성화됩니다.
|
connectTimeout
| Integer | 데이터베이스 연결을 기다릴 초 단위 시간. | |
keepalives
| Integer | 클라이언트 측 TCP keepalive 사용 여부(1은 사용, 0은 사용 안 함). | |
keepalivesIdle
| Integer | 서버로부터 비활동으로 인한 TCP keepalive 메시지를 보내는 시간(0의 값은 시스템 기본값 사용). | |
keepalivesInterval
| Integer | 서버로부터 응답 받지 못한 TCP keepalive 메시지를 재전송하는 주기(0의 값은 시스템 기본값 사용). | |
keepalivesCount
| Integer | 서버에 대한 연결이 끊길 때까지 잃어버릴 수 있는 TCP keepalive 횟수(0의 값은 시스템 기본값 사용). | |
tcpUserTimeout
| Integer | 연결이 강제로 닫히기 전에 전송된 데이터가 확인되지 않은 밀리초 단위 시간. (0의 값은 시스템 기본값 사용). | |
applicationName
| String | 데이터베이스에 연결하는 응용 프로그램의 이름. 비어 있는 문자열("" )로 설정하여 비활성화할 수 있습니다. 기본적으로 실행 중인 프로세스 이름(puma, sidekiq 등)으로 설정됩니다.
| |
ci.enabled
| Boolean | true
| 두 데이터베이스 연결을 활성화합니다. |
차트별 PostgreSQL 구성
일부 복잡한 배포 환경에서는 PostgreSQL의 다른 구성을 원할 수 있습니다. v4.2.0
부터는 global.psql
내에서 사용 가능한 모든 속성이 예를 들어 gitlab.sidekiq.psql
과 같이 차트별로 설정될 수 있습니다. 지역 설정은 전역 값이 제공되지 않을 때에만 전역 psql
로부터 상속하여 존재하지 않는 모든 값을 재정의하며, psql.load_balancing
은 예외입니다.
PostgreSQL 로드 밸런싱은 설계상으로 전역에서 상속받지 않을 것입니다.
PostgreSQL SSL
참고: SSL 지원은 상호 TLS만 가능합니다. 이슈 #2034 및 이슈 #1817을 참조하십시오.
PostgreSQL과 상호 TLS를 통해 GitLab을 연결하려면 클라이언트 키, 클라이언트 인증서, 서버 인증서의 서로 다른 시크릿 키로 이루어진 시크릿을 만들고, 해당 시크릿 구조를 global.psql.ssl
매핑을 사용하여 설명하십시오.
global:
psql:
ssl:
secret: db-example-ssl-secrets # 시크릿의 이름
clientCertificate: cert.pem # 인증서를 저장하는 시크릿 키의 이름
clientKey: key.pem # 클라이언트 인증서의 키 파일을 저장하는 시크릿 키의 이름
serverCA: server-ca.pem # 데이터베이스 서버용 인증 기관 CA를 저장하는 시크릿 키의 이름
이름 | 타입 | 기본값 | 설명 |
---|---|---|---|
secret
| 문자열 | 다음 키를 포함하는 Kubernetes 시크릿 의 이름
| |
clientCertificate
| 문자열 | 시크릿 내의 키의 이름으로 클라이언트 인증서를 저장합니다. | |
clientKey
| 문자열 | 시크릿 내의 키의 이름으로 클라이언트 인증서의 키 파일을 저장합니다. | |
serverCA
| 문자열 | 서버용 인증 기관을 시크릿 내의 키의 이름으로 저장합니다. |
또한 올바른 키를 가리키기 위해 extraEnv
값을 설정해야 할 수 있습니다.
global:
extraEnv:
PGSSLCERT: '/etc/gitlab/postgres/ssl/client-certificate.pem'
PGSSLKEY: '/etc/gitlab/postgres/ssl/client-key.pem'
PGSSLROOTCERT: '/etc/gitlab/postgres/ssl/server-ca.pem'
PostgreSQL 로드 밸런싱
이 기능은 외부 PostgreSQL의 사용을 요구하며, 본 차트는 HA 방식으로 PostgreSQL을 배포하지 않습니다.
GitLab의 Rails 구성 요소는 읽기 전용 쿼리를 로드 밸런싱하기 위해 PostgreSQL 클러스터를 사용할 수 있습니다.
이 기능은 두 가지 방식으로 구성할 수 있습니다:
- 두 번째 서버의 정적 호스트명을 사용합니다.
- DNS 기반 서비스 검색 메커니즘을 사용합니다.
정적 목록을 사용한 구성은 간단합니다:
global:
psql:
host: primary.database
load_balancing:
hosts:
- secondary-1.database
- secondary-2.database
서비스 검색의 구성은 더 복잡할 수 있습니다. 이 구성, 매개변수 및 해당 동작의 자세한 내용은 서비스 검색을 참조하세요.
global:
psql:
host: primary.database
load_balancing:
discover:
record: secondary.postgresql.service.consul
# record_type: A
# nameserver: localhost
# port: 8600
# interval: 60
# disconnect_timeout: 120
# use_tcp: false
# max_replica_pools: 30
또한 stale reads 처리와 관련하여 추가적인 튜닝이 가능하며, 이러한 속성은 load_balancing
바로 아래에 추가할 수 있습니다.
global:
psql:
load_balancing:
max_replication_difference: # 문서 참조
max_replication_lag_time: # 문서 참조
replica_check_interval: # 문서 참조
여러 데이터베이스 연결 구성
gitlab:db:decomposition:connection_status
Rake 작업은 GitLab 15.11에서 소개되었습니다.
GitLab 16.0부터 GitLab은 동일한 PostgreSQL 데이터베이스를 가리키는 두 개의 데이터베이스 연결을 사용하도록 기본값을 설정합니다.
Redis 설정 구성
GitLab의 전역 Redis 설정은 global.redis
키 아래에 위치합니다.
기본적으로 우리는 단일 및 복제되지 않은 Redis 인스턴스를 사용합니다. 고가용성 Redis가 필요한 경우 외부 Redis 인스턴스를 사용하는 것을 권장합니다.
redis.install=false
로 설정하여 외부 Redis 인스턴스를 가져올 수 있으며, 구성을 위해 고급 문서를 참고하세요.
global:
redis:
host: redis.example.com
serviceName: redis
port: 6379
auth:
enabled: true
secret: gitlab-redis
key: redis-password
scheme:
이름 | 타입 | 기본값 | 설명 |
---|---|---|---|
connectTimeout
| 정수 | Redis 연결을 기다릴 초 단위의 수입니다. 값이 지정되지 않으면 클라이언트는 1초로 기본화됩니다. | |
readTimeout
| 정수 | Redis 읽기를 기다릴 초 단위의 수입니다. 값이 지정되지 않으면 클라이언트는 1초로 기본화됩니다. | |
writeTimeout
| 정수 | Redis 쓰기를 기다릴 초 단위의 수입니다. 값이 지정되지 않으면 클라이언트는 1초로 기본화됩니다. | |
host
| 문자열 | 사용할 데이터베이스가 있는 Redis 서버의 호스트명입니다. 이는 serviceName 대신에 생략될 수 있습니다.
| |
serviceName
| 문자열 | redis
| Redis 데이터베이스를 운영 중인 service 의 이름입니다. 이 값이 존재하고 host 가 아닌 경우, 차트는 host 값 대신에 서비스의 호스트명 (그리고 현재 .Release.Name )를 템플릿화할 것입니다. 이는 전체적인 GitLab 차트의 일부로 Redis를 사용할 때 편리합니다.
|
port
| 정수 | 6379
| Redis 서버에 연결할 포트입니다. |
user
| 문자열 | Redis 인증에 사용되는 사용자 (Redis 6.0+). | |
auth.enabled
| 불린 | true |
auth.enabled 는 Redis 인스턴스와 함께 암호를 사용하는 토글을 제공합니다.
|
auth.key
| 문자열 | Redis에 대한 auth.key 속성은 비밀번호를 포함하는 시크릿의 키 이름을 정의합니다.
| |
auth.secret
| 문자열 | Redis에 대한 auth.secret 속성은 Kubernetes Secret 의 이름을 정의합니다.
| |
scheme
| 문자열 | redis
| Redis URL을 생성하는 데 사용될 URI 스키마입니다. 유효한 값은 redis , rediss , tcp 입니다. rediss (SSL 암호화된 연결) 스키마를 사용하는 경우, 서버에서 사용되는 인증서는 시스템의 신뢰된 체인에 포함되어야 합니다. 이는 사용자 정의 인증 기관 목록에 추가함으로서 수행할 수 있습니다.
|
Redis 차트별 설정 구성
Redis 차트를 직접 구성하는 설정은 redis
키 아래에 위치합니다:
redis:
install: true
image:
registry: registry.example.com
repository: example/redis
tag: x.y.z
자세한 정보는 설정의 전체 목록을 참조하세요.
Redis Sentinel 지원
현재 Redis Sentinel 지원은 GitLab 차트에서 별도로 배포된 Sentinels만 지원합니다. 따라서 GitLab 차트를 통한 Redis 배포는 redis.install=false
로 비활성화해야 합니다. Kubernetes Secret에는 Redis 암호가 수동으로 생성되어야 GitLab 차트를 배포하기 전에 해당 암호가 필요합니다.
GitLab 차트에서 HA(Highly Available) Redis 클러스터를 설치하는 경우 sentinel 지원을 지원하지 않습니다. Sentinel 지원이 필요한 경우 Redis 클러스터를 GitLab 차트 설치 외부에 별도로 생성해야 합니다. 이는 쿠버네티스 클러스터 내부 또는 외부에서 수행할 수 있습니다.
GitLab에서 배포된 Redis 클러스터에서 sentinel을 지원하기 위해 지원되는 sentinel에 대한 이슈가 추적을 위해 생성되었습니다.
redis:
install: false
global:
redis:
host: redis.example.com
serviceName: redis
port: 6379
sentinels:
- host: sentinel1.example.com
port: 26379
- host: sentinel2.exeample.com
port: 26379
auth:
enabled: true
secret: gitlab-redis
key: redis-password
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
host
| 문자열 |
host 속성은 sentinel.conf 에서 지정된 클러스터 이름으로 설정되어야 합니다.
| |
sentinels.[].host
| 문자열 | Redis HA 설정을 위한 Redis Sentinel 서버의 호스트 이름입니다. | |
sentinels.[].port
| 정수 | 26379
| Redis Sentinel 서버에 연결할 포트입니다. |
Redis 설정 구성에서 이전 Redis 속성은 Sentinel 지원이 있을 경우 특정 별 재지정되지 않는 한 그대로 적용됩니다.
Redis Sentinel 암호 지원
- 소개됨 in GitLab 17.1.
redis:
install: false
global:
redis:
host: redis.example.com
serviceName: redis
port: 6379
sentinels:
- host: sentinel1.example.com
port: 26379
- host: sentinel2.example.com
port: 26379
auth:
enabled: true
secret: gitlab-redis
key: redis-password
sentinelAuth:
enabled: false
secret: gitlab-redis-sentinel
key: sentinel-password
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
sentinelAuth.enabled
| 부울 | false |
sentinelAuth.enabled 는 Redis Sentinel 인스턴스에 암호를 사용하는 토글 기능을 제공합니다.
|
sentinelAuth.key
| 문자열 | Redis를 위한 sentinelAuth.key 속성은 암호를 포함하는 비밀(아래)의 이름을 정의합니다.
| |
sentinelAuth.secret
| 문자열 | Redis를 위한 sentinelAuth.secret 속성은 가져올 Kubernetes Secret 의 이름을 정의합니다.
|
global.redis.sentinelAuth
는 모든 Sentinel 인스턴스에 대한 Sentinel 암호를 구성하는 데 사용할 수 있습니다.
sentinelAuth
는 Redis 인스턴스별 설정 또는 global.redis.redisYmlOverride
으로 재정의할 수 없습니다.
복수의 Redis 지원
GitLab 차트는 현재 다양한 지속성 클래스를 위해 별도의 Redis 인스턴스로 실행하는 기능을 포함하고 있습니다:
인스턴스 | 용도 |
---|---|
actioncable
| ActionCable용 Pub/Sub 큐 백엔드 |
cache
| 캐시된 데이터 저장소 |
kas
| kas 특정 데이터 저장 |
queues
| Sidekiq 백그라운드 작업 저장 |
rateLimiting
| RackAttack 및 어플리케이션 제한을 위한 요금 제한 사용 저장 |
repositoryCache
| 저장소 관련 데이터 저장소 |
sessions
| 사용자 세션 데이터 저장소 |
sharedState
| 분산 잠금과 같은 다양한 지속 데이터 저장소 |
traceChunks
| 작업 추적을 일시적으로 저장 |
workhorse
| Workhorse용 Pub/Sub 큐 백엔드 |
인스턴스 중 어떤 수의 인스턴스도 지정될 수 있습니다. 지정되지 않은 인스턴스는 global.redis.host
로 지정된 기본 Redis 인스턴스에서 처리됩니다. GitLab 에이전트 서버(KAS)의 유일한 예외는 다음과 같은 순서로 Redis 구성을 찾습니다:
global.redis.kas
global.redis.sharedState
global.redis.host
예를 들어:
redis:
install: false
global:
redis:
host: redis.example
port: 6379
auth:
enabled: true
secret: redis-secret
key: redis-password
actioncable:
host: cable.redis.example
port: 6379
password:
enabled: true
secret: cable-secret
key: cable-password
cache:
host: cache.redis.example
port: 6379
password:
enabled: true
secret: cache-secret
key: cache-password
kas:
host: kas.redis.example
port: 6379
password:
enabled: true
secret: kas-secret
key: kas-password
queues:
host: queues.redis.example
port: 6379
password:
enabled: true
secret: queues-secret
key: queues-password
rateLimiting:
host: rateLimiting.redis.example
port: 6379
password:
enabled: true
secret: rateLimiting-secret
key: rateLimiting-password
repositoryCache:
host: repositoryCache.redis.example
port: 6379
password:
enabled: true
secret: repositoryCache-secret
key: repositoryCache-password
sessions:
host: sessions.redis.example
port: 6379
password:
enabled: true
secret: sessions-secret
key: sessions-password
sharedState:
host: shared.redis.example
port: 6379
password:
enabled: true
secret: shared-secret
key: shared-password
traceChunks:
host: traceChunks.redis.example
port: 6379
password:
enabled: true
secret: traceChunks-secret
key: traceChunks-password
workhorse:
host: workhorse.redis.example
port: 6379
password:
enabled: true
secret: workhorse-secret
key: workhorse-password
다음 표는 각 Redis 인스턴스의 딕셔너리에 대한 속성을 설명합니다.
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
.host
| 문자열 | 사용할 데이터베이스가 있는 Redis 서버의 호스트 이름입니다. | |
.port
| 정수 | 6379
| Redis 서버에 연결할 포트입니다. |
.password.enabled
| 부울 | true |
password.enabled 는 Redis 인스턴스에 암호를 사용하는 토글 기능을 제공합니다.
|
.password.key
| 문자열 | Redis를 위한 password.key 속성은 암호가 포함된 Secret(아래)의 이름을 정의합니다.
| |
.password.secret
| 문자열 | Redis를 위한 password.secret 속성은 가져올 Kubernetes Secret 의 이름을 정의합니다.
|
기본 Redis 정의는 추가로 분리되지 않은 추가 지속성 클래스들이 있기 때문에 필요합니다.
각 인스턴스 정의는 Redis Sentinel 지원을 사용할 수 있습니다. Sentinel 구성은 공유되지 않습니다. 각 sentinel이 필요한 인스턴스마다 지정해야 합니다. Sentinel 서버를 구성하는 사용된 속성에 대해 Sentinel configuration을 참조하세요.
안전한 Redis 스키마(SSL) 지정
SSL을 사용하여 Redis에 연결하려면:
- 구성을 업데이트하여
rediss
(두 번의s
) 스키마 매개변수를 사용합니다. -
구성에서
authClients
를false
로 설정하세요:global: redis: scheme: rediss redis: tls: enabled: true authClients: false
이 구성은 Redis가 상호 TLS를 기본으로 하는 반면 모든 차트 구성 요소가 지원하지는 않기 때문에 필요합니다.
- Bitnami의 단계에 따라 TLS를 활성화하세요. Redis 인증서를 생성하는 데 사용한 인증 기관에 차트 구성 요소가 신뢰하는지 확인하세요.
- 선택 사항입니다. 사용자 정의 인증 기관을 사용하는 경우 사용자 정의 인증 기관 전역 구성을 참조하세요.
비밀번호 없는 Redis 서버
Google Cloud Memorystore 등의 일부 Redis 서비스는 비밀번호를 사용하거나 관련된 AUTH
명령을 사용하지 않습니다. 비밀번호의 사용 및 필요성은 다음 구성 설정을 통해 비활성화할 수 있습니다.
global:
redis:
auth:
enabled: false
host: ${REDIS_PRIVATE_IP}
redis:
enabled: false
레지스트리 설정 구성
전역 레지스트리 설정은 global.registry
키 아래에 있습니다.
global:
registry:
bucket: registry
certificate:
httpSecret:
notificationSecret:
notifications: {}
## 레지스트리를 참조하는 다른 서비스에서 사용하는 설정:
enabled: true
host:
api:
protocol: http
serviceName: registry
port: 5000
tokenIssuer: gitlab-issuer
bucket
, certificate
, httpSecret
, 및 notificationSecret
설정에 대한 자세한 내용은 레지스트리 차트 내 문서를 참조하세요.
enabled
, host
, api
, 및 tokenIssuer
에 대한 자세한 내용은 command line options 및 webcervice 문서를 참조하세요.
host
는 자동 생성된 외부 레지스트리 호스트 이름 참조를 재정의하는 데 사용됩니다.
알림
이 설정은 레지스트리 알림을 구성하는 데 사용됩니다. Kubernetes 시크릿으로 민감한 헤더를 제공하는 기능이 추가되었지만, 상위 스펙에 따라 맵을 사용합니다. 예를 들어 인증 헤더에 민감한 데이터가 포함된 경우 다른 헤더에는 일반 데이터가 포함됩니다.
global:
registry:
notifications:
events:
includereferences: true
endpoints:
- name: CustomListener
url: https://mycustomlistener.com
timeout: 500mx
# DEPRECATED: use `maxretries` instead https://gitlab.com/gitlab-org/container-registry/-/issues/1243.
# When using `maxretries`, `threshold` is ignored: https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/configuration.md?ref_type=heads#endpoints
threshold: 5
maxretries: 5
backoff: 1s
headers:
X-Random-Config: [plain direct]
Authorization:
secret: registry-authorization-header
key: password
이 예에서 X-Random-Config
헤더는 일반 헤더이며 해당 값은 values.yaml
파일이나 --set
플래그를 통해 평문으로 제공될 수 있습니다. 그러나 Authorization
헤더는 민감한 것이므로 Kubernetes 시크릿에서 마운트하는 것이 더 좋습니다. 시크릿 구조에 대한 자세한 내용은 secrets documentation을 참조하세요.
Gitaly 설정 구성
전역 Gitaly 설정은 global.gitaly
키 아래에 있습니다.
global:
gitaly:
internal:
names:
- default
- default2
external:
- name: node1
hostname: node1.example.com
port: 8075
authToken:
secret: gitaly-secret
key: token
tls:
enabled: true
secretName: gitlab-gitaly-tls
Gitaly 호스트
Gitaly는 GitLab에서 수행하는 모든 Git 호출을 처리하는 Git 저장소에 대한 고수준 RPC 액세스를 제공하는 서비스입니다.
관리자는 Gitaly 노드를 다음과 같은 방법으로 사용할 수 있습니다:
- 차트 내부에서 사용(#internal), Gitaly 차트를 통해
StatefulSet
의 일부로. - 차트 외부에서 사용(#external), 외부 펫으로.
- 내/외부 노드 모두 사용(#mixed)하는 혼합 환경.
새 프로젝트에 대해 어떤 노드를 사용할지 관리하는 방법에 대한 자세한 내용은 Repository Storage Paths 문서를 참조하세요.
만약 gitaly.host
가 제공되면 gitaly.internal
및 gitaly.external
속성은 무시됩니다.
deprecated Gitaly settings을 참조하세요.
내부
internal
키는 현재 창고 이름 목록인 names
만 포함하며, 이 목록에 있는 각 이름에 대해 논리적 순서대로 ${releaseName}-gitaly-${ordinal}
로 명명된 한 pod가 생성되어 해당 이름이 색인입니다. 동적 프로비저닝이 활성화된 경우 PersistentVolumeClaim
이 일치합니다.
이 목록은 기본적으로 ['default']
로 설정되어 있으며, 이는 1개 저장 경로에 대해 1개의 pod를 제공합니다.
그림을 크기 조정하려면 gitaly.internal.names
에 항목을 추가하거나 제거해야 합니다. 크기를 줄이는 경우 다른 노드로 이동되지 않은 저장소는 사용할 수 없게 됩니다. Gitaly 차트가 StatefulSet
이기 때문에 동적으로 프로비저닝된 디스크는 회수되지 않습니다. 이는 데이터 디스크가 지속되고 해당 데이터는 다시 names
목록에 노드를 추가하여 크기를 확장할 때 다시 사용할 수 있음을 의미합니다.
예제 여러 내부 노드 구성은 예제 폴더에서 찾을 수 있습니다.
외부
external
키는 클러스터 외부의 Gitaly 노드에 대한 구성을 제공합니다.
이 목록의 각 항목은 3개의 키를 가지고 있습니다:
-
name
: 스토리지의 이름name: default
라는 항목이 필요합니다. -
hostname
: Gitaly 서비스의 호스트 -
port
: (선택사항) 호스트에 연결할 포트 번호. 기본값은8075
입니다. -
tlsEnabled
: (선택사항) 이 특정 항목에 대해global.gitaly.tls.enabled
를 재정의합니다.
외부 Gitaly 서비스를 사용하는 방법에 대한 고급 구성 가이드를 제공합니다. 여러 외부 서비스의 구성 예제도 찾을 수 있습니다.
고가용성 Gitaly 서비스를 제공하기 위해 외부 Praefect를 사용할 수 있습니다. 두 가지의 구성은 클라이언트 관점에서 차이가 없기 때문에 서로 대체할 수 있습니다.
혼합
내부와 외부 Gitaly 노드를 모두 사용할 수 있지만 다음 사항을 인지해야 합니다:
-
항상
default
라는 노드가 있어야 합니다, 기본적으로 내부에서 제공됩니다. - 외부 노드는 먼저 채워진 후 내부에 채워집니다.
내부와 외부 노드를 혼합한 구성의 예제도 찾을 수 있습니다.
authToken
Gitaly의 authToken
속성은 두 개의 하위 키를 가지고 있습니다:
-
secret
: 가져올 KubernetesSecret
의 이름을 정의합니다. -
key
: 위의 Secret에서 authToken을 포함하는 키의 이름을 정의합니다.
모든 Gitaly 노드는 반드시 동일한 인증 토큰을 공유해야 합니다.
사용되지 않는 Gitaly 설정
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
host (사용되지 않는 설정)
| 문자열 | 사용할 Gitaly 서버의 호스트 이름입니다. 이 설정은 serviceName 대신에 사용될 수 있습니다. 이 설정이 사용되면 internal 또는 external 의 어떤 값이든 덮어쓰게 됩니다.
| |
port (사용되지 않는 설정)
| 정수 | 8075
| Gitaly 서버에 연결할 포트 번호입니다. |
serviceName (사용되지 않는 설정)
| 문자열 | Gitaly 서버를 구동하는 service 의 이름입니다. 이 값이 존재하고, host 가 없다면, 차트는 host 값을 현재 .Release.Name 의 서비스 호스트 이름으로 템플릿화합니다. GitLab 차트 전체의 일부로 Gitaly를 사용할 때 편리합니다.
|
TLS 설정
TLS를 통해 Gitaly를 제공하는 것은 Gitaly 차트의 문서에서 자세히 다루어집니다.
Praefect 설정 구성
전역 Praefect 설정은 global.praefect
키 아래에 위치합니다.
Praefect는 기본적으로 사용되지 않습니다. 활성화된 경우 추가 설정 없이 3개의 Gitaly 레플리카가 생성되며 Praefect 데이터베이스는 기본 PostgreSQL 인스턴스에서 수동으로 생성되어야 합니다.
Praefect 활성화
기본 설정으로 Praefect를 활성화하려면 global.praefect.enabled=true
로 설정합니다.
Praefect를 사용하여 Gitaly 클러스터를 운영하는 방법에 대한 자세한 내용은 Praefect 문서를 참조하세요.
Praefect 전역 설정
global:
praefect:
enabled: false
virtualStorages:
- name: default
gitalyReplicas: 3
maxUnavailable: 1
dbSecret: {}
psql: {}
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled | 부울 | false | Praefect를 활성화할지 여부 |
virtualStorages | 목록 | 여러 가상 스토리지 참조 | 원하는 가상 스토리지 목록 (각각 Gitaly StatefulSet에 해당) |
dbSecret.secret | 문자열 | 데이터베이스와 인증에 사용할 Secret의 이름 | |
dbSecret.key | 문자열 | 사용할 dbSecret.secret 의 키 이름
| |
psql.host | 문자열 | 외부 데이터베이스를 사용할 때 사용할 데이터베이스 서버의 호스트 이름 | |
psql.port | 문자열 | 외부 데이터베이스를 사용할 때 데이터베이스 서버의 포트 번호 | |
psql.user | 문자열 | praefect
| 사용할 데이터베이스 사용자 |
psql.dbName | 문자열 | praefect
| 사용할 데이터베이스 이름 |
MinIO 설정 구성
GitLab 전역 MinIO 설정은 global.minio
키 아래에 있습니다. 더 많은
세부 정보는 MinIO 차트 내의 문서에서 확인할 수 있습니다.
global:
minio:
enabled: true
credentials: {}
appConfig 설정 구성
Webservice, Sidekiq, 및
Gitaly 차트는 global.appConfig
키를 사용하여 여러 설정을 공유합니다.
global:
appConfig:
# cdnHost:
contentSecurityPolicy:
enabled: false
report_only: true
# directives: {}
enableUsagePing: true
enableSeatLink: true
enableImpersonation: true
applicationSettingsCacheSeconds: 60
usernameChangingEnabled: true
issueClosingPattern:
defaultTheme:
defaultColorMode:
defaultSyntaxHighlightingTheme:
defaultProjectsFeatures:
issues: true
mergeRequests: true
wiki: true
snippets: true
builds: true
containerRegistry: true
webhookTimeout:
gravatar:
plainUrl:
sslUrl:
extra:
googleAnalyticsId:
matomoUrl:
matomoSiteId:
matomoDisableCookies:
oneTrustId:
googleTagManagerNonceId:
bizible:
object_store:
enabled: false
proxy_download: true
storage_options: {}
connection: {}
lfs:
enabled: true
proxy_download: true
bucket: git-lfs
connection: {}
artifacts:
enabled: true
proxy_download: true
bucket: gitlab-artifacts
connection: {}
uploads:
enabled: true
proxy_download: true
bucket: gitlab-uploads
connection: {}
packages:
enabled: true
proxy_download: true
bucket: gitlab-packages
connection: {}
externalDiffs:
enabled:
when:
proxy_download: true
bucket: gitlab-mr-diffs
connection: {}
terraformState:
enabled: false
bucket: gitlab-terraform-state
connection: {}
ciSecureFiles:
enabled: false
bucket: gitlab-ci-secure-files
connection: {}
dependencyProxy:
enabled: false
bucket: gitlab-dependency-proxy
connection: {}
backups:
bucket: gitlab-backups
microsoft_graph_mailer:
enabled: false
user_id: "YOUR-USER-ID"
tenant: "YOUR-TENANT-ID"
client_id: "YOUR-CLIENT-ID"
client_secret:
secret:
key: secret
azure_ad_endpoint: "https://login.microsoftonline.com"
graph_endpoint: "https://graph.microsoft.com"
incomingEmail:
enabled: false
address: ""
host: "imap.gmail.com"
port: 993
ssl: true
startTls: false
user: ""
password:
secret:
key: password
mailbox: inbox
idleTimeout: 60
inboxMethod: "imap"
clientSecret:
key: secret
pollInterval: 60
deliveryMethod: webhook
authToken: {}
serviceDeskEmail:
enabled: false
address: ""
host: "imap.gmail.com"
port: 993
ssl: true
startTls: false
user: ""
password:
secret:
key: password
mailbox: inbox
idleTimeout: 60
inboxMethod: "imap"
clientSecret:
key: secret
pollInterval: 60
deliveryMethod: webhook
authToken: {}
cron_jobs: {}
sentry:
enabled: false
dsn:
clientside_dsn:
environment:
gitlab_docs:
enabled: false
host: ""
smartcard:
enabled: false
CASecret:
clientCertificateRequiredHost:
sidekiq:
routingRules: []
### 일반 어플리케이션 설정
Rails 어플리케이션의 일반 속성을 조정할 수 있는 `appConfig` 설정은 다음과 같이 설명됩니다:
| 이름 | 타입 | 기본값 | 설명 |
|:----------------------------------- |:-------:|:------- |:----------- |
| `cdnHost` | 문자열 | (비어 있음) | 정적 자산을 제공하기 위한 CDN의 기본 URL을 설정합니다(예: `https://mycdnsubdomain.fictional-cdn.com`). |
| `contentSecurityPolicy` | 구조체 | | [아래 참조](#content-security-policy). |
| `enableUsagePing` | 부울 | `true` | [사용량 피드백 지원](https://docs.gitlab.com/ee/administration/settings/usage_statistics.html)을 비활성화하는 플래그입니다. |
| `enableSeatLink` | 부울 | `true` | [좌석 링크 지원](https://docs.gitlab.com/ee/subscriptions/#seat-link)을 비활성화하는 플래그입니다. |
| `enableImpersonation` | | `nil` | 관리자에 의한 [사용자 표류](https://docs.gitlab.com/ee/api/index.html#disable-impersonation)를 비활성화하는 플래그입니다. |
| `applicationSettingsCacheSeconds` | 정수 | 60 | [어플리케이션 설정 캐시](https://docs.gitlab.com/ee/administration/application_settings_cache.html)의 만료 간격 값(초)입니다. |
| `usernameChangingEnabled` | 부울 | `true` | 사용자가 자신의 사용자 이름을 변경할 수 있는지를 결정하는 플래그입니다. |
| `issueClosingPattern` | 문자열 | (비어 있음) | 자동으로 이슈를 닫는 [패턴](https://docs.gitlab.com/ee/administration/issue_closing_pattern.html)입니다. |
| `defaultTheme` | 정수 | | GitLab 인스턴스의 기본 테마의 숫자 ID입니다(https://gitlab.com/gitlab-org/gitlab-foss/blob/master/lib/gitlab/themes.rb#L17-27). 테마의 ID를 나타내는 숫자를 취합니다. |
| `defaultColorMode` | 정수 | | GitLab 인스턴스의 기본 색상 모드입니다(https://gitlab.com/gitlab-org/gitlab/-/blob/66788a1de8c3dd3c5566d0f30fe1c2a1bae64bf9/lib/gitlab/color_modes.rb#L17-19). 색상 모드의 ID를 나타내는 숫자를 취합니다. |
| `defaultSyntaxHighlightingTheme` | 정수 | | GitLab 인스턴스의 기본 구문 강조 테마입니다(https://gitlab.com/gitlab-org/gitlab/-/blob/66788a1de8c3dd3c5566d0f30fe1c2a1bae64bf9/lib/gitlab/color_schemes.rb#L12-17). 구문 강조 테마의 ID를 나타내는 숫자를 취합니다. |
| `defaultProjectsFeatures.*feature*` | 부울 | `true` | [아래 참조](#defaultprojectsfeatures). |
| `webhookTimeout` | 정수 | (비어 있음) | [훅이 실패로 간주되기까지 대기 시간(초)](https://docs.gitlab.com/ee/user/project/integrations/webhooks.html#webhook-fails-or-multiple-webhook-requests-are-triggered)입니다. |
| `graphQlTimeout` | 정수 | (비어 있음) | 레일스가 [GraphQL 요청을 완료하는 데 걸리는 시간(초)](https://docs.gitlab.com/ee/api/graphql/#limits)입니다. |
#### Content Security Policy
콘텐츠 보안 정책(CSP)을 설정하면 JavaScript 크로스 사이트 스크립팅(XSS) 공격을 방지할 수 있습니다. 구성 세부 정보는 GitLab 문서를 참조하십시오. [콘텐츠 보안 정책 문서](https://docs.gitlab.com/omnibus/settings/configuration.html#set-a-content-security-policy)
GitLab은 CSP에 대해 안전한 기본 값을 자동으로 제공합니다.
```yaml
global:
appConfig:
contentSecurityPolicy:
enabled: true
report_only: false
사용자 정의 CSP를 추가하려면:
global:
appConfig:
contentSecurityPolicy:
enabled: true
report_only: false
directives:
default_src: "'self'"
script_src: "'self' 'unsafe-inline' 'unsafe-eval' https://www.recaptcha.net https://apis.google.com"
frame_ancestors: "'self'"
frame_src: "'self' https://www.recaptcha.net/ https://content.googleapis.com https://content-compute.googleapis.com https://content-cloudbilling.googleapis.com https://content-cloudresourcemanager.googleapis.com"
img_src: "* data: blob:"
style_src: "'self' 'unsafe-inline'"
CSP 규칙을 부적절하게 구성하면 GitLab의 올바른 작동을 방해할 수 있습니다. 정책을 롤아웃하기 전에 report_only
를 true
로 변경하여 구성을 테스트하는 것이 좋습니다.
defaultProjectsFeatures
새 프로젝트를 기본적으로 생성할 때 각각의 기능을 사용할지 여부를 결정하는 플래그입니다. 모든 플래그는 기본적으로 true
로 설정됩니다.
defaultProjectsFeatures:
issues: true
mergeRequests: true
wiki: true
snippets: true
builds: true
containerRegistry: true
Gravatar/Libravatar 설정
기본적으로 차트는 gravatar.com에서 사용 가능한 Gravatar 아바타 서비스와 함께 작동합니다. 그러나 필요한 경우 사용자 정의 Libravatar 서비스도 사용할 수 있습니다:
이름 | 타입 | 기본값 | 설명 |
---|---|---|---|
gravatar.plainURL
| 문자열 | (비어 있음) | gravatar.com 대신 Libravatar 인스턴스로의 HTTP URL. |
gravatar.sslUrl
| 문자열 | (비어 있음) | gravatar.com 대신 Libravatar 인스턴스로의 HTTPS URL. |
GitLab 인스턴스에 분석 서비스 연결
Google Analytics 및 Matomo와 같은 분석 서비스를 구성하기 위한 설정은 appConfig
아래의 extra
키 아래에 정의되어 있습니다:
이름 | 타입 | 기본값 | 설명 |
---|---|---|---|
extra.googleAnalyticsId
| 문자열 | (비어 있음) | Google Analytics의 추적 ID입니다. |
extra.matomoSiteId
| 문자열 | (비어 있음) | Matomo 사이트 ID입니다. |
extra.matomoUrl
| 문자열 | (비어 있음) | Matomo URL입니다. |
extra.matomoDisableCookies
| 부울 | (비어 있음) | Matomo 쿠키 비활성화(마토모 스크립트의 disableCookies 에 해당)
|
extra.oneTrustId
| 문자열 | (비어 있음) | OneTrust ID입니다. |
extra.googleTagManagerNonceId
| 문자열 | (비어 있음) | Google Tag Manager ID입니다. |
extra.bizible
| 부울 | false
| Bizible 스크립트를 활성화하려면 true로 설정합니다. |
통합 객체 저장소
개별 설정을 구성하는 방법을 설명하는 다음 섹션에 추가로, 우리는 공유 구성을 쉽게하기 위해 통합 객체 저장소 구성을 추가했습니다. object_store
를 활용하여 한 번의 connection
구성으로 개별적으로 구성되지 않은 모든 객체 저장소를 설정할 수 있습니다.
enabled: true
proxy_download: true
storage_options:
connection:
secret:
key:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled
| 부울 | false
| 통합 객체 저장소 사용 여부입니다. |
proxy_download
| 부울 | true
| GitLab을 통한 모든 다운로드의 프록시를 활성화하며, bucket 에서 직접 다운로드 대신 이루어집니다.
|
storage_options
| 문자열 | {}
| 아래 참조. |
connection
| 문자열 | {}
| 아래 참조. |
속성 구조가 공유되며, 여기 있는 모든 속성은 아래의 개별 항목에 의해 재정의될 수 있습니다. connection
속성 구조는 동일합니다.
알림: bucket
, enabled
, proxy_download
속성은 기본값과 다르게 구성하려면 (global.appConfig.artifacts.bucket
, …) 개별 항목 수준에서 구성해야 하는 유일한 속성입니다.
연결(S3 호환 공급자인 포함된 MinIO와 같은)에 대한 AWS
제공업체를 사용하는 경우, GitLab Workhorse는 모든 저장소 관련 업로드를 오프로드할 수 있습니다. 통합된 설정을 사용하는 경우 이 기능이 자동으로 활성화됩니다.
버킷 지정
각 객체 유형은 다른 버킷에 저장되어야 합니다. 기본적으로 GitLab은 다음과 같은 각 유형에 대해 이러한 버킷 이름을 사용합니다.
객체 유형 | 버킷 이름 |
---|---|
CI 아티팩트 | gitlab-artifacts
|
Git LFS | git-lfs
|
패키지 | gitlab-packages
|
업로드 | gitlab-uploads
|
외부 머지 리퀘스트 차이 | gitlab-mr-diffs
|
Terraform 상태 | gitlab-terraform-state
|
CI 보안 파일 | gitlab-ci-secure-files
|
의존성 프록시 | gitlab-dependency-proxy
|
페이지 | gitlab-pages
|
이러한 기본값을 사용하거나 버킷 이름을 구성할 수 있습니다.
--set global.appConfig.artifacts.bucket=<버킷 이름> \
--set global.appConfig.lfs.bucket=<버킷 이름> \
--set global.appConfig.packages.bucket=<버킷 이름> \
--set global.appConfig.uploads.bucket=<버킷 이름> \
--set global.appConfig.externalDiffs.bucket=<버킷 이름> \
--set global.appConfig.terraformState.bucket=<버킷 이름> \
--set global.appConfig.ciSecureFiles.bucket=<버킷 이름> \
--set global.appConfig.dependencyProxy.bucket=<버킷 이름>
저장_옵션
storage_options
은 S3 서버 측 암호화를 구성하는 데 사용됩니다.
S3 버킷에 기본 암호화를 설정하는 것이 암호화를 활성화하는 가장 쉬운 방법이지만, 버킷 정책을 설정하여 암호화된 객체만 업로드되도록하려는 경우, storage_options
구성 섹션에 적절한 암호화 헤더를 보내도록 GitLab을 구성해야 합니다.
설정 | 설명 |
---|---|
server_side_encryption
| 암호화 모드 (AES256 또는 aws:kms )
|
server_side_encryption_kms_key_id
| Amazon 리소스 이름입니다. server_side_encryption 에서 aws:kms 를 사용할 때에만 필요합니다. KMS 암호화 사용에 대한 Amazon 설명을 참조하세요.
|
예시:
enabled: true
proxy_download: true
connection:
secret: gitlab-rails-storage
key: connection
storage_options:
server_side_encryption: aws:kms
server_side_encryption_kms_key_id: arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
LFS, 아티팩트, 업로드, 패키지, 외부 MR 차이 및 의존성 프록시
이러한 설정에 대한 자세한 내용은 아래에 있습니다. 문서는 기본값인 bucket
속성을 제외하고는 구조적으로 동일하기 때문에 개별적으로 반복되지 않습니다.
enabled: true
proxy_download: true
bucket:
connection:
secret:
key:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled
| 부울 | LFS, 아티팩트, 업로드, 패키지에 대해 기본값은 true
| 객체 저장소를 통해 이러한 기능을 사용 여부를 활성화합니다. |
proxy_download
| 부울 | true
| gitlab을 통한 모든 다운로드의 프록시를 활성화하며, 서비스에 따라 기본값은 bucket 이 됩니다.
|
bucket
| 문자열 | 여러 가지 | 객체 저장소 제공자의 버킷 이름입니다. 기본값은 서비스에 따라 git-lfs , gitlab-artifacts , gitlab-uploads , 또는 gitlab-packages 가 됩니다.
|
connection
| 문자열 | {}
| 아래 참조. |
연결
connection
속성은 쿠버네티스 시크릿으로 전환되었습니다. 이 시크릿의 내용은 YAML 형식의 파일이어야 합니다. 기본값은 {}
이며, global.minio.enabled
가true
인 경우 무시됩니다.
이 속성에는 secret
및 key
라는 두 가지 하위 키가 있습니다.
-
secret
는 쿠버네티스 시크릿의 이름입니다. 외부 객체 저장소를 사용하려면 이 값이 필요합니다. -
key
는 YAML 블록을 저장하는 시크릿 내의 키의 이름입니다. 기본값은connection
입니다.
유효한 구성 키는 GitLab Job Artifacts Administration 문서에서 찾을 수 있습니다. 이는 Fog와 일치하며 여러 제공자 모듈간에 다릅니다.
AWS와 Google 제공자에 대한 예시는 examples/objectstorage
에서 찾을 수 있습니다.
connection
의 내용을 포함하는 YAML 파일을 작성한 후, 이 파일을 사용하여 쿠버네티스에서 시크릿을 생성하세요.
kubectl create secret generic gitlab-rails-storage \
--from-file=connection=rails.yaml
External MR Diffs의 경우에만
externalDiffs
설정에는 특정 차이점을 조건부로 객체 저장소에 저장하는 데 사용되는 추가 키 when
이 있습니다. 이 설정은 차트의 기본값을 할당하기 위해 기본적으로 비워둡니다.
CI Artifacts의 경우에만
artifacts
설정에는 Google Cloud Storage 버킷 앞에 Google CDN을 구성하는 데 사용되는 추가 키 cdn
이 있습니다.
수신 이메일 설정
수신 이메일 설정은 명령줄 옵션 페이지에서 설명되어 있습니다.
KAS 설정
사용자 지정 비밀
사용자는 Helm의 --set 변수
옵션을 사용하거나 다음과 같이 values.yaml
를 구성함으로써 KAS의 secret
이름과 key
를 원하는 대로 변경할 수 있습니다:
--set global.appConfig.gitlab_kas.secret=custom-secret-name \
--set global.appConfig.gitlab_kas.key=custom-secret-key \
또는 values.yaml
에서 구성하는 방법:
global:
appConfig:
gitlab_kas:
secret: "custom-secret-name"
key: "custom-secret-key"
비밀 값을 사용자 지정하려면 비밀 설정서를 참조하세요.
사용자 지정 URL
GitLab 백엔드에서 KAS에 사용되는 URL을 Helm의 --set 변수
옵션을 사용하여 사용자 지정할 수 있습니다:
--set global.appConfig.gitlab_kas.externalUrl="wss://custom-kas-url.example.com" \
--set global.appConfig.gitlab_kas.internalUrl="grpc://custom-internal-url" \
또는 values.yaml
에서 구성할 수 있습니다:
global:
appConfig:
gitlab_kas:
externalUrl: "wss://custom-kas-url.example.com"
internalUrl: "grpc://custom-internal-url"
외부 KAS
GitLab 백엔드는 명시적으로 활성화하고 필요한 URL을 구성함으로써 차트에서 관리되지 않는 외부 KAS 서버를 인식하게 할 수 있습니다. Helm의 --set 변수
옵션을 사용하여 구성할 수 있습니다:
--set global.appConfig.gitlab_kas.enabled=true \
--set global.appConfig.gitlab_kas.externalUrl="wss://custom-kas-url.example.com" \
--set global.appConfig.gitlab_kas.internalUrl="grpc://custom-internal-url" \
또는 values.yaml
에서 구성할 수 있습니다:
global:
appConfig:
gitlab_kas:
enabled: true
externalUrl: "wss://custom-kas-url.example.com"
internalUrl: "grpc://custom-internal-url"
TLS 설정
KAS는 kas
파드와 기타 GitLab 차트 구성 요소 간의 TLS 통신을 지원합니다.
전제 조건:
-
GitLab 15.5.1 이후 버전 사용.
GitLab 버전은
global.gitlabVersion: <version>
으로 설정할 수 있습니다. 초기 배포 후 이미지 업데이트를 강제해야 하는 경우global.image.pullPolicy: Always
도 설정하세요. -
kas
파드가 신뢰하는 인증 기관을 생성하고 인증서를 작성하세요.
kas
가 생성한 인증서를 구성하려면 다음 값을 설정하세요.
값 | 설명 |
---|---|
global.kas.tls.enabled
| 인증서 볼륨을 마운트하고 kas 엔드포인트로의 TLS 통신을 활성화합니다.
|
global.kas.tls.secretName
| 인증서를 저장하는 쿠버네티스 TLS 시크릿을 지정합니다. |
global.kas.tls.caSecretName
| 사용자 정의 CA를 저장하는 쿠버네티스 TLS 시크릿을 지정합니다. |
예를 들어, 다음 구성을 사용하여 차트를 배포할 수 있습니다. (values.yaml 파일 사용)
.internal-ca: &internal-ca gitlab-internal-tls-ca # 사용한 TLS CA의 비밀 이름
.internal-tls: &internal-tls gitlab-internal-tls # 사용한 TLS 인증서의 비밀 이름.
global:
certificates:
customCAs:
- secret: *internal-ca
hosts:
domain: gitlab.example.com # 귀하의 gitlab 도메인
kas:
tls:
enabled: true
secretName: *internal-tls
caSecretName: *internal-ca
제안된 리뷰어 설정
참고: 제안된 리뷰어 비밀은 자동으로 생성되며 GitLab SaaS에서만 사용됩니다. 이 비밀은 셀프매니지드 GitLab 인스턴스에서는 필요하지 않습니다.
사용자는 Helm의 --set 변수
옵션을 사용하거나 다음과 같이 values.yaml
를 구성함으로써 제안된 리뷰어 secret
이름과 key
를 원하는 대로 변경할 수 있습니다:
--set global.appConfig.suggested_reviewers.secret=custom-secret-name \
--set global.appConfig.suggested_reviewers.key=custom-secret-key \
또는 values.yaml
에서 구성하는 방법:
global:
appConfig:
suggested_reviewers:
secret: "custom-secret-name"
key: "custom-secret-key"
비밀 값을 사용자 지정하려면 비밀 설정서를 참조하세요.
LDAP
ldap.servers
설정을 사용하여 LDAP 사용자 인증을 구성할 수 있습니다. 이 설정은 맵으로 제공되며, 소스에서 설치하는 것과 같이 gitlab.yml
에서 적절한 LDAP 서버 구성으로 변환됩니다.
비밀을 보유하는 secret
을 제공하여 암호를 구성할 수 있습니다.
이 암호는 실행 시 GitLab 구성에 주입될 것입니다.
예시 설정 블록:
ldap:
preventSignin: false
servers:
# 'main'은 이 LDAP 서버의 GitLab 'provider ID'입니다.
main:
label: 'LDAP'
host: '_your_ldap_server'
port: 636
uid: 'sAMAccountName'
bind_dn: 'cn=administrator,cn=Users,dc=domain,dc=net'
base: 'dc=domain,dc=net'
password:
secret: my-ldap-password-secret
key: the-key-containing-the-password
전역 차트를 사용할 때 --set
구성 항목 예시:
--set global.appConfig.ldap.servers.main.label='LDAP' \
--set global.appConfig.ldap.servers.main.host='your_ldap_server' \
--set global.appConfig.ldap.servers.main.port='636' \
--set global.appConfig.ldap.servers.main.uid='sAMAccountName' \
--set global.appConfig.ldap.servers.main.bind_dn='cn=administrator\,cn=Users\,dc=domain\,dc=net' \
--set global.appConfig.ldap.servers.main.base='dc=domain\,dc=net' \
--set global.appConfig.ldap.servers.main.password.secret='my-ldap-password-secret' \
--set global.appConfig.ldap.servers.main.password.key='the-key-containing-the-password'
참고:
쉼표는 Helm --set
항목에서 특수 문자로 간주됩니다. bind_dn
과 같은 값에서 쉼표를 이스케이프해야 합니다:
--set global.appConfig.ldap.servers.main.bind_dn='cn=administrator\,cn=Users\,dc=domain\,dc=net'
.
LDAP 웹 로그인 비활성화
SAML과 같은 다른 대안을 선호할 때 웹 UI를 통해 LDAP 자격 증명을 사용하는 것을 방지하는 것이 유용할 수 있습니다. 이를 통해 LDAP를 그룹 동기화에 사용하면서 SAML ID 공급자에 추가적인 사용자 정의 2단계 인증과 같은 추가적인 확인을 처리하도록 할 수 있습니다.
LDAP 웹 로그인이 비활성화되면 사용자들은 로그인 페이지에서 LDAP 탭을 보지 못합니다. 이는 Git 액세스에 대한 LDAP 자격 증명 사용을 비활성화하지 않습니다.
LDAP의 웹 로그인 사용을 비활성화하려면 global.appConfig.ldap.preventSignin: true
를 설정하세요.
사용자 지정 CA 또는 자체 서명된 LDAP 인증서 사용
LDAP 서버가 사용자 지정 CA 또는 자체 서명된 인증서를 사용하는 경우 다음을 수행해야 합니다:
-
사용자 지정 CA/자체 서명된 인증서가 클러스터/네임스페이스의 Secret 또는 ConfigMap으로 생성되었는지 확인하세요:
# Secret kubectl -n gitlab create secret generic my-custom-ca-secret --from-file=unique_name.crt=my-custom-ca.pem # ConfigMap kubectl -n gitlab create configmap my-custom-ca-configmap --from-file=unique_name.crt=my-custom-ca.pem
-
그런 다음, 지정하세요:
# Secret에서 사용자 지정 CA 구성 --set global.certificates.customCAs[0].secret=my-custom-ca-secret # 또는 ConfigMap에서 사용자 지정 CA 구성 --set global.certificates.customCAs[0].configMap=my-custom-ca-configmap # LDAP 통합이 사용자 지정 CA를 신뢰하도록 구성 --set global.appConfig.ldap.servers.main.ca_file=/etc/ssl/certs/unique_name.pem
이렇게 하면 CA 인증서가 관련된 파드에 /etc/ssl/certs/unique_name.pem
에 장착되고 LDAP 구성에서 사용되도록 지정됩니다.
참고:
GitLab 15.9 이상에서 /etc/ssl/certs/
의 인증서는 더 이상 ca-cert-
로 접두어가 되지 않습니다.
이는 배포된 파드를 위해 인증서 시크릿을 준비하는 컨테이너로 Alpine을 사용했기 때문에 발생한 이전 동작입니다. gitlab-base
컨테이너는 이제 이 작업에 사용되며 Debian을 기반으로 합니다.
자세한 내용은 사용자 정의 인증 기관을 참조하세요.
DuoAuth
GitLab Duo를 사용하여 이중 인증(2FA)을 활성화하려면 이러한 설정을 사용하세요.
global:
appConfig:
duoAuth:
enabled:
hostname:
integrationKey:
secretKey:
# secret:
# key:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled
| 부울 | false
| GitLab Duo 통합을 활성화하거나 비활성화합니다. |
hostname
| 문자열 | GitLab Duo API 호스트명 | |
integrationKey
| 문자열 | GitLab Duo API 통합 키 | |
secretKey
| GitLab Duo API Secret Key, 비밀 및 키 이름으로 구성해야 합니다. |
GitLab Duo 비밀 키 구성
GitLab Helm 차트에서 GitLab Duo 인증 통합을 구성하려면, GitLab Duo 계정 secretKey
값을 포함하는 global.appConfig.duoAuth.secretKey.secret
설정에 Secret을 제공해야 합니다.
명령 줄에서 GitLab Duo 계정 secretKey
를 저장할 Kubernetes 시크릿 객체를 생성하려면 다음을 실행하세요:
kubectl create secret generic <secret_object_name> --from-literal=secretKey=<duo_secret_key_value>
OmniAuth
GitLab은 OmniAuth를 활용하여 사용자가 Twitter, GitHub, Google 및 기타 인기있는 서비스를 사용하여 로그인할 수 있도록 할 수 있습니다. 확장된 문서는 GitLab을 위한 OmniAuth 문서에서 찾을 수 있습니다.
omniauth:
enabled: false
autoSignInWithProvider:
syncProfileFromProvider: []
syncProfileAttributes: ['email']
allowSingleSignOn: ['saml']
blockAutoCreatedUsers: true
autoLinkLdapUser: false
autoLinkSamlUser: false
autoLinkUser: ['saml']
externalProviders: []
allowBypassTwoFactor: []
providers: []
# - secret: gitlab-google-oauth2
# key: provider
# - name: group_saml
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
allowBypassTwoFactor
| 지정된 공급자를 사용하여 두 단계 인증 없이 로그인할 수 있도록 허용합니다. true , false 또는 공급자 배열로 설정할 수 있습니다. 두 단계 인증 우회을 참조하세요.
| ||
allowSingleSignOn
| 배열 | ['saml']
| OmniAuth로 로그인할 때 계정을 자동으로 생성할 수 있도록 허용합니다. OmniAuth 공급자 이름을 입력하세요. |
autoLinkLdapUser
| 부울 | false
| LDAP/ActiveDirectory 통합을 활성화한 경우에 사용할 수 있습니다. 활성화하면 OmniAuth를 통해 자동으로 생성된 사용자가 해당하는 LDAP 항목에 연결됩니다. |
autoLinkSamlUser
| 부울 | false
| SAML 통합이 활성화된 경우에 사용할 수 있습니다. 활성화하면 OmniAuth를 통해 자동으로 생성된 사용자가 해당하는 SAML 항목에 연결됩니다. |
autoLinkUser
| OmniAuth 공급자를 통해 인증하는 사용자가 현재 GitLab 사용자와 자동으로 연결되도록 허용합니다. true , false 또는 공급자 배열로 설정할 수 있습니다.
| ||
autoSignInWithProvider
| nil
| 자동으로 로그인할 수 있는 단일 공급자 이름. 이는 saml 또는 google_oauth2 와 같은 제공자 이름과 일치해야 합니다.
| |
blockAutoCreatedUsers
| 부울 | true
|
true 는 자동으로 생성된 사용자가 기본적으로 차단되고 관리자가 로그인할 수 있도록 풀어야 한다는 것을 의미합니다.
|
enabled
| 부울 | false
| GitLab에서의 OmniAuth 사용/비사용을 활성화/비활성화합니다. |
externalProviders
| []
| 사용자가 내부 프로젝트에 액세스할 수 없도록 만들기 위해 external 로 정의할 수 있는 OmniAuth 공급자를 정의할 수 있습니다. Google의 경우와 같이 공급자의 전체 이름을 사용해야 합니다. 외부로 설정된 OmniAuth 공급자 구성을 참조하세요.
| |
providers
| []
| 아래 참조. | |
syncProfileAttributes
| ['email']
| 로그인 시 공급자에서 동기화할 프로필 속성 목록. 옵션은 OmniAuth 사용자 프로필을 최신으로 유지을 참조하세요. | |
syncProfileFromProvider
| []
| GitLab이 자동으로 프로필 정보를 동기화해야 하는 공급자 이름 목록. 항목은 saml 또는 google_oauth2 와 같이 제공자 이름과 일치해야 합니다. OmniAuth 사용자 프로필을 최신으로 유지을 참조하세요.
|
공급자
providers
는 gitlab.yml
을 채우는 데 사용되는 맵의 배열로 제공됩니다. 소스에서 설치될 때 사용됩니다. 지원되는 제공자에 대한 GitLab 문서를 참조하세요. 기본값은 []
입니다.
이 속성에는 secret
및 key
라는 두 가지 하위 키가 있습니다:
- secret
: (필수) 공급자 블록을 포함하는 쿠버네티스 Secret
의 이름입니다.
- key
: (선택사항) 공급자 블록을 포함하는 Secret
의 키의 이름입니다. 기본값은 provider
입니다.
또한, 공급자가 이름 이외의 다른 구성이 없는 경우 ‘name’ 속성만 있는 두 번째 형식을 사용하거나, 선택적으로 label
또는 icon
속성이 있을 수 있습니다. 사용 가능한 제공자는 다음과 같습니다:
이러한 항목을 위한 Secret
에는 OmniAuth Providers에 설명된대로 YAML 또는 JSON 형식의 블록이 포함되어야 합니다. 이 비밀을 만들려면 해당 항목의 검색에 대한 적절한 지침을 따르고 YAML 또는 JSON 파일을 만드세요.
Google OAuth2 구성 예시:
name: google_oauth2
label: Google
app_id: 'APP ID'
app_secret: 'APP SECRET'
args:
access_type: offline
approval_prompt: ''
SAML 구성 예시:
name: saml
label: 'SAML'
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: 'xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx'
idp_sso_target_url: 'https://SAML_IDP/app/xxxxxxxxx/xxxxxxxxx/sso/saml'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient'
Microsoft Azure OAuth 2.0 OmniAuth 제공자 구성 예시:
name: azure_activedirectory_v2
label: Azure
args:
client_id: '<CLIENT_ID>'
client_secret: '<CLIENT_SECRET>'
tenant_id: '<TENANT_ID>'
이 내용은 provider.yaml
로 저장할 수 있으며, 그런 다음 여기서 비밀을 만들 수 있습니다:
kubectl create secret generic -n NAMESPACE SECRET_NAME --from-file=provider=provider.yaml
생성된 후, providers
는 아래에 표시된대로 구성에서 맵을 제공하여 활성화됩니다.
omniauth:
providers:
- secret: gitlab-google-oauth2
- secret: azure_activedirectory_v2
- secret: gitlab-azure-oauth2
- secret: gitlab-cas3
그룹 SAML 구성 예시:
omniauth:
providers:
- name: group_saml
글로벌 차트를 사용하는 경우, --set
항목의 예시 구성:
--set global.appConfig.omniauth.providers[0].secret=gitlab-google-oauth2 \
--set
인수를 사용하는 복잡성 때문에 사용자는 -f omniauth.yaml
로 helm
에 전달할 YAML 코드 조각을 사용할 수 있습니다.
크론 작업 관련 설정
Sidekiq에는 cron 스타일 스케줄을 사용하여 주기적으로 실행되도록 구성할 수 있는 유지 관리 작업이 포함되어 있습니다. 여러 예시를 아래에 제공합니다. 더 많은 작업 예시는 샘플 gitlab.yml
의 cron_jobs
와 ee_cron_jobs
섹션을 확인하세요.
이러한 설정은 Sidekiq, Webservice(UI에서 툴팁 표시) 및 Toolbox(디버깅 용도) 팟 간에 공유됩니다.
global:
appConfig:
cron_jobs:
stuck_ci_jobs_worker:
cron: "0 * * * *"
pipeline_schedule_worker:
cron: "3-59/10 * * * *"
expire_build_artifacts_worker:
cron: "*/7 * * * *"
Sentry 설정
GitLab 에러 리포팅을 Sentry와 함께 사용하려면 이러한 설정을 사용하세요.
global:
appConfig:
sentry:
enabled:
dsn:
clientside_dsn:
environment:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled
| 부울 | false
| 통합 사용 또는 비활성화 |
dsn
| 문자열 | 백엔드 오류를 위한 Sentry DSN | |
clientside_dsn
| 문자열 | 프론트엔드 오류를 위한 Sentry DSN | |
environment
| 문자열 | Sentry 환경 참조 |
gitlab_docs
설정
gitlab_docs
를 활성화하려면 이 설정을 사용하세요.
global:
appConfig:
gitlab_docs:
enabled:
host:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled
| 부울 | false
|
gitlab_docs 사용 또는 비활성화
|
host
| 문자열 | ”” | 문서 호스트 |
스마트카드 인증 설정
global:
appConfig:
smartcard:
enabled: false
CASecret:
clientCertificateRequiredHost:
sanExtensions: false
requiredForGitAccess: false
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled
| 부울 | false
| 스마트카드 인증 사용 또는 비활성화 |
CASecret
| 문자열 | CA 인증서를 포함하는 비밀 이름 | |
clientCertificateRequiredHost
| 문자열 | 스마트카드 인증에 사용할 호스트명. 기본적으로 제공되거나 계산된 스마트카드 호스트명을 사용합니다. | |
sanExtensions
| 부울 | false
| SAN 확장 사용하여 인증서와 일치시키기 |
requiredForGitAccess
| 부울 | false
| Git 액세스를 위해 스마트카드 로그인을 요구 하는지 여부. |
Sidekiq 라우팅 규칙 설정
GitLab은 작업을 예약하기 전에 워커에서 원하는 대기열로 작업을 라우팅하는 기능을 지원합니다. Sidekiq 클라이언트는 작업을 구성된 라우팅 규칙 목록과 일치시킵니다. 라우팅 규칙은 처음부터 순서대로 평가되며 한 번에 하나의 워커에 대한 일치가 발견되면 해당 워커의 처리가 중지됩니다 (첫 번째 일치가 우선합니다). 워커가 어떤 규칙과도 일치하지 않으면 해당 워커의 이름으로 생성된 대기열로 라우팅됩니다.
기본적으로 라우팅 규칙은 구성되지 않았거나 (또는 빈 배열로 표시되었음) 모든 작업이 워커 이름에서 생성된 대기열로 라우팅됩니다.
라우팅 규칙 목록은 쿼리와 해당 대기열의 순서가 지정된 튜플의 배열입니다:
- 쿼리는 워커 일치 쿼리 구문을 따릅니다.
-
<queue_name>
은sidekiq.pods[].queues
에 정의된 유효한 Sidekiq 대기열 이름sidekiq.pods
와 일치해야 합니다. 대기열 이름이nil
이거나 빈 문자열인 경우 워커는 대신 워커 이름으로 생성된 대기열로 라우팅됩니다. Sidekiq 구성의 전체 예제를 참조하십시오.
쿼리에서는 모든 워커와 일치하는 와일드카드 일치 *
을 지원합니다. 따라서 와일드카드 쿼리는 목록의 끝에 있어야 하거나 나중 규칙은 무시됩니다:
global:
appConfig:
sidekiq:
routingRules:
- ["resource_boundary=cpu", "cpu-boundary"]
- ["feature_category=pages", null]
- ["feature_category=search", "search"]
- ["feature_category=memory|resource_boundary=memory", "memory-bound"]
- ["*", "default"]
Rails 설정 구성
GitLab의 대부분은 Rails를 기반으로 합니다. 따라서 이 프로젝트 내의 많은 컨테이너는 이 스택으로 작동합니다. 이러한 설정은 모든 해당 컨테이너에 적용되며, 개별적으로 설정하는 대신 전역적으로 설정하는 간편한 액세스 방법을 제공합니다.
global:
rails:
bootsnap:
enabled: true
Workhorse 설정 구성
GitLab 스위트의 여러 구성 요소는 GitLab Workhorse를 통해 API와 통신합니다. 현재 이는 Webservice 차트의 일부입니다. 이러한 설정은 GitLab Workhorse에 연락해야 하는 모든 차트에서 사용되며 개별적으로 설정하는 대신 전역적으로 설정하는 간편한 액세스를 제공합니다.
global:
workhorse:
serviceName: webservice-default
host: api.example.com
port: 8181
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
serviceName | 문자열 | webservice-default
| 내부 API 트래픽을 해당 서비스로 보내기 위한 이름. 릴리스 이름은 포함하지 마십시오. gitlab.webservice.deployments 의 항목과 일치해야 합니다. gitlab/webservice 차트 참조
|
scheme | 문자열 | http
| API 엔드포인트의 체계 |
host | 문자열 | API 엔드포인트의 완전한 호스트 이름 또는 IP 주소. serviceName 의 존재를 재정의합니다.
| |
port | 정수 | 8181
| 연관된 API 서버의 포트 번호. |
tls.enabled | 부울 | false
|
true 로 설정하면 Workhorse에 대한 TLS 지원이 활성화됩니다.
|
Bootsnap 캐시
우리의 Rails 코드베이스는 Shopify’s Bootsnap Gem을 사용합니다. 여기서의 설정은 해당 동작을 구성하는 데 사용됩니다.
bootsnap.enabled
는 이 기능의 활성화를 제어합니다. 기본값은 true
입니다.
확인 결과, Bootsnap을 활성화하면 전반적인 애플리케이션 성능이 향상됩니다. 사전 컴파일된 캐시가 있는 경우 일부 애플리케이션 컨테이너에서 33% 이상의 향상이 나타납니다. 현재 GitLab은 이러한 컨테이너에 사전 컴파일된 캐시를 제공하지 않아 “단지” 14%의 증가만 있습니다. 이 때, 사전 컴파일된 캐시가 없으면 초기 Pod 시작 시 소량의 IO가 강력하게 발생하여 향상에 대한 비용이 발생합니다. 이에 따라 이러한 상황에서 Bootsnap 사용을 비활성화하는 방법을 노출시켰습니다.
가능한 경우, 이 기능을 활성화하는 것을 권장합니다.
GitLab Shell 구성
GitLab Shell 차트의 전역 구성 항목이 여러 가지 있습니다.
global:
shell:
port:
authToken: {}
hostKeys: {}
tcp:
proxyProtocol: false
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
port
| 정수 | 22
| 특정 문서에서 port 에 대한 특정 설명을 보려면 port를 참조하십시오.
|
authToken
| GitLab Shell 차트의 특정 설명에서 authToken을 참조하십시오. | ||
hostKeys
| GitLab Shell 차트의 특정 설명에서 hostKeys을 참조하십시오. | ||
tcp.proxyProtocol
| 부울 | false
| 특정 문서에서 TCP 프록시 프로토콜에 대한 특정 설명을 보려면 TCP 프록시 프로토콜을 참조하십시오. |
Port
입구 사용하여 SSH 트래픽을 전달하는 포트 및 GitLab에서 제공하는 SSH URL의 포트를 제어할 수 있으며 이는 프로젝트 UI에서 제공되는 SSH 클론 URL에 반영됩니다.
global:
shell:
port: 32022
global.shell.port
와 nginx-ingress.controller.service.type=NodePort
를 결합하여 NGINX 컨트롤러 서비스 개체의 NodePort를 설정할 수 있습니다. nginx-ingress.controller.service.nodePorts.gitlab-shell
이 설정되어 있으면 NGINX의 NodePort를 설정할 때 global.shell.port
가 재정의됩니다.
global:
shell:
port: 32022
nginx-ingress:
controller:
service:
type: NodePort
TCP 프록시 프로토콜
프록시 프로토콜을 처리하도록 SSH Ingress를 설정하여 프록시 프로토콜 헤더를 추가하는 상위 프록시로부터의 연결을 적절하게 처리할 수 있습니다. 이를 통해 SSH에서 추가 헤더를 수신하지 않도록하여 SSH가 손상되지 않도록 할 수 있습니다.
프록시 프로토콜 처리를 활성화해야 하는 일반적인 환경 중 하나는 클러스터로의 들어오는 연결을 처리하는 ELB를 사용하는 AWS 사용 시입니다. AWS 레이어 4 로드 밸런서 예제에서 이를 올바르게 설정할 수 있습니다.
global:
shell:
tcp:
proxyProtocol: true # 기본값은 false입니다.
GitLab 페이지 구성
기타 차트에서 사용되는 전역 GitLab 페이지 설정은 global.pages
키 아래에 문서화되어 있습니다.
global:
pages:
enabled:
accessControl:
path:
host:
port:
https:
externalHttp:
externalHttps:
artifactsServer:
objectStore:
enabled:
bucket:
proxy_download: true
connection: {}
secret:
key:
localStore:
enabled: false
path:
apiSecret: {}
secret:
key:
namespaceInPath: false
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled
| 부울 | False | 클러스터에 GitLab Pages 차트를 설치할지 여부를 결정합니다. |
accessControl
| 부울 | False | GitLab Pages 액세스 제어를 활성화합니다. |
path
| 문자열 | /srv/gitlab/shared/pages
| 페이지 배포 관련 파일을 저장할 경로입니다. 참고: 기본적으로 사용되지 않으며, 객체 저장소가 사용됩니다. |
host
| 문자열 | 페이지 루트 도메인입니다. | |
port
| 문자열 | UI에서 페이지 URL을 구성하는 데 사용될 포트입니다. 설정되지 않으면, 페이지의 HTTPS 상황에 따라 기본값 80 또는 443이 설정됩니다. | |
https
| 부울 | True | GitLab UI에서 페이지에 대한 HTTPS URL을 표시할지 여부입니다. global.hosts.pages.https 와 global.hosts.https 보다 우선합니다. 기본값은 True입니다.
|
externalHttp
| 목록 | []
| 페이지 데몬에 도달하는 HTTP 요청에 대한 사용자 정의 도메인을 지원하기 위해 사용되는 IP 주소 목록입니다. |
externalHttps
| 목록 | []
| 페이지 데몬에 도달하는 HTTPS 요청에 대한 사용자 정의 도메인을 지원하기 위해 사용되는 IP 주소 목록입니다. |
artifactsServer
| 부울 | True | GitLab 페이지에서 아티팩트를 보는 것을 가능하게 합니다. |
objectStore.enabled
| 부울 | True | 페이지와 관련된 컨텐츠를 저장하기 위해 객체 저장소 사용을 가능하게 합니다. |
objectStore.bucket
| 문자열 | gitlab-pages
| 페이지와 관련된 컨텐츠를 저장하는 데 사용될 버킷입니다. |
objectStore.connection.secret
| 문자열 | 객체 저장소의 연결 세부 정보를 포함하는 시크릿입니다. | |
objectStore.connection.key
| 문자열 | 연결 세부 정보가 저장된 시크릿 내 키입니다. | |
localStore.enabled
| 부울 | False | 페이지와 관련된 컨텐츠를 위해 로컬 저장소 사용을 가능하게 합니다 (객체 저장소와는 달리). |
localStore.path
| 문자열 | /srv/gitlab/shared/pages
| 페이지 파일이 저장될 경로입니다. localStore가 true로 설정된 경우에만 사용됩니다. |
apiSecret.secret
| 문자열 | Base64로 인코딩된 32비트 API 키를 포함하는 시크릿입니다. | |
apiSecret.key
| 문자열 | API 키가 저장된 시크릿 내 키입니다. | |
namespaceInPath
| 부울 | False | (베타) 와일드카드 DNS 설정 없이 지원하기 위해 URL 경로에 네임스페이스를 활성화 또는 비활성화합니다. 자세한 정보는 와일드카드 DNS 없이 Pages 도메인 설명서를 참조하세요. |
웹서비스 구성
기타 차트에서도 사용되는 전역 웹 서비스 설정은 global.webservice
키 아래에 위치합니다.
global:
webservice:
workerTimeout: 60
workerTimeout
Webservice 작업자 프로세스가 Webservice 마스터 프로세스에 의해 종료되는 요청 제한 시간 (초)을 구성합니다. 기본값은 60초입니다.
global.webservice.workerTimeout
설정은 최대 요청 기간에 영향을 미치지 않습니다. 최대 요청 기간은 다음과 같이 환경 변수를 설정하여 구성할 수 있습니다:
gitlab:
webservice:
workerTimeout: 60
extraEnv:
GITLAB_RAILS_RACK_TIMEOUT: "60"
GITLAB_RAILS_WAIT_TIMEOUT: "90"
사용자 정의 인증 기관
참고:
이러한 설정은 requirements.yaml
을 통해 이 저장소 외부의 차트에는 영향을 주지 않습니다.
일부 사용자는 TLS 서비스에 내부 발급 SSL 인증서를 사용하는 경우와 같이 사용자 정의 인증 기관을 추가해야 할 수 있습니다. 이 기능을 제공하기 위해 이러한 사용자 정의 루트 인증 기관을 Secrets 또는 ConfigMap을 통해 응용 프로그램에 삽입하는 매커니즘을 제공합니다.
Secret 또는 ConfigMap을 생성하려면:
# 인증서 파일에서 Secret 생성
kubectl create secret generic secret-custom-ca --from-file=unique_name.crt=/path/to/cert
# 인증서 파일에서 ConfigMap 생성
kubectl create configmap cm-custom-ca --from-file=unique_name.crt=/path/to/cert
Secret 또는 ConfigMap을 구성하려면, globals에 지정합니다:
global:
certificates:
customCAs:
- secret: secret-custom-CAs # Secret의 모든 키를 마운트합니다.
- secret: secret-custom-CAs # Secret에서 지정된 키만 마운트합니다.
keys:
- unique_name.crt
- configMap: cm-custom-CAs # ConfigMap의 모든 키를 마운트합니다.
- configMap: cm-custom-CAs # ConfigMap에서 지정된 키만 마운트합니다.
keys:
- unique_name_1.crt
- unique_name_2.crt
참고:
Secret의 키 이름에 .crt
확장자가 있는 것이 중요합니다.
이 단계은 Debian update-ca-certificates 패키지에 중요합니다.
이 단계를 거치면 사용자 정의 CA 파일이 그 확장자로 마운트되고 Certificates initContainers에서 처리됩니다.
이전에는 certificates 도우미 이미지가 Alpine 기반이었으므로 실제로 확장자가 필요하지 않았지만, 문서에는 필요하다고 되어 있습니다.
UBI 기반 update-ca-trust
유틸리티에는 동일한 요구 사항이 없는 것으로 보입니다.
PEM으로 인코딩된 CA 인증서를 보유하는 키 중 어떤 수의 Secret 또는 ConfigMap을 제공할 수 있습니다. 이러한 것들은 global.certificates.customCAs
아래의 항목으로 구성됩니다. keys:
가 제공되지 않으면 모든 시크릿 및 ConfigMaps에서 모든 마운트된 키가 유니크해야 합니다. 시크릿 및 ConfigMap의 이름은 어떤 형식이든 제공할 수 있지만, 대형 키명을 포함해서는 안 됩니다.
어플리케이션 리소스
GitLab는 선택사항으로 클러스터 내에서 GitLab 어플리케이션을 식별하는 데 사용할 수 있는 어플리케이션 리소스를 포함할 수 있습니다. 클러스터에 이미 배포된 어플리케이션 CRD 버전 v1beta1
가 필요합니다.
활성화하려면 global.application.create
를 true
로 설정하세요.
global:
application:
create: true
Google GKE Marketplace와 같은 일부 환경에서는 ClusterRole 리소스를 생성할 수 없습니다. Application Custom Resource Definition의 ClusterRole 구성요소 및 Cloud Native GitLab과 함께 패키지된 관련 차트를 비활성화하려면 다음 값을 설정하세요.
global:
application:
allowClusterRoles: false
nginx:
controller:
scope:
enabled: true
gitlab-runner:
rbac:
clusterWideAccess: false
certmanager:
install: false
GitLab 베이스 이미지
GitLab Helm 차트는 다양한 초기화 작업을 위해 공통 GitLab 베이스 이미지를 사용합니다. 이 이미지는 UBI 빌드를 지원하며 다른 이미지와 레이어를 공유합니다.
서비스 어카운트
GitLab Helm 차트를 사용하면 포드가 사용자 정의 서비스 어카운트를 사용하여 실행할 수 있습니다. 이는 다음과 같은 설정으로 구성됩니다. global.serviceAccount
:
global:
serviceAccount:
enabled: false
create: true
annotations: {}
automountServiceAccountToken: false
## 서비스 어카운트에 사용할 이름, 그렇지 않으면 차트 모든 이름을 사용합니다.
# name:
-
global.serviceAccount.enabled
설정은spec.serviceAccountName
를 통해 각 구성 요소의 ServiceAccount에 대한 참조를 제어합니다. -
global.serviceAccount.create
설정은 Helm을 통해 ServiceAccount 객체 생성을 제어합니다. -
global.serviceAccount.name
설정은 ServiceAccount 객체 이름 및 각 구성 요소에서 참조된 이름을 제어합니다. -
global.serviceAccount.automountServiceAccountToken
설정은 기본 ServiceAccount 액세스 토큰을 포드에 마운트할지를 제어합니다. 이는 특정 사이드카가 정상 작동하기 위해 필요한 경우를 제외하고는 사용하지 않아야 합니다(예: Istio).
참고:
global.serviceAccount.create=true
를 global.serviceAccount.name
과 함께 사용하지 마십시오. 동일한 이름으로 여러 ServiceAccount 객체를 생성하도록 차트를 지시합니다. 대신 글로벌 이름을 지정하는 경우 global.serviceAccount.create=false
를 사용하세요.
어노테이션
사용자 정의 어노테이션은 배포, 서비스 및 인그레스 객체에 적용할 수 있습니다.
global:
deployment:
annotations:
environment: production
service:
annotations:
environment: production
ingress:
annotations:
environment: production
노드 선택자
사용자 정의 nodeSelector
를 전역적으로 모든 구성 요소에 적용할 수 있습니다. 모든 글로벌 기본값은 각 하위 차트에서도 재정의할 수 있습니다.
global:
nodeSelector:
disktype: ssd
참고:
외부에서 유지보수되는 차트는 현재 global.nodeSelector
을 준수하지 않으며 사용 가능한 차트 값에 따라 별도로 구성해야 할 수 있습니다. 이는 Prometheus, cert-manager, Redis 등을 포함합니다.
라벨
공통 라벨
common.labels
구성을 사용하여 다양한 객체에 적용할 수 있습니다. 이는 global
키 또는 특정 차트 구성 아래에 적용할 수 있습니다. 예시:
global:
common:
labels:
environment: production
gitlab:
gitlab-shell:
common:
labels:
foo: bar
위의 예시 구성에서 Helm 차트에 의해 배포된 거의 모든 구성 요소에 라벨 세트 environment: production
이 제공됩니다. GitLab Shell 차트의 모든 구성 요소에는 라벨 세트 foo: bar
가 있습니다. 일부 차트는 추가적인 중첩이 가능합니다. 예를 들어, Sidekiq 및 Webservice 차트는 구성에 따라 추가 배포가 가능합니다.
위 예시에서 pod-0
Sidekiq 배포와 관련된 모든 구성 요소는 라벨 세트 baz: bat
을 받게 됩니다. 추가 세부 정보는 Sidekiq 및 Webservice 차트를 참조하세요.
의존하는 일부 차트는 이 라벨 구성에서 제외됩니다. 추가 라벨은 GitLab 구성 하위 차트만 받게 됩니다.
포드
사용자 정의 라벨을 여러 배포 및 작업에 적용할 수 있습니다. 이러한 보조 라벨은 이미 있는 또는 사전 구성된 라벨에 추가됩니다. 이러한 보조 라벨은 matchSelectors
에 사용되지 않습니다.
global:
pod:
labels:
environment: production
서비스
서비스에 사용자 정의 라벨을 적용할 수 있습니다. 이러한 라벨은 이미 있는 또는 사전 구성된 라벨에 추가됩니다.
global:
service:
labels:
environment: production
추적
GitLab Helm 차트는 추적을 지원하며 다음과 같이 구성할 수 있습니다:
global:
tracing:
connection:
string: 'opentracing://jaeger?http_endpoint=http%3A%2F%2Fjaeger.example.com%3A14268%2Fapi%2Ftraces&sampler=const&sampler_param=1'
urlTemplate: 'http://jaeger-ui.example.com/search?service={{ service }}&tags=%7B"correlation_id"%3A"{{ correlation_id }}"%7D'
-
global.tracing.connection.string
은 추적 스팬을 보낼 위치를 구성하는 데 사용됩니다. 자세한 내용은 GitLab 추적 문서를 참조하세요. -
global.tracing.urlTemplate
은 GitLab 성능 표시줄의 추적 정보 URL 렌더링을 위한 템플릿으로 사용됩니다.
extraEnv
extraEnv
를 사용하면 GitLab 차트(charts/gitlab/charts
용)를 통해 배포된 모든 컨테이너에 추가 환경 변수를 노출할 수 있습니다. 글로벌 레벨에서 설정된 추가 환경 변수는 차트 수준에서 제공된 것과 병합되며, 차트 수준에서 제공된 것에 우선권이 부여됩니다.
아래는 extraEnv
의 사용 예시입니다:
global:
extraEnv:
SOME_KEY: some_value
SOME_OTHER_KEY: some_other_value
extraEnvFrom
extraEnvFrom
을 사용하여 파드의 모든 컨테이너에서 다른 데이터 원본의 추가 환경 변수를 노출할 수 있습니다. 추가 환경 변수는 global
레벨(global.extraEnvFrom
) 및 서브 차트 레벨(<subchart_name>.extraEnvFrom
)에서 설정할 수 있습니다.
Sidekiq 및 Webservice 차트는 지역적인 추가 재정의를 지원합니다. 자세한 내용은 해당 설명서를 참조하세요.
아래는 extraEnvFrom
의 사용 예시입니다:
global:
extraEnvFrom:
MY_NODE_NAME:
fieldRef:
fieldPath: spec.nodeName
MY_CPU_REQUEST:
resourceFieldRef:
containerName: test-container
resource: requests.cpu
gitlab:
kas:
extraEnvFrom:
CONFIG_STRING:
configMapKeyRef:
name: useful-config
key: some-string
# optional: boolean
참고:
이 구현은 같은 이름에 대해 다른 콘텐츠 유형을 혼합하지 않습니다. 비슷한 콘텐츠로 동일한 이름을 덮어쓸 수 있지만 secretKeyRef
, configMapKeyRef
등과 같은 소스를 혼합하지 마십시오.
OAuth 설정 구성
OAuth 통합은 지원하는 서비스에 대해 즉시 구성됩니다. global.oauth
에 지정된 서비스는 배포 중에 GitLab에 자동으로 OAuth 클라이언트 응용 프로그램으로 등록됩니다. 기본적으로 이 목록에는 GitLab Pages가 포함되며, 액세스 제어가 활성화된 경우입니다.
global:
oauth:
gitlab-pages: {}
# secret
# appid
# appsecret
# redirectUri
# authScope
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
secret
| 문자열 | 서비스의 OAuth 자격 증명을 위한 비밀 이름. | |
appIdKey
| 문자열 | 서비스의 App ID가 저장된 비밀의 키. 기본값은 appid 입니다.
| |
appSecretKey
| 문자열 | 서비스의 App Secret가 저장된 비밀의 키. 기본값은 appsecret 입니다.
| |
redirectUri
| 문자열 | 성공적인 인증 후 사용자가 리디렉션될 URI. | |
authScope
| 문자열 | api
| GitLab API와의 인증에 사용되는 스코프. |
비밀에 대한 자세한 내용은 비밀 문서를 확인하세요.
Kerberos
GitLab Helm 차트에서 Kerberos 통합을 구성하려면, GitLab 호스트에 대한 서비스 주체를 포함하는 Kerberos keytab을 global.appConfig.kerberos.keytab.secret
설정에 제공해야 합니다. 키 탭 파일이 없는 경우 Kerberos 관리자에게 도움을 요청할 수 있습니다.
다음 스니펫을 사용하여 비밀을 생성할 수 있습니다(gitlab
네임스페이스 및 gitlab.keytab
이 서비스 주체를 포함하는 키탭 파일로 차트를 설치하는 것으로 가정).
kubectl create secret generic gitlab-kerberos-keytab --namespace=gitlab --from-file=keytab=./gitlab.keytab
GitLab의 Kerberos 통합은 global.appConfig.kerberos.enabled=true
로 설정하여 활성화됩니다. 이는 또한 브라우저에서 티켓 기반 인증을 위한 OmniAuth 프로바이더 목록에 kerberos
프로바이더가 추가됩니다.
false
로 남겨 둔 경우 Helm 차트는 툴박스, Sidekiq 및 웹 서비스 Pods에 keytab
을 여전히 장착하며, 이는 Kerberos를 위해 수동으로 구성된 OmniAuth 설정과 함께 사용될 수 있습니다.
global.appConfig.kerberos.krb5Config
에서 Kerberos 클라이언트 구성을 제공할 수 있습니다.
global:
appConfig:
kerberos:
enabled: true
keytab:
secret: gitlab-kerberos-keytab
key: keytab
servicePrincipalName: ""
krb5Config: |
[libdefaults]
default_realm = EXAMPLE.COM
dedicatedPort:
enabled: false
port: 8443
https: true
simpleLdapLinkingAllowedRealms:
- example.com
자세한 내용은 Kerberos 문서를 확인하세요.
Kerberos 전용 포트
GitLab은 HTTP 프로토콜을 사용할 때 Kerberos 협상을 위한 전용 포트 사용을 지원합니다. 이는 Git이 인증 교환에서 negotiate
헤더를 제시했을 때 기본 인증으로 빠르게 되돌아가는 Git의 제한을 해결하기 위한 것입니다.
GitLab CI/CD를 사용할 때는 추가 클론 URL을 GitLab UI에 활성화해야 합니다. 이는 GitLab Runner 도우미가 GitLab에서 복제하기 위해 URL 인증 정보를 사용하기 때문입니다.
global.appConfig.kerberos.dedicatedPort
설정으로 이를 활성화할 수 있습니다.
global:
appConfig:
kerberos:
[...]
dedicatedPort:
enabled: true
port: 8443
https: true
이로써 GitLab UI에 Kerberos 협상용 별도 클론 URL이 활성화됩니다. https: true
설정은 URL 생성에만 사용되며 추가 TLS 구성을 노출하지 않습니다. TLS는 GitLab의 Ingress에서 종료되어 구성됩니다.
참고:
현재 우리의 nginx-ingress
Helm 차트의 fork에 대한 제한으로 인해 현재 dedicatedPort
를 지정하면 차트의 nginx-ingress
컨트롤러에서 포트를 현재로 사용할 수 없습니다. 클러스터 운영자는 이 포트를 직접 노출해야 합니다. 자세한 내용과 가능한 해결책은 해당 차트 이슈를 따라가세요.
LDAP 사용자 지정 허용 영역
global.appConfig.kerberos.simpleLdapLinkingAllowedRealms
를 사용하여 사용자의 LDAP DN이 사용자의 Kerberos 영역과 일치하지 않을 때 LDAP와 Kerberos 식별 정보를 링크하는 데 사용된 도메인 집합을 지정할 수 있습니다. 추가 정보는 Kerberos 통합 문서의 사용자 정의 허용 영역 섹션에서 확인할 수 있습니다.
발신 이메일
발신 이메일 구성은 global.smtp.*
, global.appConfig.microsoft_graph_mailer.*
및 global.email.*
을 통해 제공됩니다.
global:
email:
display_name: 'GitLab'
from: 'gitlab@example.com'
reply_to: 'noreply@example.com'
smtp:
enabled: true
address: 'smtp.example.com'
tls: true
authentication: 'plain'
user_name: 'example'
password:
secret: 'smtp-password'
key: 'password'
appConfig:
microsoft_graph_mailer:
enabled: false
user_id: "YOUR-USER-ID"
tenant: "YOUR-TENANT-ID"
client_id: "YOUR-CLIENT-ID"
client_secret:
secret:
key: secret
azure_ad_endpoint: "https://login.microsoftonline.com"
graph_endpoint: "https://graph.microsoft.com"
사용 가능한 구성 옵션에 대한 자세한 정보는 발신 이메일 문서에서 확인할 수 있습니다.
더 구체적인 예제는 Linux 패키지 SMTP 설정 문서에서 찾을 수 있습니다.
플랫폼
platform
키는 GKE 또는 EKS와 같은 특정 플랫폼을 대상으로 하는 특정 기능을 위해 예약됩니다.
Affinity
Affinity 구성은 global.antiAffinity
및 global.affinity
를 통해 사용할 수 있습니다.
Affinity를 사용하면 노드 레이블 또는 이미 노드에서 실행 중인 pod의 레이블을 기반으로 파드가 예정된 노드를 제약할 수 있으며, 클러스터 전체에 pod를 분산하거나 특정 노드를 선택하여 노드 장애 시 더 견고함을 보장할 수 있습니다.
global:
antiAffinity: soft
affinity:
podAntiAffinity:
topologyKey: "kubernetes.io/hostname"
Name | Type | Default | Description |
---|---|---|---|
antiAffinity
| String | soft
| pod에 적용할 Pod 안티 애플리케이션. |
affinity.podAntiAffinity.topologyKey
| String | kubernetes.io/hostname
| Pod 안티 애플리케이션 토폴로지 키. |
-
global.antiAffinity
는 두 가지 값을 가질 수 있습니다:-
soft
: 쿠버네티스 스케줄러가 규칙을 강제하지만 결과는 보장하지 않는preferredDuringSchedulingIgnoredDuringExecution
안티-애플리케이션을 정의합니다. -
hard
: 팟이 노드에 예약되려면 규칙이 반드시 충족되어야 하는requiredDuringSchedulingIgnoredDuringExecution
안티-애플리케이션을 정의합니다.
-
-
global.affinity.podAntiAffinity.topologyKey
는 노드 속성을 나누는 데 사용되는 노드 속성을 정의합니다. 가장 일반적인topologyKey
값은 다음과 같습니다:kubernetes.io/hostname
topology.kubernetes.io/zone
topology.kubernetes.io/region
인터팟 안티 애플리케이션 및 안티-애플리케이션에 대한 Kubernetes 참조
파드 우선 순위 및 선점
파드 우선 순위는 global.priorityClassName
또는 sub-chart별로 priorityClassName
을 통해 구성할 수 있습니다.
파드 우선 순위를 설정하면 스케줄러에게 우선 순위가 낮은 파드를 대기 중인 파드를 예약하기 위해 내쫓도록 지시할 수 있습니다.
global:
priorityClassName: system-cluster-critical
Name | Type | Default | Description |
---|---|---|---|
priorityClassName
| String | 파드에 할당된 우선 순위 클래스. |
로그 회전
기본적으로 GitLab 헬름 차트는 로그를 회전시키지 않습니다. 이는 오랜 시간 실행되는 컨테이너의 일시적인 저장소 문제를 유발할 수 있습니다.
로그 회전을 활성화하려면 GITLAB_LOGGER_TRUNCATE_LOGS
환경 변수를 true
로 설정합니다. 자세한 내용은
GitLab Logger 문서를 참조하세요. 특히,
다음을 참조하세요:
작업
원래 GitLab의 작업은 Helm .Release.Revision
로 끝나는데, 이는 별로 이상적이지 않았습니다. 왜냐하면 helm upgrade --install
을 실행할 때 항상 작업을 업데이트하게 만들었기 때문입니다. 또한 helm template
을 기반으로 하는 워크플로(예: ArgoCD 사용 시)와의 적절한 작업을 방해했습니다. 작업 이름에 .Release.Revision
을 사용하는 결정은 작업이 한 번만 실행될 수 있고 helm uninstall
이 작업을 삭제하지 않을 것이라는 전제에 근거하였습니다(현재는 잘못된 전제입니다).
GitLab Helm 차트 7.9 이상에서 작업 이름은 기본적으로 차트 앱 버전과 차트 값에 기반한 해시와 접미사가 붙습니다. 이 접근 방식은 여러 helm template
및 helm upgrade --install
실행 간에(아무것도 변경되지 않았을 경우) 작업 이름이 안정적으로 유지되고, 작업의 변경 불가능 필드 값을 수정해도 배포 중에 오류가 발생하지 않고 새 작업으로 대체됩니다(새 이름으로 인해).
global.job.nameSuffixOverride
를 사용하여 기본적으로 생성되는 해시를 사용자 정의 접미사로 재정의할 수 있습니다.
이 필드는 템플릿을 지원하므로 .Release.Revision
을 이름 접미사로 사용하는 이전 동작을 재현하는 것도 가능합니다.
global:
job:
nameSuffixOverride: '{{ .Release.Revision }}'
의도적으로 항상 변경을 트리거하려면 예를 들어 모든 버전에 대해 latest
와 같은 플로팅 태그를 사용하는 경우와 같이 기본적으로 생성되는 해시를 동적 값(예: 타임스탬프)으로 재정의할 수 있습니다.
global:
job:
nameSuffixOverride: '{{ dateInZone "2006-01-02-15-04-05" (now) "UTC" }}'
대안적으로, 명령줄에서 helm
을 사용할 수도 있습니다.
helm <command> <options> --set global.job.nameSuffixOverride=$(date +%Y-%m-%d-%H-%M-%S)
Name | Type | Default | Description |
---|---|---|---|
nameSuffixOverride
| String | 자동으로 생성된 해시를 대체하는 사용자 정의 접미사 |
Traefik
Traefik 설정은 globals.traefik
를 통해 구성할 수 있습니다.
global:
traefik:
apiVersion: ""
Name | Type | Default | Description |
---|---|---|---|
apiVersion
| String | Traefik 리소스의 기본 apiVersion 을 덮어씁니다.
|