NGINXの使用
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
Ingressコントローラーとして使用される完全なNGINXデプロイを提供します。すべてのKubernetesプロバイダーがNGINX Ingressをネイティブにサポートしているわけではありません。互換性を確保してください。
- GitLab NGINXチャートは、アップストリームのNGINX Helmチャートのフォークです。私たちのフォークで何が変更されたかについて詳しくは、NGINXフォークへの調整を参照してください。
- 可能な
global.hosts.domain値は1つだけです。複数のドメインのサポートは、イシュー3147で追跡されています。
NGINXの設定
設定の詳細については、NGINXチャートドキュメントを参照してください。
グローバル設定
いくつかの一般的なグローバル設定をチャート間で共有します。GitLabやレジストリのホスト名など、一般的な設定オプションについては、グローバルドキュメントを参照してください。
グローバル設定を使用したホストの設定
GitLabサーバーとレジストリサーバーのホスト名は、当社のグローバル設定チャートを使用して構成できます。
GitLab Geo
2番目のNGINXサブチャートは、GitLab Geoトラフィック用にバンドルされ、事前設定されており、デフォルトのコントローラーと同じ設定をサポートします。このコントローラーは、nginx-ingress-geo.enabled=trueで有効にできます。
このコントローラーは、受信X-Forwarded-*ヘッダーを変更しないように設定されています。Geoトラフィックに別のプロバイダーを使用する場合は、必ず同じようにしてください。
デフォルトのコントローラー値(nginx-ingress-geo.controller.ingressClassResource.controllerValue)はk8s.io/nginx-ingress-geoに、IngressClass名は{ReleaseName}-nginx-geoに設定され、デフォルトのコントローラーとの干渉を回避します。IngressClass名は、global.geo.ingressClassでオーバーライドできます。
カスタムヘッダーの処理は、プライマリGeoサイトがセカンダリサイトから転送されたトラフィックを処理するためにのみ必要です。サイトがプライマリにプロモートされようとしている場合、セカンダリでのみ使用する必要があります。
フェイルオーバー中にIngressClassを変更すると、別のコントローラーが受信トラフィックを処理することに注意してください。別のコントローラーには異なるロードバランサーIPが割り当てられているため、DNSの設定に追加の変更が必要になる場合があります。
これは、すべてのGeoサイトでGeo Ingressコントローラーを有効にし、関連付けられたIngressClass(useGeoClass=true)を使用するようにデフォルトおよび追加のWebサービスのIngressを設定することで回避できます。
注釈値のワードブロックリスト
クラスターオペレーターが生成されたNGINX設定をより詳細に制御する必要がある状況では、NGINX Ingressは、標準の注釈とConfigMapエントリで対応されていないraw NGINX設定の「スニペット」を挿入する構成スニペットを許可します。
これらの設定スニペットの欠点は、クラスターオペレーターが、GitLabインストールのセキュリティとクラスター自体を損なう可能性のあるLUAスクリプトや同様の設定を含むIngressオブジェクトをデプロイできることです。これには、サービスアカウントトークンとシークレットの公開が含まれます。
詳細については、CVE-2021-25742およびこのアップストリームingress-nginxイシューを参照してください。
GitLabのHelmチャートデプロイにおけるCVE-2021-25742を軽減するために、nginx-ingressコミュニティによる推奨設定を使用して、annotation-value-word-blocklistを設定しています。
GitLab Ingress設定で設定スニペットを使用している場合、またはサードパーティのIngressオブジェクトでGitLab NGINX Ingressコントローラーを使用している場合は、GitLabサードパーティドメインにアクセスしようとすると404エラーが発生し、nginx-controllerログに「無効な単語」エラーが発生する可能性があります。その場合は、nginx-ingress.controller.config.annotation-value-word-blocklist設定を確認して調整してください。
nginx-controllerログの「Invalid Word」エラーとチャートのトラブルシューティングドキュメントの404エラーも参照してください。
NGINXフォークへの調整
次の調整がNGINXフォークに加えられました:
- SSH用のGitLab Shellを公開するために、外部TCP ConfigMapをサポートします。
- HPAやPDB値など、グローバルチャート設定をサポートするためのさまざまな変更。
- アップグレード時に中断しないように、新しいセレクターラベルを使用しないでください。
- 統合されたURLを持つGitLab Geoセットアップに必要な、いくつかの設定をテンプレート化するためのさまざまな変更。
フォークに適用されたすべてのパッチについて、ソースディレクトリを確認してください。