SSH経由でのGitのサポート
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
このドキュメントでは、さまざまな環境/プラットフォームにおけるSSH経由のGitの設定ガイドラインを提供します。
概要
GitLab Shell Helmチャートは、GitLabへのGit SSHアクセス用に設定されたSSHサーバーを提供します。このコンポーネントは、ポート22でクラスターの外部に公開する必要があります。
gitlab.gitlab-shell.enabledがtrueに設定されている場合、GitLab Operatorはgitlab-shellをデプロイします。これはデフォルト設定です。
ターゲットプラットフォームに基づく要件の概要は次のとおりです:
| SSH経由のGitを必要とするか | Kubernetes | OpenShift |
|---|---|---|
| いいえ | 以下のいずれかのNGINX Ingressプロバイダーを使用する必要があります(Kubernetesには組み込みのIngressプロバイダーがありません)。 | 以下のIngressプロバイダーは必要ありません。組み込みのRoutesをIngressプロバイダーとして使用できます。 |
| はい | 以下のいずれかのNGINX Ingressプロバイダーを使用する必要があります(Kubernetesには組み込みのIngressプロバイダーがありません)。 | 以下のいずれかのIngressプロバイダーを使用する必要があります。Routesはポート22の公開をサポートしていません。 |
Ingressプロバイダー
以下は、Ingressプロバイダーのリストと、関連するノートおよびプラットフォーム固有の詳細です。
NGINX-Ingress Helmチャート
GitLabでは、フォークしたNGINX-ingressチャートを管理しており、これを使用することで、SSH経由のGitを「すぐに」サポートするように変更されたNGINXリソースをデプロイできます。
これはGitLab Operatorを使用する場合のデフォルト設定であり、GitLab CR内のnginx-ingress.enabled={true,false}によって制御されます。falseに設定すると、外部NGINXインスタンスを使用できます。
このIngressプロバイダーは、KubernetesとOpenShiftの両方で使用できます。
NGINX Ingressプロバイダーのインストールオプションの詳細については、インストールに関するドキュメントを参照してください。
NGINX Ingress Operator
組み込みのフォークしたNGINX-Ingress Helmチャートの代替として、NGINX Ingress Operatorを使用してgitlab-shellを公開することもできます。
このオプションにはいくつかの注意事項があります:
- NGINX Inc.のTransportServer/GlobalConfigurationカスタムリソース定義は、機能プレビューと見なされており、本番環境での使用には注意が必要です。
- NGINX Inc.のOperatorはまだ比較的新しく、現在のバージョンは0.3.0に過ぎません。どちらのフレーバーの成熟したHelmチャートと比べても、利用可能な設定オプションはそれほど多く含まれていません。
- このオプションを使用する場合でも、NGINXサービスで
22を手動で公開する必要があります(これは、NGINXIngressController CRでは設定できません)。
より広範な調査内容は、#58に記載されています。
OpenShift Routes
OpenShift Routesは、OpenShiftクラスターに組み込まれているコンポーネントです。OpenShiftにおけるRoutesは、KubernetesにおけるIngressに相当します。
OpenShiftにデプロイする場合、GitLab CRでnginx-ingress.enabled=falseを設定することで、外部トラフィックのフローをOpenShift Routesに制御させることができます。GitLab OperatorがIngressオブジェクトを調整すると、OpenShiftは、クラスターのベースドメインにマップする同等のRouteオブジェクトを自動的に作成します。
OpenShift RoutesはTCPトラフィック(ポート22のSSH)の公開をサポートしていないため、gitlab-shellを使用したSSH経由のGitには使用できません。
考慮事項
以下は、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が意図せず変更されることを防ぎます。