- S3 加密
- Azure Blob 存储
- Docker Registry 镜像
- LFS, Artifacts, Uploads, Packages, External Diffs, Terraform State, Dependency Proxy, Secure Files
- 备份
- 故障排除
使用外部对象存储配置极狐GitLab chart
GitLab 依靠对象存储来存储 Kubernetes 中的高可用持久数据。默认情况下,名为 minio
的 S3 兼容存储解决方案与 chart 一起部署,但对于生产环境质量的部署,我们建议使用托管对象存储解决方案,如 Google Cloud Storage 或 AWS S3。
要禁用 MinIO,请设置此选项,然后按照以下文档进行操作:
--set global.minio.enabled=false
本文档指定了 AWS 的访问和 secret 密钥的使用。
S3 加密
支持 Amazon KMS 加密存储在 S3 存储桶中的数据。 您可以通过两种方式启用此功能:
- 在 AWS 中,将 S3 存储桶配置为使用默认加密。
- 在极狐GitLab 中,启用服务器端加密 headers。
这两个选项并不相互排斥。您可以设置默认加密策略,还可以启用服务器端加密 header 来覆盖这些默认值。
Azure Blob 存储
对于 Azure 的 Blob 存储的直接支持可用于上传附件, CI 作业产物, LFS, 和其它对象类型支持的统一设置。在早期的版本中,需要 Azure MinIO 网关。
尽管 Azure 使用“容器”一词来表示 Blob 的集合,但 GitLab 对术语“桶”进行了标准化。
Azure Blob 存储需要使用统一的对象存储设置。必须跨多个 Azure blob 容器使用单个 Azure 存储帐户名称和密钥。不允许使用对象类型(例如,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
请确保创建 Azure 容器为默认名称或在存储桶配置中设置容器名称 。
Requests to the local network are not allowed
,请参阅 故障排除部分。Docker Registry 镜像
registry
chart 的对象存储配置是通过 registry.storage
键和 global.registry.bucket
键完成的。
--set registry.storage.secret=registry-storage
--set registry.storage.key=config
--set global.registry.bucket=bucket-name
注意:存储桶名称需要在 secret 和
global.registry.bucket
中设置。secret 用于 registry 服务器,全局配置用于 GitLab 备份。
根据 registry chart 文档 创建 secret,然后配置 chart 以使用此 secret。
S3 示例(S3 兼容存储,但不支持 Azure MinIO 网关,查看 Azure Blob Storage), Azure 和GCS 驱动配置可以在 examples/objectstorage
中找到。
Registry 配置
- 决定使用哪个存储服务。
- 将适当的文件复制到
registry-storage.yaml
。 - 使用正确的环境值进行编辑。
- 按照 registry chart 存储文档 创建 secret。
- 按照文档配置 chart。
LFS, Artifacts, Uploads, Packages, External Diffs, Terraform State, Dependency Proxy, Secure Files
LFS、产物、上传文件、软件包、外部差异、Terraform state、安全文件和 pseudonymizer 的对象存储配置通过以下键完成:
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
请参阅appConfig charts/全局配置文档的全部细节。
根据 connection 详细文档 创建 secret, 然后配置 chart 以使用这些 secret。注意它们可以使用相同的 secret。
S3 (S3 兼容存储,但不支持 Azure MinIO 网关,查看 Azure Blob Storage) 和 Google 提供商的示例可以在 examples/objectstorage
中找到。
appConfig 配置
- 决定使用哪个存储服务。
- 将适当的文件复制到
rails.yaml
。 - 使用正确的环境值进行编辑。
- 按照 connection 详细文档 创建 secret。
- 按照文档配置 chart。
备份
备份也存储在对象存储中,并且必须配置为指向外部而不是包含的 MinIO 服务。备份/恢复过程使用两个单独的存储桶。用于存储备份的存储桶 (global.appConfig.backups.bucket
)
以及用于在还原过程中保留现有数据的临时存储桶 (global.appConfig.backups.tmpBucket
)。
支持的存储后端包括 AWS S3 兼容的对象存储系统、Google Cloud Storage 和 Azure Blob 存储。
后端类型可通过将 global.appConfig.backups.objectStorage.backend
分别设置为 s3
、 azure
、gcs
来配置。还必须提供通过 gitlab.task-runner.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
对于 Azure Blob 存储:
--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
查看备份/恢复对象存储文档获取详细信息。
备份存储示例
-
创建
storage.config
文件:-
在 Amazon S3 上,内容应为 s3cmd 配置文件格式。
[default] access_key = BOGUS_ACCESS_KEY secret_key = BOGUS_SECRET_KEY bucket_location = us-east-1 multipart_chunk_size_mb = 128 # default is 15 (MB)
-
在 Google Cloud Storage 上,您可以通过创建具有
storage.admin
角色的服务帐户,然后创建 service account 密钥。以下是使用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 存储
[default] # Setup endpoint: hostname of the Web App host_base = https://your_minio_setup.azurewebsites.net host_bucket = https://your_minio_setup.azurewebsites.net # Leave as default bucket_location = us-west-1 use_https = True multipart_chunk_size_mb = 128 # default is 15 (MB) # Setup access keys # Access Key = Azure Storage Account name access_key = BOGUS_ACCOUNT_NAME # Secret Key = Azure Storage Account Key secret_key = BOGUS_KEY # Use S3 v4 signature APIs signature_v2 = False
-
-
创建 secret
kubectl create secret generic storage-config --from-file=config=storage.config
故障排除
Azure Blob: URL [FILTERED] is blocked: Requests to the local network are not allowed
当 Azure Blob 主机名解析为 RFC1918(本地/私有)IP 地址时,会发生这种情况。作为一种解决方法,允许对 Azure Blob 主机名(yourinstance.blob.core.windows.net
)的出站请求。