- S3 암호화
- Azure Blob Storage
- Docker Registry 이미지
- LFS, Artifacts, Uploads, Packages, External Diffs, Terraform State, Dependency Proxy, Secure Files
- 백업
- 구글 클라우드 CDN
- 문제 해결
외부 객체 저장소를 사용하여 GitLab 차트 구성
GitLab은 Kubernetes에서 고가용성의 지속적인 데이터를 위해 객체 저장소를 사용합니다.
기본적으로 minio
라는 S3 호환 스토리지 솔루션이 차트와 함께 배포됩니다.
품질이 좋은 프로덕션 배포를 위해 Google Cloud Storage 또는 AWS S3와 같은 호스팅된 객체 저장소 솔루션을 사용하는 것을 추천합니다.
MinIO를 비활성화하려면 이 옵션을 설정한 다음 아래와 관련된 문서를 따르세요.
--set global.minio.enabled=false
전체 구성 예시는 예시에서 제공되었습니다.
이 문서는 AWS의 액세스 및 시크릿 키 사용을 명시하고 있습니다. 또한 IAM roles을 사용할 수도 있습니다.
S3 암호화
GitLab은 Amazon KMS를 지원하여 S3 버킷에 저장된 데이터를 암호화할 수 있습니다. 이를 활성화하는 방법은 두 가지가 있습니다.
- AWS에서 S3 버킷에 기본 암호화를 구성합니다.
- GitLab에서 서버 측 암호화 헤더를 활성화합니다.
이 두 가지 옵션은 상호 배타적이지 않습니다. 기본 암호화 정책을 설정할 수도 있지만 이를 재정의하기 위해 서버 측 암호화 헤더를 활성화할 수도 있습니다.
더 많은 세부 정보는 암호화된 S3 버킷 문서에서 확인하세요.
Azure Blob Storage
Azure Blob 저장소는 업로드된 첨부 파일, CI 작업 아티팩트, LFS 및 다른 객체 유형을 통해 지원되는 통합 설정에 대한 직접 지원이 가능합니다. 이전 GitLab 버전에서는 Azure MinIO 게이트웨이가 필요했습니다.
참고: GitLab은 Docker 레지스트리의 저장소로 Azure MinIO 게이트웨이를 지원하지 않습니다. Docker 레지스트리 설정을 할 때 해당 Azure 예제를 참조하세요.
Azure는 blob의 모음을 나타내기 위해 “컨테이너”라는 용어를 사용하지만, GitLab은 “버킷”이라는 용어를 표준화합니다.
Azure Blob 저장소는 통합 객체 저장소 설정을 사용해야 합니다.
하나의 Azure 스토리지 계정 이름과 키를 여러 Azure blob 컨테이너에 걸쳐 사용해야 합니다.
각 객체 유형(예: artifacts
, uploads
등)에 대한 개별 connection
설정 사용을 허용하지 않습니다.
Azure Blob 저장소를 사용하려면 아래와 같이 설정하세요:
rails.azurerm.yaml
를 참조하여 Azure connection
을 정의하는 예제를 사용하세요. 다음과 같이 시크릿으로 로드할 수 있습니다.
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
기본 이름 또는 버킷 구성에 컨테이너 이름을 설정하세요.
참고:
로컬 네트워크에 대한 요청이 허용되지 않습니다
(Requests to the local network are not allowed) 오류가 발생하는 경우 문제 해결 섹션을 확인하세요.
Docker 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, Artifacts, Uploads, Packages, External Diffs, Terraform State, Dependency Proxy, Secure Files
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(S3 호환 스토리지, 그러나 Azure MinIO 게이트웨이는 지원되지 않음, Azure MinIO를 사용한 Azure 포함) 및 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
를 s3
로 설정하여 AWS S3, gcs
로 Google Cloud Storage, 또는 azure
로 Azure Blob Storage와 같은 백엔드 유형을 구성할 수 있습니다. 또한 gitlab.toolbox.backups.objectStorage.config
키를 통해 연결 구성을 제공해야 합니다.
Google Cloud Storage를 사용할 때는 GCP 프로젝트를 global.appConfig.backups.objectStorage.config.gcpProject
값으로 설정해야 합니다.
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)의 경우 백엔드와 버킷만 설정해야 합니다. 클러스터가 Google의 기본 애플리케이션 자격 증명을 사용하도록 gitlab.toolbox.backups.objectStorage.config.secret
및 gitlab.toolbox.backups.objectStorage.config.key
가 설정되지 않도록 해야 합니다.
--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] # 엔드포인트 설정: Web 앱의 호스트명 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) # 액세스 키 설정 # 액세스 키 = Azure Storage 계정 이름 access_key = AZURE_ACCOUNT_NAME # 시크릿 키 = Azure Storage 계정 키 secret_key = AZURE_ACCOUNT_KEY # S3 v4 서명 API 사용 signature_v2 = False
-
-
시크릿을 생성합니다.
kubectl create secret generic storage-config --from-file=config=storage.config
구글 클라우드 CDN
Google Cloud CDN을 사용하여 artifact 버킷에서 데이터를 캐시하고 가져올 수 있습니다. 이는 성능을 향상시키고 네트워크 외부 전송 비용을 줄이는 데 도움이 될 수 있습니다.
Cloud CDN의 구성은 다음 키를 통해 수행됩니다.
global.appConfig.artifacts.cdn.secret
-
global.appConfig.artifacts.cdn.key
(기본값은cdn
)
Cloud CDN을 사용하려면:
- Cloud CDN을 설정하여 artifact 버킷을 백엔드로 사용합니다.
- 서명된 URL을 위한 키를 만듭니다.
- Cloud CDN 서비스 계정이 버킷에서 읽을 수 있는 권한을 부여합니다.
-
rails.googlecdn.yaml
의 예시를 사용하여 매개변수를 사용하여 YAML 파일을 준비합니다. 다음 정보를 기입해야 합니다.-
url
: 단계 1의 CDN 호스트의 기본 URL -
key_name
: 단계 2의 키 이름 -
key
: 단계 2의 실제 시크릿
-
-
cdn
키의 하위에서 이 YAML 파일을 쿠버네티스 시크릿에 로드합니다. 예를 들어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
문제 해결
Azure Blob: URL [필터링됨]이 차단됨: 로컬 네트워크로의 요청이 허용되지 않음
Azure Blob 호스트 이름이 RFC1918(로컬/사설) IP 주소로 해석될 때 발생합니다. 이 문제를 해결하기 위해 Azure Blob 호스트 이름(yourinstance.blob.core.windows.net
)에 대한 외부 요청을 허용하세요.