使用外部对象存储配置极狐GitLab chart

极狐GitLab 依赖对象存储来实现 Kubernetes 中的高可用持久数据。极狐GitLab 支持两种主要云对象存储提供商的认证方法:静态凭证和通过云特定服务的临时凭证。

静态凭证#

这些凭证是针对所有提供商的长期访问密钥和密钥:

  • AWS S3:访问密钥 ID + 密钥访问密钥
  • Google Cloud Storage:服务账户 JSON 密钥文件
  • Azure Blob Storage:存储账户名称 + 密钥,或客户端 ID + 租户 ID + 客户端密钥

通过云 IAM 获取临时凭证#

极狐GitLab 可以检索提供商特定的工作负载身份机制以获得动态、短期的凭证:

这些临时凭证机制通过以下方式提高安全性:

  • 消除长期静态凭证。
  • 提供自动化凭证轮换。
  • 启用细粒度的访问控制。
  • 支持凭证使用的审计日志。
  • 与云提供商的 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 网关

极狐GitLab 不支持将 Azure MinIO 网关作为 Docker Registry 的存储。

虽然 Azure 使用容器一词来表示一组 blob,但极狐GitLab 统一使用术语 bucket。

Azure Blob 存储需要使用合并对象存储设置。一个 Azure 存储账户名称和密钥必须在多个 Azure blob 容器中使用。不允许根据对象类型(例如,artifactsuploads 等)自定义单独的 connection 设置。

要启用 Azure Blob 存储,请参见rails.azurerm.yaml,作为定义 Azure connection 的示例。您可以通过以下方式将其作为密钥加载:

shell
kubectl 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 配置中设置容器名称

如果您遇到请求失败并出现 `Requests to the local network are not allowed`,请参阅[故障排除部分](#troubleshooting)。

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
bucket 名称需要在密钥中和 `global.registry.bucket` 中设置。密钥用于 registry 服务器,global 用于极狐GitLab 备份。

根据registry chart 文档中的存储创建密钥,然后配置 chart 以使用此密钥。

S3(S3 兼容存储,但不支持 Azure MinIO 网关,参见 Azure Blob Storage)、Azure 和 GCS 驱动程序的示例可以在examples/objectstorage中找到。

Registry 配置#

  1. 决定使用哪个存储服务。
  2. 将适当的文件复制到 registry-storage.yaml
  3. 使用环境的正确值进行编辑。
  4. 根据registry chart 文档中的存储创建密钥。
  5. 按照文档配置 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

下面是配置选项的示例:

shell
1--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 配置#

  1. 决定使用哪个存储服务。
  2. 将适当的文件复制到 rails.yaml
  3. 使用环境的正确值进行编辑。
  4. 根据连接详细信息文档创建密钥。
  5. 按照文档配置 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.backends3(用于 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):

shell
1--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.secretgitlab.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

有关详细信息,请参阅备份/恢复对象存储文档

要备份或恢复其他对象存储位置的文件,配置文件需要配置为作为具有足够访问权限以读/写所有极狐GitLab bucket 的用户进行身份验证。

备份存储示例#

  1. 创建 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 创建文件的示例。

      shell
      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

      toml
      1[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
  2. 创建密钥

    shell
    kubectl 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:

  1. 设置 Cloud CDN 将产物 bucket 用作后端。

  2. 创建用于签名 URL 的密钥。

  3. 给予 Cloud CDN 服务账户读取 bucket 的权限。

  4. 使用rails.googlecdn.yaml中的示例准备一个包含参数的 YAML 文件。您需要填写以下信息:

    • url:步骤 1 中 CDN 主机的基本 URL
    • key_name:步骤 2 中的密钥名称
    • key:步骤 2 中的实际密钥
  5. 将此 YAML 文件加载到 Kubernetes 密钥中,位于 cdn 键下。例如,创建一个密钥 gitlab-rails-cdn

    shell
    kubectl create secret generic gitlab-rails-cdn --from-file=cdn=rails.googlecdn.yml
  6. global.appConfig.artifacts.cdn.secret 设置为 gitlab-rails-cdn。如果您通过 helm 参数设置此项,请使用:

    shell
    --set global.appConfig.artifacts.cdn.secret=gitlab-rails-cdn