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

LinuxパッケージデプロイのGitLab向けOpenBaoをインストールする

  • プラン: Premium、Ultimate
  • 提供形態: GitLab Self-Managed
  • ステータス: ベータ版

LinuxパッケージでインストールされたGitLabインスタンスと連携してOpenBaoをKubernetesクラスターで使用します。OpenBaoはクラスターで動作し、PostgreSQLデータベースに接続します。GitLab RailsとSidekiqはHTTPS経由でOpenBaoに接続します。

OpenBaoを次の2つの方法のいずれかで実行します:

  • Colocated cluster: ローカルのKubernetesディストリビューション(k3sなど)は、Linuxパッケージインスタンスと同じホストで実行されます。LinuxパッケージにバンドルされたNGINXは、OpenBaoの外部URLのTLS終端リバースプロキシとして機能します。GitLabアプリケーションは、Kubernetesが共有ネットワーク上で公開するエンドポイントを介してOpenBaoに接続します。
  • External Kubernetes cluster: OpenBaoは別のKubernetesクラスターで実行されます。クラスターのIngressとTLS終端を設計します。GitLab RailsとSidekiqは、公開するOpenBao URLに接続します。マルチノードのLinuxパッケージデプロイを使用している場合や、クラウドプロバイダーのマネージドKubernetesサービスの使用を希望する場合は、このアプローチを検討してください。

Linuxパッケージ管理のPostgreSQLクラスターは、OpenBaoデータベースのバックエンドとしてサポートされていません。GitLabにそのようなクラスターを使用する場合は、OpenBao用に個別のPostgreSQLインスタンスをプロビジョニングしてください。これはセルフマネージドまたはマネージドクラウドデータベースサービスとして提供されます。詳細については、イシュー7292を参照してください。

前提条件

  • LinuxパッケージでインストールされたGitLab 19.0以降、および管理者アクセス。
  • 同じホストにインストールされたローカルのKubernetesディストリビューション。
  • ホストでhelmkubectlが利用可能です。
  • OpenBaoドメインをホストのパブリックIPアドレスにポイントするDNSレコード。
  • LinuxパッケージでインストールされたGitLabインスタンス、および管理者アクセス。
  • Linuxパッケージインスタンスノードからアクセス可能な外部Kubernetesクラスター。
  • helmkubectlがクラスターにアクセスするように設定されています。
  • OpenBaoドメインをクラスターIngress IPアドレスにポイントするDNSレコード。

要件

OpenBaoをインストールする前に、お使いのKubernetesディストリビューションが以下の要件を満たしていることを確認してください:

  • OpenBaoサイジング推奨事項は、Linuxパッケージインスタンスの要件とKubernetesクラスターの要件に加えて満たされる必要があります。
  • コロケートされたKubernetesのいかなるものも、GitLabによってすでに使用されているポートにアタッチしようとしないでください。多くの小規模なKubernetesディストリビューションは、デフォルトでポート80と443にバインドするロードバランサーをインストールします。Linuxパッケージ管理のNGINXはすでにそれらのポートでリッスンしているため、そのようなコンポーネントを無効にします。
  • コロケートされたKubernetesは、Linuxパッケージインスタンスとネットワークを共有する必要があります。これにより、Linuxパッケージ管理のNGINXが外部OpenBaoトラフィックをOpenBaoサービスにルーティングし、そこからのリクエストをリッスンできるようになります。Linuxパッケージインスタンスは、サービスがKubernetes LoadBalancerまたはNodePortを介して公開されているかどうかを気にしません。両方が共有ネットワーク内で到達可能である限り問題ありません。

OpenBaoをインストールする前に、セットアップが以下の要件を満たしていることを確認してください:

  • OpenBaoサイジング推奨事項は、お使いのKubernetesクラスターによって満たされる必要があります。
  • クラスター内のOpenBaoポッドとLinuxパッケージインスタンスノードとの間にネットワーク接続が存在する必要があります。この接続を確立する方法は、インフラストラクチャによって異なります。例えば、VPCピアリング、共有VPC、またはファイアウォールルールを使用する場合があります。GitLab RailsとSidekiqは、クラスターから公開するOpenBao URLに到達できる必要があります。
  • Linuxパッケージ管理のPostgreSQLをOpenBaoデータベースとして使用する場合、PostgreSQLノードはクラスターポッドCIDRからのTCP接続を受け入れる必要があります。このトラフィックをデータベースポートで許可するようにファイアウォールまたはセキュリティグループルールを設定します。

はじめる前

