SSH経由でのGitのサポート
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
GitLab Shell Helmチャートは、GitLabへのGit SSHアクセス用に設定されたSSHサーバーを提供します。このコンポーネントは、ポート22でクラスターの外部に公開する必要があります。
gitlab.gitlab-shell.enabledがtrueに設定されている場合、GitLab Operatorはgitlab-shellをデプロイします。これはデフォルト設定です。
以下のいずれかの方法を使用して、SSH経由のGitを公開します。
| 方法 | Kubernetes | OpenShift | 備考 |
|---|---|---|---|
| Gateway API | サポート対象 | サポート対象 | TCPRouteを使用したKubernetes Gateway API標準に基づく推奨の最新アプローチ。Envoy Gatewayを推奨。その他のプロバイダーは要件を満たす場合に使用可能。 |
| NGINX Ingress | 非推奨 | 非推奨 | 従来のアプローチ(ポート22の公開が必要)。バンドルされているものの代わりに外部NGINXコントローラーを使用可能。 |
| OpenShift Routes | N/A | SSHサポートなし | 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が意図せず変更されることを防ぎます。