OpenShiftのIngress
OpenShift で GitLab Operator を使って Ingress を提供するには、2つの方法がサポートされています:
NGINX イングレスコントローラー
この設定では、トラフィックは以下のように流れます:
OpenShift ルーターが NGINX Ingress Controller を上書きする場合の回避策
OpenShift 環境では、GitLab Ingress が NGINX サービスの外部 IP アドレスではなく GitLab インスタンスのホスト名を受信することがあります。これはADDRESS
列のkubectl get ingress -n <namespace>
の出力で見ることができます。
OpenShift ルーターコントローラーは、Ingress クラスが異なるために、Ingress リソースを無視するのではなく、誤って更新してしまいます。以下のコマンドは、OpenShift にデプロイされた標準 Ingress 以外の Ingress を適切に無視するように OpenShift ルーターコントローラーに指示します:
kubectl -n openshift-ingress-operator \
patch ingresscontroller default \
--type merge \
-p '{"spec":{"namespaceSelector":{"matchLabels":{"openshift.io/cluster-monitoring":"true"}}}}'
Ingress が既に作成された後にこのパッチを適用する場合は、手動で Ingress を削除してください。GitLab オペレータが手動で再作成します。それらは NGINX Ingress Controller によって適切に所有され、OpenShift Router によって無視されるはずです。
NGINX-Ingress コントローラの作成をブロックする SCC 関連の問題のトラブルシューティングについては、Operator Troubleshooting ドキュメントを参照してください。
設定
デフォルトでは、GitLab OperatorはNGINX Ingress ControllerチャートのGitLabフォークをデプロイします。
IngressにNGINX Ingress Controllerを使用するには、以下を完了します:
- インストール手順の最初のステップに従い、GitLab Operator をインストールします。
-
Webservice 用に作成された Route に関連付けられたドメイン名を探します:
$ kubectl get route -n openshift-console console -ojsonpath='{.status.ingress[0].host}' console-openshift-console.yourdomain.com
次のステップで使用するドメインは、
console-openshift-console
の_後の_部分です。 -
GitLab CRマニフェストを作成するステップで、ドメインを以下のように設定します:
spec: chart: values: global: # Configure the domain from the previous step. hosts: domain: yourdomain.com
デフォルトでは、CertManagerはGitLab関連IngressのTLS証明書を作成・管理します。その他のオプションについては、TLSのドキュメントを参照してください。 - 残りのインストール手順に従って、GitLab CRを適用し、最終的にCRのステータスが
Ready
。 -
NGINX Ingress Controllerのサービス(LoadBalancerタイプ)の外部IPアドレスを探します:
$ kubectl get svc -n gitlab-system gitlab-nginx-ingress-controller -ojsonpath='{.status.loadBalancer.ingress[].ip}' 11.22.33.444
-
DNS プロバイダーで A レコードを作成し、ドメインと前のステップの外部 IP アドレスを接続します:
-
gitlab.yourdomain.com
->11.22.33.444
-
registry.yourdomain.com
->11.22.33.444
-
minio.yourdomain.com
->11.22.33.444
ワイルドカードの A レコードではなく、個別の A レコードを作成することで、既存のルート (OpenShift ダッシュボード用のルートなど) が期待通りに機能し続けるようになります。
これらのレコードは、クラウドプロバイダーのネットワーク設定の公開ゾーンと非公開ゾーンの_両方に_存在する必要があります。これらのゾーン間のパリティにより、クラスター内部での適切なルーティングが保証され、CertManagerが適切に証明書を発行できるようになります。 -
GitLabはhttps://gitlab.yourdomain.com
。
OpenShift ルート
デフォルトでは、OpenShift は Ingress を管理するためにRoutesを使用します。
この設定では、トラフィックは以下のように流れます:
セットアップ
OpenShift Routes for Ingress を使用するには、以下を完了します:
- インストール手順の最初のステップに従い、GitLab Operator をインストールします。
-
Webservice 用に作成された Route に関連付けられたドメイン名を探します:
$ kubectl get route -n openshift-console console -ojsonpath='{.status.ingress[0].host}' console-openshift-console.yourdomain.com
次のステップで使用するドメインは、
console-openshift-console
の_後の_部分です。 -
GitLab CRマニフェストを作成するステップでも設定します:
spec: chart: values: # Disable NGINX Ingress Controller. nginx-ingress: enabled: false global: # Configure the domain from the previous step. hosts: domain: yourdomain.com ingress: # Unset `spec.ingressClassName` on the Ingress objects # so the OpenShift Router takes ownership. class: none annotations: # The OpenShift documentation says "edge" is the default, but # the TLS configuration is only passed to the Route if this annotation # is manually set. route.openshift.io/termination: "edge"
デフォルトでは、CertManagerはGitLab関連ルートのTLS証明書を作成・管理します。その他のオプションについては、TLSのドキュメントを参照してください。OpenShiftクラスターがワイルドカード証明書でセキュリティ保護されている場合、オプション2ではワイルドカード証明書でGitLab関連Routesをセキュリティ保護できます。 - 残りのインストール手順に従って、GitLab CRを適用し、最終的にCRのステータスが
Ready
。
GitLabはhttps://gitlab.yourdomain.com
。
この設定では、OpenShift Routes は GitLab Operator によって作成された Ingresses を翻訳することで作成されます。この変換の詳細については、Routeのドキュメントを参照してください。