OpenBaoチャート
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed
- ステータス: 実験的機能
OpenBaoチャートを使用してOpenBaoをインストールできます。OpenBaoは、GitLab Secrets Managerを有効にするために必要です。
既知の問題
- ダウンタイムなしでOpenBaoをアップグレードすることはできません。ゼロダウンタイムアップグレードについて、OpenBaoチャートのイシュー13で提案されています。
- GitLab Operatorを使用してOpenBaoをデプロイすることはできません。
- OpenBaoイメージのFIPSバリアントのビルド作業は進行中ですが、OpenBaoはFIPS検証済みではありません。FIPS検証についてはGitLabイシュー574875で追跡されています。
GitLab Secrets ManagerとOpenBaoをセットアップする
既存のGitLabインスタンスで、OpenBaoを有効にします:
# Enable OpenBao integration global: openbao: enabled: true # Install bundled OpenBao openbao: install: trueGitLabの上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
設定 > 一般を選択します。
可視性、プロジェクトの機能、権限を展開します。
シークレットマネージャーの切替をオンにして、Secrets Managerがプロビジョニングされるまで待ちます。
Geo設定
GitLab Geoのデプロイでは、セカンダリサイトはプライマリサイトとは異なるURLを使用してOpenBaoに到達する場合があります。GitLab OpenBaoの認証におけるJWTオーディエンスクレームは、OpenBaoでbound_audiencesに設定されているものと一致する必要があります。各サイトでOpenBaoのURLが異なる場合、jwt_audienceを共有値(通常はプライマリサイトのOpenBao URL)に設定して、JWTがどのサイトで生成されたかに関わらずOpenBaoで受け入れられるようにします。
セカンダリサイトを設定します:
global:
openbao:
enabled: true
# Site-specific URL for this Geo secondary
url: https://openbao.secondary.example.com:8200
# Shared audience - must match OpenBao bound_audiences (e.g. primary site URL)
jwt_audience: https://openbao.shared.example.com:8200OpenBao config.initialize.boundAudiencesがjwt_audienceの値を含むことを確認します。バンドルされたOpenBaoチャートを使用する場合、boundAudiencesは外部OpenBaoホスト名にデフォルトで設定されます。Geoの場合、jwt_audienceとして使用される共有URLを含めるためにこれをオーバーライドする必要がある場合があります。
フェイルオーバーシナリオで、セカンダリサイトがプライマリにプロモートされる場合、設定からjwt_audienceを省略します。プロモートされたプライマリは自身のURLを使用し、オーディエンスは当該URLにデフォルト設定されます。
OpenBaoのアップグレードをロールバックする
OpenBaoのアップグレードでは、下位互換性のないPostgreSQLデータの変更が行われる可能性があります。そのため、OpenBaoのアップグレードをロールバックする必要が生じた場合に互換性の問題を引き起こすことがあります。
OpenBaoをアップグレードする前に、必ずバックアップしてください。OpenBaoのアップグレードをロールバックする必要がある場合は、OpenBaoのバージョンに一致するデータベースバックアップも復元してください。
詳細については、OpenBaoのアップグレードドキュメントを参照してください。
OpenBaoをバックアップする
OpenBaoを完全にバックアップするには、以下が必要です:
- アンシールキー。これらのキーは、復元後にOpenBaoデータにアクセスするために不可欠です。OpenBaoシークレットのシークレットバックアップ手順に従ってください。
- PostgreSQLデータベース。
デフォルトでは、OpenBaoのPostgreSQLデータは、チャートの組み込みバックアップ手順の一部としてバックアップされます。
別のデータベース(論理または物理)を使用するようにOpenBaoを設定している場合は、そのデータベースを手動でバックアップする必要があります。デフォルトのバックアップツールは、他の外部データベースを認識しないため、標準のPostgreSQLセットアップのみを対象としています。同期の問題を回避するために、GitLabデータベースとOpenBaoデータベースは同時にバックアップする必要があります。
OpenBaoを復元する
デフォルトでは、OpenBaoのPostgreSQLデータは、チャートの組み込み復元手順の一部として復元されます。
別のデータベース(論理または物理)を使用するようにOpenBaoを設定している場合は、OpenBaoデータベースのバックアップは組み込みのバックアップユーティリティで復元できず、手動で復元する必要があります。
OpenBaoのバックアップを復元する前に、OpenBaoをスケールダウンしていることを確認してください。OpenBaoはデータベーススキーマを再作成しようとするため、予期しないエラーが発生する可能性があります。OpenBaoをスケールダウンするには、以下を実行します:
kubectl scale deploy -lapp=openbao,release=<helm release name> -n <namespace> --replicas=0OpenBaoの設定オプション
次の表は、利用可能なOpenBaoの設定オプションをすべて示しています。
インストールコマンドラインオプション
以下の表は、--setフラグを使用してhelm installコマンドに指定できるチャート設定をすべて示しています。
| パラメータ | デフォルト | 説明 |
|---|---|---|
logLevel | info | OpenBaoのログレベル。 |
logRequestLevel | off | OpenBaoのリクエストログレベル。リクエストログを有効にするには、これをlogLevelと同じ値、またはそれより高いレベルに設定します。 |
logFormat | json | OpenBaoのログ形式。jsonまたはstandardのいずれか。 |
serviceAccount.create | true | OpenBaoのサービスアカウントを作成します。 |
serviceAccount.automount | true | |
serviceAccount.annotations | {} | 追加のサービスアカウントアノテーション。 |
serviceAccount.name | 生成されたサービスアカウント名をオーバーライドします。 | |
role.create | 必要なRBAC権限を持つロールを作成します。 | |
securityContext.capabilities | { drop: ["ALL"] } | |
securityContext.runAsNonRoot | true | |
securityContext.allowPrivilegeEscalation | false | |
securityContext.runAsUser | 65532 | |
podSecurityContext.seccompProfile | RuntimeDefault | |
podSecurityContext.runAsUser | 65532 | |
podSecurityContext.fsGroup | 65532 | |
serviceActive.type | ClusterIP | アクティブなOpenBaoポッドのサービスタイプ。 |
serviceActive.annotations | {} | アクティブなOpenBaoポッドのサービスアノテーション。 |
serviceInactive.type | ClusterIP | スタンバイのOpenBaoポッドのサービスタイプ。 |
serviceInactive.annotations | {} | スタンバイのOpenBaoポッドのサービスアノテーション。 |
resources | {} | リソースの制限とリクエスト。 |
autoscaling.minReplicas | 2 | OpenBaoの最小レプリカ数。 |
autoscaling.maxReplicas | 2 | OpenBaoの最大レプリカ数。 |
autoscaling.targetCPUUtilizationPercentage | 80 | オートスケールの目標CPU使用率。 |
autoscaling.targetCPUMemoryPercentage | オートスケールの目標メモリ使用率。 | |
livenessProbe | OpenBaoのlivenessプローブ。デフォルトについては、OpenBao valuesを確認してください。 | |
readinessProbe | OpenBaoのreadinessプローブ。デフォルトについては、OpenBao valuesを確認してください。 | |
nodeSelector | {} | ノードセレクターラベル。 |
tolerations | [] | ポッドの割り当て用のtolerationラベル。 |
affinity | {} | ポッドの割り当て用のaffinityラベル。 |
config.ui | false | OpenBao UIを有効にします。 |
config.clusterPort | 8201 | OpenBaoのクラスターポート。 |
config.apiPort | 8200 | OpenBaoのAPIポート。 |
config.cacheSize | 8200 | 物理ストレージサブシステムが使用する読み取りキャッシュのサイズ(エントリ数)。 |
config.maxRequestSize | 786432 | 最大リクエストサイズ(バイト単位)。デフォルトは768 KBです。 |
config.maxRequestJsonMemory | 1048576 | JSON解析後のリクエストボディの最大サイズ(バイト単位)。デフォルトは1 MBです。 |
コンテナイメージのオプション
OpenBaoチャートは、OpenBaoをデプロイするためにクラウドネイティブGitLabコンテナイメージをデプロイします。OpenBaoのビルドには、アップストリームバージョンからの修正が含まれています。その結果、一部の機能が標準のOpenBaoリリースと異なる場合があります。
| パラメータ | デフォルト | 説明 |
|---|---|---|
image.repository | registry.gitlab.com/gitlab-org/build/cng/gitlab-openbao | OpenBaoイメージのリポジトリ。 |
image.pullPolicy | IfNotPresent | イメージのプルポリシー。 |
image.tag | これをオーバーライドして、カスタムのOpenBaoバージョンをデプロイします。 | |
imagePullSecrets | [] | プライベートリポジトリからイメージをプルするためのシークレット。 |
IngressおよびTLSの設定オプション
OpenBaoチャートは、デフォルトでIngress終端のTLS暗号化を使用します。
| パラメータ | デフォルト | 説明 |
|---|---|---|
global.openbao.host | openbao.<GitLab Domain> | OpenBaoホスト。GitLab webserviceとOpenBaoチャートの設定に使用されます。 |
global.openbao.url | ホストから派生 | GitLab用OpenBao URL。存在する場合は、完全なURIである必要があります。 |
global.openbao.jwt_audience | urlと同じ | OpenBao認証用のJWTオーディエンスクレーム。サイトが異なるURLを使用する場合、Geoデプロイのために設定します。OpenBao bound_audiencesと一致する必要があります。 |
global.openbao.psql | {} | OpenBaoデータベース設定 (ホスト、データベース、ユーザー名、パスワード)。 |
ingress.enabled | true | RunnerがOpenBaoに到達できるように、OpenBao Ingressを有効にします。 |
ingress.hostname | グローバルホスト設定に基づく外部OpenBaoホスト。 | Ingressでマッチさせるホスト名。 |
ingress.tls.enabled | true | Ingress TLSを有効にします。 |
ingress.tls.secretName | Kubernetes TLSシークレットの名前。デフォルトではcertmanagerによって管理されます。 | |
ingress.annotations | true | Ingressにレンダリングされるアノテーション。NGINX以外のIngressコントローラー用にOpenBaoを設定する場合に使用します。 |
ingress.configureCertmanager | グローバルcertmanager設定 | certmanagerを使用してTLS証明書を管理します。 |
ingress.certmanagerIssuer | <release>-issuer | certmanager発行者の名前。 |
ingress.sslPassthroughNginx | false | 受信TLS接続をOpenBaoにパススルーするように、Ingressにアノテーションを付与します。certmanagerが設定されている場合、新しいHTTP01チャレンジは別のIngress経由で行われます。 |
config.tlsDisable | true | 内部TLSを無効にします。無効にすると、Ingress TLSパススルーも無効になります。 |
config.metricsListener.tlsDisable | true | メトリクスリスナーの内部TLSを無効にします。 |
OpenBaoは、エンドツーエンドでTLS暗号化した状態で運用する必要があります。エンドツーエンドTLSを有効にするには、OpenBaoがTLS接続を受け付けるように設定し、NGINX Ingressを介してTLS接続をパススルーさせます:
global:
ingress:
useNewIngressForCerts: true
config:
tlsDisable: false
ingress:
sslPassthroughNginx: trueゲートウェイAPI
OpenBaoチャートでは、HTTPRouteを介してトラフィックを公開できます。ゲートウェイAPIがグローバルに有効になっている場合、管理対象のGatewayリソース内にOpenBao用のリスナーが作成されます。
| パラメータ | デフォルト | 説明 |
|---|---|---|
gatewayRoute.enabled | デフォルトはglobal.gatewayApi.enabledの値です。 | HTTPRouteを介してOpenBaoを公開できるようにします。 |
gatewayRoute.sectionName | openbao-web | HTTPRouteが使用するゲートウェイセクション。 |
gatewayRoute.gatewayName | GitLabチャートが管理するゲートウェイ | HTTPRouteが使用するゲートウェイ名。 |
gatewayRoute.annotations | {} | HTTPRouteの追加のアノテーション。 |
gatewayRoute.timeouts | {} | HTTPRouteのカスタムタイムアウト設定。 |
モニタリングの設定オプション
OpenBaoは、Prometheusメトリクスを公開するように事前設定されています。これらのメトリクスは、バンドルされているPrometheusサブチャートによってスクレイプされます。
| パラメータ | デフォルト | 説明 |
|---|---|---|
config.telemetry.enabled | true | テレメトリとモニタリングを有効にします。 |
config.telemetry.disableHostname | true | ゲージ値のプレフィックスとしてローカルホスト名を付与します。 |
config.telemetry.prometheusRetentionTime | 24h | メトリクスの保持期間。 |
config.telemetry.metricsPrefix | openbao | すべてのメトリクスのプレフィックス。 |
config.telemetry.usageGaugePeriod | 0 | トークン数、エンティティ数、シークレット数など、高カーディナリティの使用状況データを収集する間隔。 |
config.telemetry.numLeaseMetricsBuckets | 1 | リースの期限切れバケット数。 |
config.metricsListener.enabled | true | メトリクスのリクエストを処理するために2番目のAPIポートを有効にします。このリスナーはすべてのAPIリクエストを処理できますが、メトリクスのリクエストは認証なしで処理します。 |
config.metricsListener.tlsDisable | true | メトリクスリスナーの内部TLSを無効にします。 |
config.metricsListener.port | 8209 | メトリクスリスナーのポート。 |
config.metricsListener.unauthenticatedMetricsAccess | true | メトリクスのリクエストを認証なしで処理できるようにします。 |
podMonitor.enabled | false | Prometheus Operator用のPodMonitorリソースを有効にします。クラスターにPrometheus Operatorがインストールされている必要があります。 |
podMonitor.additionalLabels | {} | PodMonitorリソースに追加するラベル。 |
podMonitor.selectorLabels | {} | スクレイプ対象のポッドを絞り込むための追加のセレクターラベル。 |
podMonitor.endpointConfig | {} | 追加のエンドポイント設定(例: interval、scrapeTimeout)。 |
アンシールおよび初期化オプション
OpenBaoチャートは、相互に排他的な2つの自動アンシール方式をサポートしています:
- 静的自動アンシール (デフォルト)
- AWS KMSアンシール
また、OpenBaoの宣言的な自己初期化も使用します。
| パラメータ | デフォルト | 説明 |
|---|---|---|
config.unseal.static.enabled | true | 静的自動アンシールを有効にします。 |
config.unseal.static.currentKeyId | static-unseal-0 | 現在の静的アンシールキーのID。 |
config.unseal.static.currentKey | /srv/openbao/keys/static-unseal-0 | 現在の静的アンシールキーのパス。 |
config.unseal.static.previousKeyId | 以前の静的アンシールキーのID。 | |
config.unseal.static.previousKey | /srv/openbao/keys/static-unseal-1 | 以前の静的アンシールキーのパス。以前のキーIDも設定されている場合にのみレンダリングされます。 |
config.unseal.awskms.enabled | false | AWS KMS自動アンシールを有効にします。 |
config.unseal.awskms.kmsKeyId | KMSキーID、ARN、またはエイリアス(例:alias/my-openbao-key)。config.unseal.awskms.enabledがtrueの場合に必須です。 | |
config.unseal.awskms.region | KMSキーが存在するAWSリージョン。 | |
config.unseal.awskms.endpoint | オプションのカスタムKMSエンドポイントURL(例: VPCエンドポイント)。 | |
config.initialize.enabled | true | OpenBaoの自己初期化を有効にします。 |
config.initialize.oidcDiscoveryUrl | 外部GitLabホスト | OIDCディスカバリURL。デフォルトは外部GitLabホスト名です。 |
config.initialize.boundIssuer | 外部GitLabホスト | 発行者URL。デフォルトは外部GitLabホスト名です。 |
config.initialize.boundAudiences | 外部OpenBaoホスト | OIDCロールのオーディエンス。デフォルトは外部OpenBaoホスト名です。 |
staticUnsealSecret.generate | false | OpenBaoを自動アンシールするための静的キーを生成します。GitLabチャートのshared-secretチャートによって管理されるため、デフォルトはfalseです。 |
initializeTpl | OpenBaoを自己初期化するために渡されるテンプレート。デフォルトについては、OpenBao valuesを確認してください。 |
AWS KMSアンシール
AWS KMSアンシールは、アンシールキーをAWS KMSキーに委任し、静的キーシークレットを管理する必要をなくします。
AWS (EKS、EC2)で実行する場合、明示的なAWS認証情報が不要となるように、IRSAまたはインスタンスプロファイルを使用します。OpenBaoサービスアカウントにIAMロールのARNをアノテーション付けします:
openbao:
serviceAccount:
annotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::<account-id>:role/<role-name>"
config:
unseal:
static:
enabled: false
awskms:
enabled: true
kmsKeyId: "alias/my-openbao-key"
region: "us-east-1"IAMロールには、KMSキーに対するkms:Encrypt、kms:Decrypt、およびkms:DescribeKeyのパーミッションが必要です。
監査イベントストリーミングオプション
OpenBaoチャートは、イベントをGitLabにストリーミングするための監査デバイスを設定します。
| パラメータ | デフォルト | 説明 |
|---|---|---|
global.openbao.httpAudit.secret | <release>-openbao-audit-secret | OpenBaoとGitLab間で共有するトークンを保存するシークレットの名前。 |
global.openbao.httpAudit.key | token | 共有トークンを保存するシークレットキー。 |
config.audit.http.enabled | true | HTTPを使用して監査イベントをGitLabにストリーミングする機能を有効にします。 |
config.audit.http.streamingUri | 内部workhorseのURL | 監査イベントのストリーミング先のエンドポイント。 |
config.audit.http.authTokenPath | /srv/openbao/audit/gitlab-auth | GitLabと共有するトークンがマウントされるパス。 |
httpAuditSecret.generate | false | 認証付き監査のためにGitLabと共有するシークレットを生成します。GitLabチャートのshared-secretチャートによって管理されるため、デフォルトはfalseです。 |
initializeTpl | OpenBao監査を設定するために渡されるテンプレート。デフォルトについては、OpenBao valuesを確認してください。 |
データベース設定
OpenBaoは、Railsバックエンドからのデータ分離のために、separate logical database (openbaoをデフォルト) を使用します。
ホスト、データベース、ユーザー名、パスワードでglobal.openbao.psqlまたはopenbao.config.storage.postgresql.connectionを設定します。データベースは手動で作成する必要があります。パスワードが必要です。メインのGitLabデータベースからは継承されません。
外部データベースを設定するには:
データベースサーバーでPostgreSQLユーザーとデータベースを作成します:
-- Create the OpenBao user CREATE USER openbao WITH PASSWORD '<password>'; -- Create the OpenBao database CREATE DATABASE openbao OWNER openbao;パスワードを含むKubernetesシークレットを作成します:
kubectl create secret -n bao generic openbao-db-password --from-literal=password="<password>"外部データベースに接続するようにOpenBaoを設定します:
global: openbao: psql: host: "psql.openbao.example.com" port: 5432 database: openbao username: openbao password: secret: openbao-db-password key: passwordこれは
global.openbao.psqlを使用します。これは、Toolboxからバックアップおよび復元する操作のためにアクセスできるため、推奨される場所です。高度な接続オプション(sslMode、connectTimeout、またはキープアライブチューニングなど)を設定するには、グローバル設定とともにopenbao.config.storage.postgresql.connectionを使用します。OpenBaoをデプロイまたはアップグレードします。起動すると、OpenBaoは指定されたデータベース内にデータベーススキーマを自動的に作成します。