使用外部对象存储配置极狐GitLab chart
极狐GitLab 依赖对象存储来实现 Kubernetes 中的高可用持久数据。极狐GitLab 支持两种主要云对象存储提供商的认证方法:静态凭证和通过云特定服务的临时凭证。
静态凭证
这些凭证是针对所有提供商的长期访问密钥和密钥:
- AWS S3:访问密钥 ID + 密钥访问密钥
- Google Cloud Storage:服务账户 JSON 密钥文件
- Azure Blob Storage:存储账户名称 + 密钥,或客户端 ID + 租户 ID + 客户端密钥
通过云 IAM 获取临时凭证
极狐GitLab 可以检索提供商特定的工作负载身份机制以获得动态、短期的凭证:
- AWS S3:IAM 角色用于服务账户(IRSA)
- Google Cloud Storage:工作负载身份联合
- Azure Blob Storage:用于 Azure Kubernetes 服务的工作负载身份
这些临时凭证机制通过以下方式提高安全性:
- 消除长期静态凭证。
- 提供自动化凭证轮换。
- 启用细粒度的访问控制。
- 支持凭证使用的审计日志。
- 与云提供商的 IAM 策略集成。
禁用 MinIO
默认情况下,名为 minio 的 S3 兼容存储解决方案与 chart 一起部署。对于生产质量的部署,我们建议使用托管的对象存储解决方案,如 Google Cloud Storage 或 AWS S3。
要禁用 MinIO,请设置此选项,然后按照下面的相关文档操作:
shell--set global.minio.enabled=false
Azure Blob Storage
对于上传的附件、CI 作业产物、LFS 以及通过合并设置支持的其他对象类型,提供了对 Azure Blob 存储的直接支持。在以前的极狐GitLab 版本中,需要一个 Azure MinIO 网关。
虽然 Azure 使用容器一词来表示一组 blob,但极狐GitLab 统一使用术语 bucket。
Azure Blob 存储需要使用合并对象存储设置。一个 Azure 存储账户名称和密钥必须在多个 Azure blob 容器中使用。不允许根据对象类型(例如,artifacts、uploads 等)自定义单独的 connection 设置。
要启用 Azure Blob 存储,请参见rails.azurerm.yaml,作为定义 Azure connection 的示例。您可以通过以下方式将其作为密钥加载:
shellkubectl create secret generic gitlab-rails-storage --from-file=connection=rails.azurerm.yml
然后,禁用 MinIO 并设置这些全局设置:
shell--set global.minio.enabled=false --set global.appConfig.object_store.enabled=true --set global.appConfig.object_store.connection.secret=gitlab-rails-storage
确保为默认名称创建 Azure 容器,或在 bucket 配置中设置容器名称。
Docker Registry 镜像
registry chart 的对象存储配置通过 registry.storage 键和 global.registry.bucket 键完成。
shell--set registry.storage.secret=registry-storage --set registry.storage.key=config --set global.registry.bucket=bucket-name
根据registry chart 文档中的存储创建密钥,然后配置 chart 以使用此密钥。
S3(S3 兼容存储,但不支持 Azure MinIO 网关,参见 Azure Blob Storage)、Azure 和 GCS 驱动程序的示例可以在examples/objectstorage中找到。
Registry 配置
- 决定使用哪个存储服务。
- 将适当的文件复制到 registry-storage.yaml。
- 使用环境的正确值进行编辑。
- 根据registry chart 文档中的存储创建密钥。
- 按照文档配置 chart 。
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
另请注意:
- 您必须为默认名称或 bucket 配置中的自定义名称创建 bucket。
- 每个都需要不同的 bucket,否则从备份执行恢复无法正常工作。
- 外部存储上存储 MR 差异默认未启用,因此,为使 externalDiffs 的对象存储设置生效,global.appConfig.externalDiffs.enabled 键应为 true。
- 依赖代理功能默认未启用,因此,为使 dependencyProxy 的对象存储设置生效,global.appConfig.dependencyProxy.enabled 键应为 true。
下面是配置选项的示例:
shell1--set global.appConfig.lfs.bucket=gitlab-lfs-storage 2--set global.appConfig.lfs.connection.secret=object-storage 3--set global.appConfig.lfs.connection.key=connection 4 5--set global.appConfig.artifacts.bucket=gitlab-artifacts-storage 6--set global.appConfig.artifacts.connection.secret=object-storage 7--set global.appConfig.artifacts.connection.key=connection 8 9--set global.appConfig.uploads.bucket=gitlab-uploads-storage 10--set global.appConfig.uploads.connection.secret=object-storage 11--set global.appConfig.uploads.connection.key=connection 12 13--set global.appConfig.packages.bucket=gitlab-packages-storage 14--set global.appConfig.packages.connection.secret=object-storage 15--set global.appConfig.packages.connection.key=connection 16 17--set global.appConfig.externalDiffs.bucket=gitlab-externaldiffs-storage 18--set global.appConfig.externalDiffs.connection.secret=object-storage 19--set global.appConfig.externalDiffs.connection.key=connection 20 21--set global.appConfig.terraformState.bucket=gitlab-terraform-state 22--set global.appConfig.terraformState.connection.secret=object-storage 23--set global.appConfig.terraformState.connection.key=connection 24 25--set global.appConfig.dependencyProxy.bucket=gitlab-dependencyproxy-storage 26--set global.appConfig.dependencyProxy.connection.secret=object-storage 27--set global.appConfig.dependencyProxy.connection.key=connection 28 29--set global.appConfig.ciSecureFiles.bucket=gitlab-ci-secure-files 30--set global.appConfig.ciSecureFiles.connection.secret=object-storage 31--set global.appConfig.ciSecureFiles.connection.key=connection
有关详细信息,请参阅charts/globals 文档中的 appConfig。
根据连接详细信息文档创建密钥,然后配置 chart 以使用提供的密钥。注意,所有这些都可以使用相同的密钥。
AWS(任何 S3 兼容如 使用 MinIO 的 Azure)提供商的示例可以在examples/objectstorage中找到。
S3 加密
极狐GitLab 支持 Amazon KMS来加密存储在 S3 bucket 中的数据。您可以通过两种方式启用此功能:
- 在 AWS 中,配置 S3 bucket 以使用默认加密。
- 在极狐GitLab 中,启用服务器端加密头。
这两个选项不是互斥的。您可以设置默认加密策略,还可以启用服务器端加密头来覆盖这些默认设置。
有关更多详细信息,请参阅极狐GitLab 文档中的加密 S3 bucket。
appConfig 配置
- 决定使用哪个存储服务。
- 将适当的文件复制到 rails.yaml。
- 使用环境的正确值进行编辑。
- 根据连接详细信息文档创建密钥。
- 按照文档配置 chart 。
备份
备份也存储在对象存储中,必须配置为指向外部而不是包含的 MinIO 服务。备份/恢复过程使用两个单独的 bucket:
- 用于存储备份的 bucket(global.appConfig.backups.bucket)
- 用于在恢复过程中保留现有数据的临时 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 时,必须使用 global.appConfig.backups.objectStorage.config.gcpProject 值设置 GCP 项目。
对于 S3 兼容存储:
shell--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):
shell1--set global.appConfig.backups.bucket=gitlab-backup-storage 2--set global.appConfig.backups.tmpBucket=gitlab-tmp-storage 3--set gitlab.toolbox.backups.objectStorage.backend=gcs 4--set gitlab.toolbox.backups.objectStorage.config.gcpProject=my-gcp-project-id 5--set gitlab.toolbox.backups.objectStorage.config.secret=storage-config 6--set gitlab.toolbox.backups.objectStorage.config.key=config
对于使用 GKE 的工作负载身份联合的 Google Cloud Storage (GCS),只需设置后端和 bucket。确保不设置 gitlab.toolbox.backups.objectStorage.config.secret 和 gitlab.toolbox.backups.objectStorage.config.key,以便集群使用 Google 的应用默认凭证:
shell--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:
shell--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 配置文件格式
toml[default] access_key = AWS_ACCESS_KEY secret_key = AWS_SECRET_KEY bucket_location = us-east-1 multipart_chunk_size_mb = 128 # default is 15 (MB) -
在 Google Cloud Storage 上,您可以通过创建一个具有 storage.admin 角色的服务账户,然后创建服务账户密钥来创建文件。以下是使用 gcloud CLI 创建文件的示例。
shellexport 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
toml1[default] 2# Setup endpoint: hostname of the Web App 3host_base = https://your_minio_setup.azurewebsites.net 4host_bucket = https://your_minio_setup.azurewebsites.net 5# Leave as default 6bucket_location = us-west-1 7use_https = True 8multipart_chunk_size_mb = 128 # default is 15 (MB) 9 10# Setup access keys 11# Access Key = Azure Storage Account name 12access_key = AZURE_ACCOUNT_NAME 13# Secret Key = Azure Storage Account Key 14secret_key = AZURE_ACCOUNT_KEY 15 16# Use S3 v4 signature APIs 17signature_v2 = False
-
-
创建密钥
shellkubectl create secret generic storage-config --from-file=config=storage.config
Google Cloud CDN
History
- 在极狐GitLab 15.5 中引入。
您可以使用 Google Cloud CDN 来缓存和从产物 bucket 获取数据。这样可以帮助提高性能并减少网络出口成本。
Cloud CDN 的配置通过以下键完成:
- global.appConfig.artifacts.cdn.secret
- global.appConfig.artifacts.cdn.key(默认是 cdn)
要使用 Cloud CDN:
-
设置 Cloud CDN 将产物 bucket 用作后端。
-
创建用于签名 URL 的密钥。
-
给予 Cloud CDN 服务账户读取 bucket 的权限。
-
使用rails.googlecdn.yaml中的示例准备一个包含参数的 YAML 文件。您需要填写以下信息:
- url:步骤 1 中 CDN 主机的基本 URL
- key_name:步骤 2 中的密钥名称
- key:步骤 2 中的实际密钥
-
将此 YAML 文件加载到 Kubernetes 密钥中,位于 cdn 键下。例如,创建一个密钥 gitlab-rails-cdn:
shellkubectl create secret generic gitlab-rails-cdn --from-file=cdn=rails.googlecdn.yml -
将 global.appConfig.artifacts.cdn.secret 设置为 gitlab-rails-cdn。如果您通过 helm 参数设置此项,请使用:
shell--set global.appConfig.artifacts.cdn.secret=gitlab-rails-cdn