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

SSH経由でのGitのサポート

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

GitLab Shell Helmチャートは、GitLabへのGit SSHアクセス用に設定されたSSHサーバーを提供します。このコンポーネントは、ポート22でクラスターの外部に公開する必要があります。

gitlab.gitlab-shell.enabledtrueに設定されている場合、GitLab Operatorはgitlab-shellをデプロイします。これはデフォルト設定です。

以下のいずれかの方法を使用して、SSH経由のGitを公開します。

方法KubernetesOpenShift備考
Gateway APIサポート対象サポート対象TCPRouteを使用したKubernetes Gateway API標準に基づく推奨の最新アプローチ。Envoy Gatewayを推奨。その他のプロバイダーは要件を満たす場合に使用可能。
NGINX Ingress非推奨非推奨従来のアプローチ(ポート22の公開が必要)。バンドルされているものの代わりに外部NGINXコントローラーを使用可能。
OpenShift RoutesN/ASSHサポートなしRoutesはTCPトラフィック(ポート22)をサポートしていません。

Envoy GatewayによるGateway API

GitLabは、従来のIngressリソースの代わりにGateway APIを使用して公開できます。この方法は、TCPRouteリソースを通じてSSH経由のGitのTCPルーティングをネイティブにサポートするため、新規デプロイに推奨されます。

前提条件:

  • GitLab Operator 2.10以降。
  • GitLabチャート9.7以降。

Gateway APIは、KubernetesとOpenShiftの両方のクラスターで動作します。詳細な設定手順と前提条件については、Gateway APIとEnvoy Gatewayのドキュメントを参照してください。

global.gatewayApi.enabled: trueでGateway APIを有効にすると、gitlab-shellはポート22のTCPトラフィックをGitLab ShellサービスにルーティングするTCPRouteリソースを通じて自動的に公開されます。

NGINX Ingress

NGINX IngressはGitLabチャート19.0で非推奨となり、GitLab 20.0で削除される予定です。 新規デプロイにはEnvoy GatewayによるGateway APIを使用してください。

GitLab OperatorはKubernetesとOpenShiftの両方でNGINX Ingressコントローラーをサポートしています。NGINX Ingressを使用する場合、SSH経由のGitを有効にするには、NGINXサービスでポート22を公開する必要があります。

GitLabは、SSH経由のGitをサポートするように設定されたNGINXリソースをデプロイするために使用できるフォークしたNGINX-ingressチャートを管理しています。このチャートは非推奨でサポートされていませんが、既存のデプロイでは引き続き使用できます。

NGINX Ingressは、GitLab CR内のnginx-ingress.enabled={true,false}によって制御されます。falseに設定すると、外部NGINXインスタンスを使用できます。

OpenShift Routes

OpenShift Routesは、OpenShiftクラスターに組み込まれているIngressソリューションです。GitLab CRでnginx-ingress.enabled=falseを設定してNGINX Ingressを無効にすると、OpenShiftはOperatorが作成したIngressオブジェクトを同等のRouteオブジェクトに自動的に変換します。

OpenShift RoutesはTCPトラフィック(ポート22)の公開をサポートしていないため、OpenShift Routesを使用する場合はSSH経由のGitはサポートされません。OpenShiftでSSH経由のGitが必要な場合は、次のいずれかを選択してください。

  • Envoy GatewayによるGateway APIを使用する。GitLab CRでglobal.gatewayApi.enabled=trueを設定します。
  • NGINX Ingressコントローラーを使用する。nginx-ingress.enabled=true(デフォルト)を設定します。

OpenShiftのIngressオプションの詳細については、OpenShiftにおけるIngressを参照してください。

考慮事項

以下は、Ingressを使用する際の考慮事項です。

OpenShiftでサードパーティのIngressプロバイダーを使用する

OpenShiftでサードパーティのIngressコントローラーを使用する場合、OpenShiftのIngressコントローラーがサードパーティのIngressコントローラーと競合することがあります。

たとえば、NGINX Ingressコントローラーは、IngressのADDRESSにNGINXサービスの外部IPアドレスを設定しますが、その後、OpenShift Ingressコントローラーがその設定をクラスターのベースドメインでオーバーライドします。これは、特にexternal-dnsのように、IngressにIPアドレスがあることを前提に、URLを特定のNGINX ServiceにマップするAレコードを作成するサービスを使用している場合、DNS設定と競合する可能性があります。これはまさに、GitLab Operator CI環境で発生し得る事象です。

この問題を回避するために、OpenShift Ingressコントローラーにパッチを適用し、OpenShift固有のネームスペースのみを管理するようにしています。これにより、GitLab固有のネームスペースに作成するIngressが意図せず変更されることを防ぎます。