はじめる前:

  1. Kubernetes CNI(ポッドネットワーク)のCIDRを収集します。PostgreSQLの認証を設定するために後で必要になります。
  2. LinuxパッケージインスタンスとKubernetes間で共有されるネットワークインターフェースのIPアドレス(<SHARED_NETWORK_IP>)を収集します。いくつかの設定値のために後で必要になります。
  3. OpenBaoのインストールを試みる前に、お使いのKubernetesディストリビューションが完全に稼働していることを確認してください。
  4. kubectlコンテキストがこのクラスターに設定されていること(KUBECONFIGが正しく設定されていること)を確認します。

はじめる前:

  1. KubernetesポッドネットワークのCIDRを収集します。PostgreSQLの認証を設定するために後で必要になります。
  2. OpenBaoが使用するPostgreSQLインスタンスのアドレス(<POSTGRES_ADDRESS>)を収集します。これは、LinuxパッケージPostgreSQLノードのIPアドレス、または外部またはマネージドPostgreSQLインスタンスのエンドポイントのいずれかです。
  3. OpenBaoのインストールを試みる前に、お使いのKubernetesクラスターが完全に稼働していることを確認してください。
  4. kubectlコンテキストがこのクラスターに設定されていること(KUBECONFIGが正しく設定されていること)を確認します。

OpenBao PostgreSQLデータベースをプロビジョニングする

gitlab-psqlは、Linuxパッケージ管理のPostgreSQLを使用している場合にのみ利用可能です。代わりに外部またはマネージドPostgreSQLインスタンスを使用する場合は、そのインスタンスで同等のSQLコマンドを実行します。ユーザーとデータベースの作成ロジックは同じです。

gitlab-psqlはUnixソケット経由で接続し、TCPリスナーを必要としないため、gitlab-ctl reconfigureを実行する前にこれらのコマンドを実行できます。

OpenBao PostgreSQLデータベースをプロビジョニングするには:

  1. OpenBaoデータベースユーザーに強力なパスワードを選択してください。このセクションの最後のステップで、Kubernetesシークレットにこの同じパスワードを使用します。

  2. OpenBaoデータベースユーザーを作成します:

    sudo gitlab-psql \
      -c "CREATE USER openbao WITH PASSWORD '<strong-password>';"
  3. OpenBaoデータベースを作成します:

    sudo gitlab-psql \
      -c "CREATE DATABASE openbao OWNER openbao;"
  4. Kubernetesネームスペースと、データベースパスワードをHelmチャートに渡すシークレットを作成します:

    kubectl create namespace openbao
    
    kubectl create secret generic openbao-db-secret \
      --namespace openbao \
      --from-literal=password='<strong-password>'

Helmを使用してOpenBaoをインストールする

Helmを使用してOpenBaoをインストールするには:

  1. GitLab Helmリポジトリを追加します。

    helm repo add gitlab https://charts.gitlab.io
    helm repo update
  2. プレースホルダーの値を実際のドメインとIPアドレスに置き換えて、以下の内容でopenbao-values.yamlファイルを作成します:

    config:
      ui: false
      storage:
        postgresql:
          haEnabled: true
          connection:
            host: "<SHARED_NETWORK_IP>"
            port: 5432
            database: openbao
            username: openbao
            sslMode: "disable"
            password:
              secret: openbao-db-secret
              key: password
      initialize:
        enabled: true
        oidcDiscoveryUrl: "https://<GITLAB_DOMAIN>"
        boundIssuer: "https://<GITLAB_DOMAIN>"
        boundAudiences: '"https://<OPENBAO_DOMAIN>"'
    
    gatewayRoute:
      enabled: false
  3. OpenBaoをインストールします:

    helm upgrade --install openbao gitlab/openbao \
      --namespace openbao \
      --values openbao-values.yaml

    ポッドがPostgreSQLに接続できないため、--waitを使用しないでください。PostgreSQLは、gitlab-ctl reconfigureの後にポッドネットワークからのTCP接続のみを受け入れます。現時点では、ポッドはCrashLoopBackOff状態です。

    利用可能なすべてのチャートオプションについては、OpenBao Helmチャートドキュメントを参照してください。

  4. OpenBaoサービスに使用する内部URLを定義します。複数のオプションがあります:

    • ロードバランサー。コロケートされたKubernetesクラスターで内部ロードバランサーを使用している場合、gitlab.rbファイルのoak['components']['openbao']['internal_url']設定をロードバランサーの内部URLに設定して、リクエストをOpenBao Kubernetesサービスにルーティングできます。この場合、内部URLが内部ロードバランサーIPに解決されるようにDNSを設定する必要があります。
    • クラスターnodePort。OpenBaoチャートサービスをKubernetesサービスタイプnodePortで実行するようにカスタマイズした場合、内部URLもそれに設定できます。
    • サービスclusterIP。このオプションは最もシンプルである可能性が高いです。コロケートされたクラスターのロードバランサーを完全にスキップするには、OpenBao内部URLがOpenBaoサービスclusterIPに直接通信するように指示することもできます。Linuxパッケージ管理のNGINXがすでに存在するため、このオプションを使用すると、マシンに追加のロードバランサーをインストールする必要がなくなります。

    OpenBaoサービスのclusterIPは、以下を実行することで見つけることができます:

    kubectl -n openbao get svc openbao-active \
      -o jsonpath='{.spec.clusterIP}'

    内部URLのIPは、Kubernetesクラスター外部のホストマシンからアクセス可能である必要があることを覚えておいてください。選択した<SHARED_NETWORK_IP>からIPを割り当てるようにクラスターを設定します。

