- S3 암호화
- Azure Blob Storage
- 도커 레지스트리 이미지
- LFS, 아티팩트, 업로드, 패키지, 외부 차이, Terraform 상태, 종속성 프록시, 안전한 파일
- 백업
- Google Cloud CDN
- Troubleshooting
GitLab 차트를 외부 객체 저장소로 구성하기
GitLab은 Kubernetes에서 고가용성의 지속적인 데이터를 위해 객체 저장소에 의존합니다.
기본적으로 minio
라는 이름의 S3 호환 저장소 솔루션이 차트와 함께 배포됩니다. 생산 품질의 배포를 위해 Google Cloud Storage 또는 AWS S3와 같은 호스팅된 객체 저장소 솔루션을 사용하는 것을 권장합니다.
MinIO를 비활성화하려면 이 옵션을 설정한 후 아래에 관련된 문서를 따르세요:
--set global.minio.enabled=false
이 문서에서는 AWS의 액세스 및 비밀 키 사용을 지정하고 있습니다. IAM 역할도 사용할 수 있습니다.
S3 암호화
GitLab은 Amazon KMS를 지원하여 S3 버킷에 저장된 데이터를 암호화할 수 있습니다.
다음 두 가지 방법으로 이를 활성화할 수 있습니다:
- AWS에서, S3 버킷을 기본 암호화로 설정하세요.
- GitLab에서, 서버 측 암호화 헤더를 활성화하세요.
이 두 가지 옵션은 상호 배타적이지 않습니다. 기본 암호화 정책을 설정할 수 있지만, 서버 측 암호화 헤더를 활성화하여 이러한 기본값을 재정의할 수도 있습니다.
자세한 내용은 암호화된 S3 버킷에 대한 GitLab 문서를 참조하세요.
Azure Blob Storage
업로드된 첨부파일, CI 작업 아티팩트, LFS 및 통합 설정을 통해 지원되는 기타 객체 유형에 대해 Azure Blob 저장소의 직접 지원이 가능합니다. 이전 GitLab 버전에서는 Azure MinIO 게이트웨이가 필요했습니다.
Azure는 블롭의 모음을 나타내기 위해 컨테이너라는 단어를 사용하지만, GitLab은 버킷이라는 용어를 표준화합니다.
Azure Blob 저장소는 통합 객체 저장소 설정을 사용해야 합니다. 여러 Azure 블롭 컨테이너에서 단일 Azure 저장 계정 이름과 키를 사용해야 합니다. 객체 유형별로 개별 connection
설정을 사용자 지정하는 것은 허용되지 않습니다 (예: artifacts
, uploads
등).
Azure Blob 저장소를 활성화하려면, Azure connection
을 정의하는 예로 rails.azurerm.yaml
을 참조하세요. 다음의 명령어를 통해 이를 비밀로 로드할 수 있습니다:
kubectl create secret generic gitlab-rails-storage --from-file=connection=rails.azurerm.yml
그런 다음 MinIO를 비활성화하고 이러한 전역 설정을 설정하세요:
--set global.minio.enabled=false
--set global.appConfig.object_store.enabled=true
--set global.appConfig.object_store.connection.secret=gitlab-rails-storage
기본 이름에 대한 Azure 컨테이너를 생성하거나 버킷 구성에서 컨테이너 이름을 설정해야 합니다.
로컬 네트워크에 대한 요청이 허용되지 않습니다
라는 실패하는 요청이 발생하면, 문제 해결 섹션을 참조하세요.도커 레지스트리 이미지
registry
차트의 객체 저장소 구성은 registry.storage
키와 global.registry.bucket
키를 통해 수행됩니다.
--set registry.storage.secret=registry-storage
--set registry.storage.key=config
--set global.registry.bucket=bucket-name
주의:
버킷 이름은 비밀과 global.registry.bucket
모두에 설정해야 합니다. 비밀은 레지스트리 서버에서 사용되며,
전역은 GitLab 백업에서 사용됩니다.
레지스트리 차트의 저장소 문서에 따라 비밀을 생성한 후, 이 비밀을 사용하도록 차트를 구성하세요.
S3 예제(S3 호환 저장소, 하지만 Azure MinIO 게이트웨이는 지원하지 않음,
Azure Blob Storage 참조), Azure 및
GCS 드라이버의 예는
examples/objectstorage
에서 확인할 수 있습니다.
레지스트리 구성
-
사용할 저장소 서비스를 결정합니다.
-
적절한 파일을
registry-storage.yaml
에 복사합니다. -
환경에 맞는 올바른 값으로 편집합니다.
-
비밀을 생성하기 위해 레지스트리 차트의 저장소 문서를 따르세요.
-
문서에 설명된 대로 차트를 구성하세요.
LFS, 아티팩트, 업로드, 패키지, 외부 차이, Terraform 상태, 종속성 프록시, 안전한 파일
LFS, 아티팩트, 업로드, 패키지, 외부 차이, Terraform 상태, 안전한 파일 및 별명 생성기의 객체 저장소 구성은 다음 키를 통해 수행됩니다:
global.appConfig.lfs
global.appConfig.artifacts
global.appConfig.uploads
global.appConfig.packages
global.appConfig.externalDiffs
global.appConfig.dependencyProxy
global.appConfig.terraformState
global.appConfig.ciSecureFiles
또한 다음을 유의하십시오:
-
기본 명칭 또는 버킷 구성에서의 사용자 정의 명칭에 대한 버킷을 생성해야 합니다.
-
각각에 대해 다른 버킷이 필요하므로, 백업에서 복원하는 작업이 제대로 작동하지 않습니다.
-
외부 저장소에 MR 차이를 저장하는 것은 기본적으로 활성화되어 있지 않으므로,
externalDiffs
에 대한 객체 저장소 설정이 적용되기 위해서는,global.appConfig.externalDiffs.enabled
키에true
값을 가져야 합니다. -
종속성 프록시 기능은 기본적으로 활성화되어 있지 않으므로,
dependencyProxy
에 대한 객체 저장소 설정이 적용되기 위해서는,global.appConfig.dependencyProxy.enabled
키에true
값을 가져야 합니다.
아래는 구성 옵션의 예입니다:
--set global.appConfig.lfs.bucket=gitlab-lfs-storage
--set global.appConfig.lfs.connection.secret=object-storage
--set global.appConfig.lfs.connection.key=connection
--set global.appConfig.artifacts.bucket=gitlab-artifacts-storage
--set global.appConfig.artifacts.connection.secret=object-storage
--set global.appConfig.artifacts.connection.key=connection
--set global.appConfig.uploads.bucket=gitlab-uploads-storage
--set global.appConfig.uploads.connection.secret=object-storage
--set global.appConfig.uploads.connection.key=connection
--set global.appConfig.packages.bucket=gitlab-packages-storage
--set global.appConfig.packages.connection.secret=object-storage
--set global.appConfig.packages.connection.key=connection
--set global.appConfig.externalDiffs.bucket=gitlab-externaldiffs-storage
--set global.appConfig.externalDiffs.connection.secret=object-storage
--set global.appConfig.externalDiffs.connection.key=connection
--set global.appConfig.terraformState.bucket=gitlab-terraform-state
--set global.appConfig.terraformState.connection.secret=object-storage
--set global.appConfig.terraformState.connection.key=connection
--set global.appConfig.dependencyProxy.bucket=gitlab-dependencyproxy-storage
--set global.appConfig.dependencyProxy.connection.secret=object-storage
--set global.appConfig.dependencyProxy.connection.key=connection
--set global.appConfig.ciSecureFiles.bucket=gitlab-ci-secure-files
--set global.appConfig.ciSecureFiles.connection.secret=object-storage
--set global.appConfig.ciSecureFiles.connection.key=connection
charts/globals 문서에서 appConfig 구성에 대한 전체 세부정보를 확인하세요.
연결 세부정보 문서에 따라 비밀을 생성한 후, 제공된 비밀을 사용하도록 차트를 구성하세요. 동일한 비밀은 모두에 사용될 수 있습니다.
AWS (MinIO를 사용하는 Azure와 같은 S3 호환),
Google 공급자에 대한 예는
examples/objectstorage
에서 확인할 수 있습니다.
appConfig 구성
- 사용할 저장소 서비스를 결정합니다.
- 적절한 파일을
rails.yaml
에 복사합니다. - 환경에 맞는 올바른 값으로 수정합니다.
- 비밀을 생성하기 위해 연결 세부 정보 문서를 참조합니다.
- 문서화된 대로 차트를 구성합니다.
백업
백업은 객체 스토리지에 저장되며, 포함된 MinIO 서비스가 아닌 외부를 가리키도록 구성해야 합니다. 백업/복원 절차는 두 개의 별도의 버킷을 사용합니다:
- 백업을 저장하는 버킷(
global.appConfig.backups.bucket
) - 복원 과정에서 기존 데이터를 보존하기 위한 임시 버킷(
global.appConfig.backups.tmpBucket
)
AWS S3 호환 객체 스토리지 시스템, Google Cloud Storage 및 Azure Blob Storage가 지원되는 백엔드입니다. global.appConfig.backups.objectStorage.backend
를 설정하여 백엔드 유형을 구성할 수 있습니다.
AWS S3의 경우 s3
, Google Cloud Storage의 경우 gcs
, Azure Blob Storage의 경우 azure
로 설정합니다.
또한 gitlab.toolbox.backups.objectStorage.config
키를 통해 연결 구성을 제공해야 합니다.
Google Cloud Storage를 비밀과 함께 사용할 때는 global.appConfig.backups.objectStorage.config.gcpProject
값으로 GCP 프로젝트가 설정되어야 합니다.
S3 호환 스토리지의 경우:
--set global.appConfig.backups.bucket=gitlab-backup-storage
--set global.appConfig.backups.tmpBucket=gitlab-tmp-storage
--set gitlab.toolbox.backups.objectStorage.config.secret=storage-config
--set gitlab.toolbox.backups.objectStorage.config.key=config
비밀과 함께 Google Cloud Storage(GCS)의 경우:
--set global.appConfig.backups.bucket=gitlab-backup-storage
--set global.appConfig.backups.tmpBucket=gitlab-tmp-storage
--set gitlab.toolbox.backups.objectStorage.backend=gcs
--set gitlab.toolbox.backups.objectStorage.config.gcpProject=my-gcp-project-id
--set gitlab.toolbox.backups.objectStorage.config.secret=storage-config
--set gitlab.toolbox.backups.objectStorage.config.key=config
Workload Identity Federation for GKE와 함께 Google Cloud Storage(GCS)를 사용할 경우, 백엔드와 버킷만 설정하면 됩니다.
gitlab.toolbox.backups.objectStorage.config.secret
및 gitlab.toolbox.backups.objectStorage.config.key
는 설정하지 않도록 하여 클러스터가 Google의 애플리케이션 기본 자격 증명을 사용하도록 하십시오:
--set global.appConfig.backups.bucket=gitlab-backup-storage
--set global.appConfig.backups.tmpBucket=gitlab-tmp-storage
--set gitlab.toolbox.backups.objectStorage.backend=gcs
Azure Blob Storage의 경우:
--set global.appConfig.backups.bucket=gitlab-backup-storage
--set global.appConfig.backups.tmpBucket=gitlab-tmp-storage
--set gitlab.toolbox.backups.objectStorage.backend=azure
--set gitlab.toolbox.backups.objectStorage.config.secret=storage-config
--set gitlab.toolbox.backups.objectStorage.config.key=config
전체 세부 사항은 백업/복원 객체 스토리지 문서를 참조하십시오.
참고: 다른 객체 스토리지 위치에서 파일을 백업하거나 복원하려면, 구성 파일이 모든 GitLab 버킷에 대한 읽기/쓰기 권한이 있는 사용자로 인증되도록 구성되어야 합니다.
백업 스토리지 예제
-
storage.config
파일을 생성합니다:-
Amazon S3에서 파일의 내용은 s3cmd 구성 파일 형식이어야 합니다.
[default] access_key = AWS_ACCESS_KEY secret_key = AWS_SECRET_KEY bucket_location = us-east-1 multipart_chunk_size_mb = 128 # 기본값은 15 (MB)
-
Google Cloud Storage의 경우,
storage.admin
역할을 가진 서비스 계정을 생성한 다음 서비스 계정 키를 생성하여 파일을 생성할 수 있습니다. 아래는gcloud
CLI를 사용하여 파일을 생성하는 예제입니다.export PROJECT_ID=$(gcloud config get-value project) gcloud iam service-accounts create gitlab-gcs --display-name "Gitlab Cloud Storage" gcloud projects add-iam-policy-binding --role roles/storage.admin ${PROJECT_ID} --member=serviceAccount:gitlab-gcs@${PROJECT_ID}.iam.gserviceaccount.com gcloud iam service-accounts keys create --iam-account gitlab-gcs@${PROJECT_ID}.iam.gserviceaccount.com storage.config
-
Azure Storage의 경우
[default] # 엔드포인트 설정: 웹 앱의 호스트 이름 host_base = https://your_minio_setup.azurewebsites.net host_bucket = https://your_minio_setup.azurewebsites.net # 기본값으로 두기 bucket_location = us-west-1 use_https = True multipart_chunk_size_mb = 128 # 기본값은 15 (MB) # 접근 키 설정 # Access Key = Azure Storage 계정 이름 access_key = AZURE_ACCOUNT_NAME # Secret Key = Azure Storage 계정 키 secret_key = AZURE_ACCOUNT_KEY # S3 v4 서명 API 사용 signature_v2 = False
-
-
비밀을 생성합니다.
kubectl create secret generic storage-config --from-file=config=storage.config
Google Cloud CDN
Google Cloud CDN을 사용하여 아티팩트 버킷에서 데이터를 캐시하고 가져올 수 있습니다.
이는 성능을 개선하고 네트워크 전송 비용을 줄이는 데 도움이 될 수 있습니다.
Cloud CDN의 구성은 다음 키를 통해 수행됩니다:
global.appConfig.artifacts.cdn.secret
-
global.appConfig.artifacts.cdn.key
(기본값은cdn
)
Cloud CDN을 사용하려면:
-
rails.googlecdn.yaml
에서 예제를 사용하여 매개 변수를 포함한 YAML 파일을 준비합니다. 다음 정보를 입력해야 합니다:-
url
: 1단계에서의 CDN 호스트의 기본 URL -
key_name
: 2단계에서의 키 이름 -
key
: 2단계에서의 실제 비밀
-
-
이 YAML 파일을
cdn
키 아래의 Kubernetes 비밀에 로드합니다. 예를 들어,gitlab-rails-cdn
비밀을 생성하려면:kubectl create secret generic gitlab-rails-cdn --from-file=cdn=rails.googlecdn.yml
-
global.appConfig.artifacts.cdn.secret
를gitlab-rails-cdn
으로 설정합니다.helm
매개변수를 통해 설정하는 경우, 다음을 사용합니다:--set global.appConfig.artifacts.cdn.secret=gitlab-rails-cdn
Troubleshooting
Azure Blob: URL [FILTERED]가 차단되었습니다: 로컬 네트워크에 대한 요청은 허용되지 않습니다
Azure Blob 호스트 이름이 RFC1918 (로컬 / 개인) IP 주소로 확인될 때 이 문제가 발생합니다.
해결 방법으로 Azure Blob 호스트 이름(yourinstance.blob.core.windows.net
)에 대해 아웃바운드 요청 허용을 설정하세요.