- S3の暗号化
- Azure Blobストレージ
- Dockerレジストリイメージ
- LFS、アーティファクト、アップロード、パッケージ、外部差分、Terraformステート、依存プロキシ、セキュアファイル
- バックアップ
- Google Cloud CDN
- トラブルシューティング
GitLabチャートと外部オブジェクトストレージの設定
GitLabは、Kubernetesの高可用性永続データのためにオブジェクトストレージに依存しています。デフォルトでは、minio
というS3互換のストレージソリューションがChartと共にデプロイされます。プロダクション品質のデプロイには、Google Cloud StorageやAWS S3のようなホストされたオブジェクトストレージソリューションを使用することをお勧めします。
MinIOを無効にするには、このオプションを設定してから、以下の関連ドキュメントに従ってください:
--set global.minio.enabled=false
このドキュメントでは、AWS のアクセスキーとシークレットキーの使い方を説明しています。IAM ロールを使用することも可能です。
S3の暗号化
GitLab 13.4 で導入されました。
GitLabはAmazon KMSをサポートし、S3バケットに保存されたデータを暗号化します。これを有効にするには2つの方法があります:
- AWSでは、S3バケットでデフォルトの暗号化を使うように設定します。
- GitLabでは、サーバー側の暗号化ヘッダーを有効にします。
この二つのオプションは互いに排他的なものではありません。デフォルトの暗号化ポリシーを設定するだけでなく、サーバー側の暗号化ヘッダーを有効にしてデフォルトを上書きすることもできます。
詳細については、暗号化されたS3バケットに関するGitLabのドキュメントを参照してください。
Azure Blobストレージ
GitLab 13.4 で導入されました。
Azure Blobストレージの直接サポートは、アップロードされた添付ファイル、CIジョブのアーティファクト、LFS、および統合設定でサポートされるその他のオブジェクトタイプで利用できます。以前のバージョンのGitLabでは、Azure MinIOゲートウェイが必要でした。
Azureはコンテナという言葉でBlobの集合を表しますが、GitLabはバケットという言葉を標準としています。
Azure Blobストレージでは、統合オブジェクトストレージ設定を使用する必要があります。単一のAzureストレージアカウント名とキーを複数のAzure Blobコンテナで使用する必要があります。オブジェクトの種類(例えば、artifacts
、uploads
など)ごとにconnection
の設定を個別にカスタマイズすることは許可されていません。
Azure Blob ストレージを有効にするには、Azureconnection
を定義する例として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 コンテナを作成するか、バケット設定でコンテナ名を設定してください。
Requests to the local network are not allowed
でリクエストが失敗する場合は、トラブルシューティングのセクションを参照してください。Dockerレジストリイメージ
registry
Chartのオブジェクトストレージの設定は、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
の両方で設定する必要があります。secretはレジストリサーバで使われ、globalはGitLabのバックアップで使われます。
ストレージに関するレジストリチャートのドキュメントに従ってシークレットを作成し、このシークレットを使用するようにチャートを設定します。
S3(S3と互換性のあるストレージですが、Azure MinIOゲートウェイはサポートされていません。Azure Blob Storageを参照してください)、Azure、GCSドライバの例は、examples/objectstorage
にあります。
レジストリ設定
- 使用するストレージサービスを決定します。
-
registry-storage.yaml
に適切なファイルをコピー。 - 環境に適した値で編集してください。
- シークレットを作成するには、ストレージに関するレジストリチャートのドキュメントに従ってください。
- ドキュメントに従って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
また、以下のことにも注意してください:
- バケツ設定で、デフォルト名またはカスタム名のバケツを作成する必要があります。
- そうしないと、バックアップからのリストアが正しく機能しません。
- 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のchart/globalsドキュメントを参照してください。
接続の詳細のドキュメントに従ってシークレットを作成し、提供されたシークレットを使用するようにチャートを設定してください。すべてのシークレットに同じシークレットを使用することができます。
AWS(MinIOを使用するAzureのようなS3互換のもの)とGoogleプロバイダーの例は、examples/objectstorage
にあります。
appConfig設定
- 使用するストレージサービスを決定します。
-
rails.yaml
に適切なファイルをコピー。 - 環境に適した値で編集してください。
- シークレットを作成するには、接続の詳細ドキュメントに従ってください。
- ドキュメントに従ってChartを設定します。
バックアップ
バックアップもオブジェクトストレージに保存され、付属のMinIOサービスではなく外部を指すように設定する必要があります。バックアップ/リストア手順は、2つの別々のバケットを使用します:
- バックアップを保存するバケット (
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 を使用する場合は、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
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
詳細については、オブジェクトストレージのバックアップ/リストアのドキュメントを参照してください。
バックアップストレージの例
-
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
ロールでサービスアカウントを作成し、サービスアカウントキーを作成することでファイルを作成できます。以下は、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] # 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
-
-
シークレットの作成
kubectl create secret generic storage-config --from-file=config=storage.config
Google Cloud CDN
GitLab 15.5 で導入されました。
Google Cloud CDNを使って、アーティファクトバケットからデータをキャッシュしたりフェッチしたりすることができます。これにより、パフォーマンスを向上させ、ネットワークのイグレスコストを削減することができます。
Cloud CDN の設定は以下のキーで行います:
global.appConfig.artifacts.cdn.secret
-
global.appConfig.artifacts.cdn.key
(デフォルトはcdn
)
クラウドCDNを利用するには
- アーティファクトバケットをバックエンドとして使用するようにCloud CDNを設定します。
- 署名付きURL用のキーを作成します。
- 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
トラブルシューティング
Azure Blob:URL[FILTERED]がブロックされています:ローカルネットワークへのリクエストは許可されていません
これは、Azure Blobホスト名がRFC1918(ローカル/非公開)IPアドレスに解決された場合に発生します。回避策として、Azure Blob ホスト名 (yourinstance.blob.core.windows.net
) に対するアウトバウンドリクエストを許可します。