Helmを使用してOpenBaoをインストールするには:

  1. GitLab Helmリポジトリを追加します。

    helm repo add gitlab https://charts.gitlab.io
    helm repo update
  2. プレースホルダーの値を実際のドメインとPostgreSQLアドレスに置き換えて、以下の内容でopenbao-values.yamlファイルを作成します:

    config:
      ui: false
      storage:
        postgresql:
          haEnabled: true
          connection:
            host: "<POSTGRES_ADDRESS>"
            port: 5432
            database: openbao
            username: openbao
            password:
              secret: openbao-db-secret
              key: password
      initialize:
        enabled: true
        oidcDiscoveryUrl: "https://<GITLAB_DOMAIN>"
        boundIssuer: "https://<GITLAB_DOMAIN>"
        boundAudiences: '"https://<OPENBAO_DOMAIN>"'
    
    # The chart deploys a Kubernetes Ingress resource by default, which you need to provide the hostname to be reachable for GitLab Rails and Sidekiq
    # Alternatively, you could configure it to deploy an HTTPRoute resource, if you prefer to deploy a Gateway API controller.
    #
    # For available network ingress and TLS configuration options, see:
    # https://docs.gitlab.com/charts/charts/openbao/#ingress-and-tls-configuration-options
    ingress:
      enabled: true
      hostname: "<OPENBAO_DOMAIN>"
  3. OpenBaoをインストールします:

    helm upgrade --install openbao gitlab/openbao \
      --namespace openbao \
      --values openbao-values.yaml

利用可能なすべてのチャートオプションについては、OpenBao Helmチャートドキュメントを参照してください。

GitLabを設定する

GitLabホストの/etc/gitlab/gitlab.rbに以下を追加し、プレースホルダーの値を実際のIPアドレスとドメインに置き換えます:

# PostgreSQL: accept TCP connections from Kubernetes pods.
# Use the shared network IP to restrict exposure to the shared network.
# Using '0.0.0.0' makes PostgreSQL listen on all interfaces, including public ones.
postgresql['listen_address'] = '<SHARED_NETWORK_IP>'

# Local connections (GitLab Rails and other services) continue without a password.
postgresql['trust_auth_cidr_addresses'] = %w[127.0.0.1/32 ::1/128]

# Kubernetes pods authenticate with a password.
# Replace 10.42.0.0/16 with the CIDR of your Kubernetes CNI (pod network).
postgresql['md5_auth_cidr_addresses'] = %w[10.42.0.0/16]

# OAK: OpenBao reverse proxy via GitLab NGINX.
oak['enable'] = true
oak['network_address'] = '<SHARED_NETWORK_IP>'

oak['components']['openbao']['enable'] = true

# Replace 'https://openbao.example.com' with the URL of the DNS record
# you configured for OpenBao, which resolves to your host's public IP address.
oak['components']['openbao']['external_url'] = 'https://openbao.example.com'

# Example of service clusterIP. Replace <CLUSTER_IP> with the IP taken
# from the previous step.
#
# A nodePort would look similar: specify the cluster node IP with the port
# you chose when you deployed OpenBao.
#
# If behind a load balancer: 'http://openbao-internal.example.com'
oak['components']['openbao']['internal_url'] = 'http://<CLUSTER_IP>:8200'

# The URL that the GitLab application uses to connect to OpenBao.
gitlab_rails['openbao'] = {
  'url' => 'https://openbao.example.com'
}

