2.15. ゲートウェイ移行
ネットワーク管理者として Ingress ゲートウェイと Egress ゲートウェイをデプロイする場合、Deployment リソースでゲートウェイインジェクションを使用する方法が推奨されます。
2.15.1. ゲートウェイ移行について リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Service Mesh 2.x では、Service Mesh Operator はデフォルトでコントロールプレーンの namespace に Ingress ゲートウェイと Egress ゲートウェイを作成します。ServiceMeshControlPlane リソースで追加のゲートウェイを定義できます。
ゲートウェイインジェクションを使用して Deployment リソースで Ingress ゲートウェイと Egress ゲートウェイをデプロイすると、柔軟性と制御性が向上します。このデプロイ方法は、コントロールプレーンリソースで管理するのではなく、対応するアプリケーションと一緒にゲートウェイを管理できるため、より優れた方法です。したがって、デフォルトゲートウェイを無効にし、Service Mesh Control Plane での宣言から移行して、ゲートウェイインジェクションの使用を開始することを推奨します。
2.15.2. SMCP 定義のゲートウェイからゲートウェイインジェクションへの移行 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、ServiceMeshControlPlane リソースで定義されているゲートウェイから、ゲートウェイインジェクションを使用して管理するゲートウェイに、ダウンタイムなしで移行する方法を説明します。この移行は、既存のゲートウェイの Service オブジェクトを使用して、ゲートウェイインジェクションを使用して作成した新しいゲートウェイデプロイメントをターゲットにすることで実現します。
前提条件
-
OpenShift Container Platform Web コンソールに
cluster-adminとしてログインしている。 - Red Hat OpenShift Service Mesh Operator がインストールされている。
-
ServiceMeshControlPlaneリソースをデプロイ済みであり、設定に Ingress ゲートウェイが存在する。
手順
新しい Ingress ゲートウェイを作成し、ゲートウェイインジェクションを使用するように設定します。
注記この手順では、
ServiceMeshControlPlaneリソースで定義されているデフォルトの Ingress ゲートウェイデプロイメントからゲートウェイインジェクションに移行します。SMCP で設定された追加の Ingress ゲートウェイから移行する場合は、手順が変わる場合があります。ゲートウェイインジェクションを使用した Ingress ゲートウェイリソースの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ゲートウェイインジェクションのデプロイメントとすべてのサポートリソースは、SMCP 定義ゲートウェイと同じ namespace にデプロイする必要があります。
- 2
- Pod テンプレートで指定されているラベルに、既存の SMCP 定義ゲートウェイに関連する
Serviceオブジェクトで指定されているすべてのラベルセレクターが含まれていることを確認します。 - 3
- クラスターの外部から新しいゲートウェイへのアクセスを許可します。このアクセスは、
ServiceMeshControlPlaneリソースのspec.security.manageNetworkPolicyがtrue(デフォルト設定) に設定されている場合に必要です。
新しいゲートウェイデプロイメントが要求を正常に処理していることを確認します。
ServiceMeshControlPlaneリソースでアクセスロギングが設定されている場合は、新しいゲートウェイデプロイメントのアクセスログを表示して動作を確認します。古いデプロイメントをスケールダウンし、新しいデプロイメントをスケールアップします。
次の手順を実行して、古いゲートウェイデプロイメントから新しいゲートウェイデプロイメントにトラフィックを徐々に移行します。
次のコマンドを実行して、新しいゲートウェイデプロイメントのレプリカの数を増やします。
oc scale -n istio-system deployment/<new_gateway_deployment> --replicas <new_number_of_replicas>
$ oc scale -n istio-system deployment/<new_gateway_deployment> --replicas <new_number_of_replicas>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、古いゲートウェイデプロイメントのレプリカの数を減らします。
oc scale -n istio-system deployment/<old_gateway_deployment> --replicas <new_number_of_replicas>
$ oc scale -n istio-system deployment/<old_gateway_deployment> --replicas <new_number_of_replicas>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
前の 2 つのコマンドを繰り返し実行します。毎回、新しいゲートウェイデプロイメントのレプリカの数を増やし、古いゲートウェイデプロイメントのレプリカの数を減らします。新しいゲートウェイデプロイメントによって、ゲートウェイの
Serviceオブジェクトへのトラフィックがすべて処理されるまで繰り返します。
次のコマンドを実行して、ゲートウェイの
Serviceオブジェクトからapp.kubernetes.io/managed-byラベルを削除します。oc label service -n istio-system istio-ingressgateway app.kubernetes.io/managed-by-
$ oc label service -n istio-system istio-ingressgateway app.kubernetes.io/managed-by-Copy to Clipboard Copied! Toggle word wrap Toggle overflow ラベルを削除すると、
ServiceMeshControlPlaneリソースでゲートウェイが無効にされたときにサービスが削除されなくなります。次のコマンドを実行して、ゲートウェイの
ServiceオブジェクトからownerReferencesオブジェクトを削除します。oc patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "remove", "path": "/metadata/ownerReferences"}]'$ oc patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "remove", "path": "/metadata/ownerReferences"}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow このオブジェクトを削除すると、
ServiceMeshControlPlaneリソースが削除されたときにサービスがガベージコレクションされなくなります。次のコマンドを実行して、
ServiceMeshControlPlaneリソースによって管理されていた古いゲートウェイデプロイメントを無効にします。oc patch smcp -n istio-system <smcp_name> --type='json' -p='[{"op": "replace", "path": "/spec/gateways/ingress/enabled", "value": false}]'$ oc patch smcp -n istio-system <smcp_name> --type='json' -p='[{"op": "replace", "path": "/spec/gateways/ingress/enabled", "value": false}]'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記-
古い Ingress ゲートウェイの
Serviceオブジェクトを無効にしても、このオブジェクトは削除されません。このServiceオブジェクトをファイルに保存し、新しいゲートウェイインジェクションリソースと一緒に管理できます。 -
/spec/gateways/Ingress/enabledパスを使用できます (このパスをServiceMeshControlPlaneリソースに対して明示的に設定した場合)。デフォルト値を使用している場合は、Ingress ゲートウェイと Egress ゲートウェイの両方の/spec/gateways/enabledパスにパッチを適用する必要があります。
-
古い Ingress ゲートウェイの