NGINXの使用

Ingressコントローラとして使用するNGINXの完全なデプロイを提供します。互換性を確保するため、すべてのKubernetesプロバイダがNGINXIngressをネイティブサポートしているわけではありません。

note
NGINXチャートの私たちのフォークは GitHubから引き出されました。私たちのフォークで修正された内容の詳細については、私たちのNGINXフォークを参照してください。
note
GitLab HelmチャートにバンドルされているNGINX Ingress Helmチャートのバージョンは、Kubernetes 1.22をサポートするように更新されました。その結果、GitLab Helm チャートは 1.19 より前の Kubernetes バージョンをサポートできなくなりました。

NGINXの設定

設定の詳細については、NGINXチャートのドキュメントを参照してください。

グローバル設定

私たちのChartには共通のグローバル設定があります。GitLabやレジストリのホスト名など、共通の設定オプションについてはGlobals Documentationをご覧ください。

グローバル設定を使ったホストの設定

GitLab サーバーとレジストリ・サーバーのホスト名は、Global settingschart を使って設定することができます。

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 コントローラを有効にし、デフォルトと追加のウェブサービスの Ingress を設定して、関連する IngressClass (useGeoClass=true) を使用することで回避できます。

注釈値の単語ブロックリスト

GitLab Helm chart 6.6 で導入されました。

クラスター・オペレーションが生成されたNGINX設定をより詳細に制御する必要がある場合、NGINX Ingressでは、標準のアノテーションやConfigMapエントリではアドレスされない生のNGINX設定の「スニペット」を挿入する設定スニペットを使用できます。

このようなコンフィギュレーション・スニペットの欠点は、クラスター・オペレーターがLUAスクリプトや同様のコンフィギュレーションを含むIngressオブジェクトをデプロイできるようになり、GitLabインストールやクラスター自体のセキュリティを損なう可能性があることです。

詳細については、CVE-2021-25742およびこのアップストリームingress-nginx イシュー を参照してください。

GitLabのHelmチャートデプロイでCVE-2021-25742を緩和するために、 nginx-ingress コミュニティから提案された設定を使用して、[annotation-value-word-blocklistを](https://gitlab.com/gitlab-org/charts/gitlab/-/blob/v6.6.0/values.yaml#L836)設定します。

GitLab Ingressの設定でコンフィギュレーションスニペットを使用している場合、またはコンフィギュレーションスニペットを使用しているサードパーティのIngressオブジェクトでGitLab NGINX Ingress Controllerを使用している場合、GitLabサードパーティのドメインにアクセスしようとすると404nginx-controller のログで “invalid word” エラーが発生することがあります。その場合は、nginx-ingress.controller.config.annotation-value-word-blocklist の設定をレビューして調整してください。

nginx-controller ログの“Invalid Word” エラーや、Chart トラブルシューティングの404 エラーもご覧ください。