この設定では、次のようになります。

  • postgresql['listen_address']は共有ネットワークIPです。trust_auth_cidr_addressesまたはmd5_auth_cidr_addressesにリストされていないCIDRからの接続はPostgreSQLによって拒否されます。
  • postgresql['trust_auth_cidr_addresses']はCIDRブロックのリスト(localhostのみ)です。これらのブロックからの接続にはパスワードは必要ありません。これらのアドレスはGitLabサービスによって使用されます。
  • postgresql['md5_auth_cidr_addresses']はポッドCIDRからのCIDRブロックのリストです。これらのブロックからの接続にはパスワードが必要です。これらのアドレスはOpenBaoポッドによって使用されます。パスワード認証。OpenBaoポッドによって使用されます。
  • oak['network_address']は共有ネットワークIPです。NGINXのリッスンディレクティブによって使用されます。
  • oak['components']['openbao']['internal_url']は、GitLabアプリケーションがOpenBaoと通信するために使用するURLです。
  • gitlab_rails['openbao']['url']は、GitLabアプリケーションが使用するOpenBao URLです。

GitLabのexternal_url設定がhttps://を使用している場合、Let’s Encryptはすでに有効になっています。OpenBaoのexternal_urlスキームをhttps://に設定するだけで十分です。GitLabは、既存のLet’s Encrypt証明書にOpenBaoドメインをSubject Alternative Name (SAN) として自動的に追加します。

代わりにカスタム証明書を使用するには、以下を追加します:

oak['components']['openbao']['ssl_certificate']     = '/etc/gitlab/ssl/openbao.example.com.crt'
oak['components']['openbao']['ssl_certificate_key'] = '/etc/gitlab/ssl/openbao.example.com.key'

各GitLabアプリケーションノードの/etc/gitlab/gitlab.rbに以下を追加し、プレースホルダーの値を実際のIPアドレスとドメインに置き換えます:

# The URL GitLab Rails uses to connect to OpenBao.
gitlab_rails['openbao'] = {
  'url' => 'https://openbao.example.com'
}

別のSidekiqノードがある場合は、各Sidekiqノードの/etc/gitlab/gitlab.rbに同じgitlab_rails['openbao']設定を追加します。プロビジョニングするシークレットを持つSidekiqワーカーもOpenBaoへのアクセスが必要です。

Linuxパッケージ管理のPostgreSQLをOpenBaoデータベースとして使用する場合は、PostgreSQLノードの/etc/gitlab/gitlab.rbにも以下を追加します:

# PostgreSQL: accept TCP connections from Kubernetes pods.
postgresql['listen_address'] = '<POSTGRES_ADDRESS>'

# Local connections (GitLab Rails and other services) continue without a password.
postgresql['trust_auth_cidr_addresses'] = %w[127.0.0.1/32 ::1/128]

# Kubernetes pods authenticate with a password.
# Replace 10.0.0.0/14 with the CIDR of your Kubernetes pod network.
postgresql['md5_auth_cidr_addresses'] = %w[10.0.0.0/14]

設定の変更を適用する

設定の変更を適用します:

sudo gitlab-ctl reconfigure

このコマンドは、すべての設定を一度に適用します:

  • PostgreSQLはKubernetesポッドからのTCP接続を受け入れ始めます。
  • NGINXは、TLS終端とHTTPからHTTPSへのリダイレクトを含むOpenBao仮想ホストで設定されます。
  • 該当する場合、Let’s Encrypt証明書が発行または更新されます。

gitlab.rbを更新した各ノードで設定の変更を適用します:

sudo gitlab-ctl reconfigure

PostgreSQLノードでは、これによりPostgreSQLがクラスターポッドネットワークからのTCP接続を受け入れるようになります。RailsおよびSidekiqノードでは、これはOpenBao URLの設定を適用します。

OpenBaoが準備完了になるまで待機する

ロールアウトが完了するまで待機します:

kubectl -n openbao rollout status deployment openbao

コロケートされたクラスターの場合、以前CrashLoopBackOff状態にあったポッドは、gitlab-ctl reconfigureの完了後に正常になります。

インストールを検証する

インストールを検証するには:

  1. OpenBaoに到達可能であることを確認します:

    curl "https://openbao.example.com/v1/sys/health"

    成功した応答は次のようになります:

    {
      "initialized": true,
      "sealed": false,
      "standby": false,
      "version": "2.0.0"
    }
  2. GitLab Secrets Managerを有効にします。