GitLab DedicatedへGeoを使用して移行
- プラン: Ultimate
- 提供形態: GitLab Dedicated
Geo移行では、移行後にGitLab Dedicatedがデータを復号化するために、GitLab Self-Managedのプライマリインスタンスからシークレットが必要です。これらのシークレットには、データベース暗号化キー、CI/CD変数、およびその他の機密性の高い設定詳細が含まれます。
SSHホストキーはオプションですが、強く推奨されます。これらを保持することで、移行後にユーザーがSSH経由でgit cloneまたはgit pullを実行した際のSSHホストキー検証の失敗を防ぐことができます。独自のドメインを使用する予定がある場合は、特に重要です。
コレクションスクリプトはファイル暗号化ツールであるageを使用して、シークレットをスイッチボードにアップロードする前に安全に暗号化します。
移行シークレットを収集およびアップロードする
GitLab Dedicatedインスタンスを作成する際に、Geo移行シークレットを収集してアップロードします。
前提条件:
- お使いのGitLab Self-Managedプライマリインスタンスへの管理者アクセス
- Python 3.x
- スイッチボードのGeo migration secretsページにある
age公開キー - お使いのGitLabクラスターにアクセスできるように設定された
kubectl(Kubernetesインストールのみ)
移行シークレットを収集してアップロードするには:
Switchboardにサインインします。
Geo migration secretsページで、インストールタイプに応じたコレクションスクリプトをダウンロードします。
オプション。オフライン環境の場合は、スクリプトを実行する前に
ageバイナリをコレクションスクリプトに埋め込みます。詳細については、オフライン環境を参照してください。インストールタイプに応じたコレクションスクリプトを実行し、ページに表示されているキーで
<age_public_key>を置き換えます:Linuxパッケージインストールの場合、Railsノードで次のコマンドを実行します:
python3 collect_secrets_linux_package.py <age_public_key>これには
/etc/gitlab/gitlab-secrets.json、/var/opt/gitlab/gitlab-rails/etc/database.yml、および/etc/ssh/への読み取りアクセスが必要です。Kubernetesインストールの場合、
kubectlアクセス権を持つワークステーションから次のコマンドを実行します:python3 collect_secrets_k8s.py <age_public_key>デフォルト値をオーバーライドするには、追加のフラグを渡すことができます。詳細については、Kubernetes collection script flagsを参照してください。
オプション。SSHホストキーのみを収集するには、コマンドに
--hostkeys-onlyフラグを追加します。スクリプトは以下を生成します:
migration_secrets.json.age: GitLabシークレット (必須)ssh_host_keys.json.age: SSHホストキー (オプションですが推奨)
migration_secrets.json.ageファイルをアップロードします。オプション。
ssh_host_keys.json.ageファイルをアップロードします。検証が完了するのを待ちます。検証にはファイルごとに約10~20秒かかります。
表示されるファイル名とフィンガープリントがアップロードしたファイルと一致することを確認します。
検証により、ファイルが適切に暗号化された状態で、予期された構造になっていることが確認されます。これによりファイルのコンテンツが復号化されることも、公開されることもありません。
シークレットをアップロードした後、残りの手順を完了してテナントを作成します。
Kubernetesコレクションスクリプトフラグ
collect_secrets_k8s.pyでこれらのオプションフラグを使用してデフォルト値をオーバーライドします:
| フラグ | デフォルト | 説明 |
|---|---|---|
--namespace NAME | 現在のコンテキスト | Kubernetesネームスペース。 |
--release NAME | gitlab | Helmリリース名プレフィックス。 |
--rails-secret NAME | なし | Railsシークレットのシークレット名。 |
--registry-secret NAME | なし | レジストリシークレット名。 |
--postgres-secret NAME | なし | Postgresパスワードシークレット名。 |
--hostkeys-secret NAME | なし | SSHホストキーのシークレット名。 |
オフライン環境
お使いのGitLab Self-Managedインスタンスがインターネットにアクセスできない場合、コレクションスクリプトを実行する前にageバイナリを手動でダウンロードします。
オフライン環境用にコレクションスクリプトをセットアップするには:
インターネットアクセスのあるマシンで
ageバイナリをダウンロードします:python3 download_age_binaries.pyこれにより、複数のプラットフォーム用の
ageバイナリが含まれるage_binaries.tar.gzファイルが生成されます。age_binaries.tar.gzファイルをオフライン環境に転送します。バイナリをコレクションスクリプトに埋め込みます:
python3 embed_age_binary.py --binaries age_binaries.tar.gzこれにより、
ageバイナリを含む自己完結型スクリプトが作成されます。migration secretsを収集してアップロードの説明に従って、お使いのGitLab Self-Managedインスタンスで埋め込みスクリプトを実行します。
埋め込みスクリプトは、含まれているageバイナリを自動的に抽出して使用します。
トラブルシューティング
Geo移行を操作する際、次の問題に遭遇する可能性があります。
エラー: コレクションスクリプトの実行中にPermission denied
コレクションスクリプトがGitLab設定ファイルにアクセスしようとすると、権限エラーが発生する可能性があります。
この問題は、スクリプトが必要なファイルを読み取りするための十分な権限なしで実行された場合に発生します。
この問題を解決するには、次の手順に従います:
- Linuxパッケージインストールの場合、
rootユーザーとしてスクリプトを実行するか、sudoを使用します。 - Kubernetesインストールの場合、
kubectlコンテキストがGitLabネームスペースにアクセスできることを確認します。 - 必要なファイルが予期されるパスに存在することを確認します。
コレクションスクリプトがGitLabインストールを見つけられない
スクリプトがGitLabインストールまたは設定ファイルを見つけられないというエラーが発生する可能性があります。
この問題は、次のシナリオで発生します:
- スクリプトがGitLabがインストールされていないマシンで実行される。
- GitLabが標準以外の場所にインストールされている。
- 必要な設定ファイルが見つからないか、移動されている。
一般的なエラーメッセージには以下が含まれます:
- Linuxパッケージ:
Error: database.yml not found: /var/opt/gitlab/gitlab-rails/etc/database.ymlの後に✗ Failed to collect GitLab secrets - Kubernetes:
Error: Could not retrieve gitlab-rails-secrets
この問題を解決するには、次の手順に従います:
- スクリプトが正しいマシン(Linuxパッケージインストールの場合、Railsノード)で実行されていることを確認します。
- GitLabが正しくインストールされ、設定されていることを確認します。
- GitLabが標準以外の場所にインストールされている場合、設定ファイルのパスがお使いのインストールと一致していることを確認します。
- 必要なファイルが見つからないか破損している場合は、移行に進む前にProfessional Servicesに連絡して、インストールのヘルスチェックを実行してもらってください。