正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

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インストールのみ)

移行シークレットを収集してアップロードするには:

  1. Switchboardにサインインします。

  2. Geo migration secretsページで、インストールタイプに応じたコレクションスクリプトをダウンロードします。

  3. オプション。オフライン環境の場合は、スクリプトを実行する前にageバイナリをコレクションスクリプトに埋め込みます。詳細については、オフライン環境を参照してください。

  4. インストールタイプに応じたコレクションスクリプトを実行し、ページに表示されているキーで<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を参照してください。

  5. オプション。SSHホストキーのみを収集するには、コマンドに--hostkeys-onlyフラグを追加します。

    スクリプトは以下を生成します:

    • migration_secrets.json.age: GitLabシークレット (必須)
    • ssh_host_keys.json.age: SSHホストキー (オプションですが推奨)
  6. migration_secrets.json.ageファイルをアップロードします。

  7. オプション。ssh_host_keys.json.ageファイルをアップロードします。

  8. 検証が完了するのを待ちます。検証にはファイルごとに約10~20秒かかります。

  9. 表示されるファイル名とフィンガープリントがアップロードしたファイルと一致することを確認します。

検証により、ファイルが適切に暗号化された状態で、予期された構造になっていることが確認されます。これによりファイルのコンテンツが復号化されることも、公開されることもありません。

シークレットをアップロードした後、残りの手順を完了してテナントを作成します。

Kubernetesコレクションスクリプトフラグ

collect_secrets_k8s.pyでこれらのオプションフラグを使用してデフォルト値をオーバーライドします:

フラグデフォルト説明
--namespace NAME現在のコンテキストKubernetesネームスペース。
--release NAMEgitlabHelmリリース名プレフィックス。
--rails-secret NAMEなしRailsシークレットのシークレット名。
--registry-secret NAMEなしレジストリシークレット名。
--postgres-secret NAMEなしPostgresパスワードシークレット名。
--hostkeys-secret NAMEなしSSHホストキーのシークレット名。

オフライン環境

お使いのGitLab Self-Managedインスタンスがインターネットにアクセスできない場合、コレクションスクリプトを実行する前にageバイナリを手動でダウンロードします。

オフライン環境用にコレクションスクリプトをセットアップするには:

  1. インターネットアクセスのあるマシンでageバイナリをダウンロードします:

    python3 download_age_binaries.py

    これにより、複数のプラットフォーム用のageバイナリが含まれるage_binaries.tar.gzファイルが生成されます。

  2. age_binaries.tar.gzファイルをオフライン環境に転送します。

  3. バイナリをコレクションスクリプトに埋め込みます:

    python3 embed_age_binary.py --binaries age_binaries.tar.gz

    これにより、ageバイナリを含む自己完結型スクリプトが作成されます。

  4. migration secretsを収集してアップロードの説明に従って、お使いのGitLab Self-Managedインスタンスで埋め込みスクリプトを実行します。

埋め込みスクリプトは、含まれているageバイナリを自動的に抽出して使用します。

トラブルシューティング

Geo移行を操作する際、次の問題に遭遇する可能性があります。

エラー: コレクションスクリプトの実行中にPermission denied

コレクションスクリプトがGitLab設定ファイルにアクセスしようとすると、権限エラーが発生する可能性があります。

この問題は、スクリプトが必要なファイルを読み取りするための十分な権限なしで実行された場合に発生します。

この問題を解決するには、次の手順に従います:

  1. Linuxパッケージインストールの場合、rootユーザーとしてスクリプトを実行するか、sudoを使用します。
  2. Kubernetesインストールの場合、kubectlコンテキストがGitLabネームスペースにアクセスできることを確認します。
  3. 必要なファイルが予期されるパスに存在することを確認します。

コレクションスクリプトが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

この問題を解決するには、次の手順に従います:

  1. スクリプトが正しいマシン(Linuxパッケージインストールの場合、Railsノード)で実行されていることを確認します。
  2. GitLabが正しくインストールされ、設定されていることを確認します。
  3. GitLabが標準以外の場所にインストールされている場合、設定ファイルのパスがお使いのインストールと一致していることを確認します。
  4. 必要なファイルが見つからないか破損している場合は、移行に進む前にProfessional Servicesに連絡して、インストールのヘルスチェックを実行してもらってください。