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 ゲートウェイが存在する。

手順

  1. 新しい Ingress ゲートウェイを作成し、ゲートウェイインジェクションを使用するように設定します。

    注記

    この手順では、ServiceMeshControlPlane リソースで定義されているデフォルトの Ingress ゲートウェイデプロイメントからゲートウェイインジェクションに移行します。SMCP で設定された追加の Ingress ゲートウェイから移行する場合は、手順が変わる場合があります。

    ゲートウェイインジェクションを使用した Ingress ゲートウェイリソースの例

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: istio-ingressgateway-canary
      namespace: istio-system 1
    spec:
      selector:
        matchLabels:
          app: istio-ingressgateway
          istio: ingressgateway
      template:
        metadata:
          annotations:
            inject.istio.io/templates: gateway
          labels: 2
            app: istio-ingressgateway
            istio: ingressgateway
            sidecar.istio.io/inject: "true"
        spec:
          containers:
            - name: istio-proxy
              image: auto
          serviceAccountName: istio-ingressgateway
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: istio-ingressgateway
      namespace: istio-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: secret-reader
      namespace: istio-system
    rules:
      - apiGroups: [""]
        resources: ["secrets"]
        verbs: ["get", "watch", "list"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: istio-ingressgateway-secret-reader
      namespace: istio-system
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: secret-reader
    subjects:
      - kind: ServiceAccount
        name: istio-ingressgateway
    ---
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy 3
    metadata:
      name: gatewayingress
      namespace: istio-system
    spec:
      podSelector:
        matchLabels:
          istio: ingressgateway
      ingress:
        - {}
      policyTypes:
        - Ingress

    1
    ゲートウェイインジェクションのデプロイメントとすべてのサポートリソースは、SMCP 定義ゲートウェイと同じ namespace にデプロイする必要があります。
    2
    Pod テンプレートで指定されているラベルに、既存の SMCP 定義ゲートウェイに関連する Service オブジェクトで指定されているすべてのラベルセレクターが含まれていることを確認します。
    3
    クラスターの外部から新しいゲートウェイへのアクセスを許可します。このアクセスは、ServiceMeshControlPlane リソースの spec.security.manageNetworkPolicytrue (デフォルト設定) に設定されている場合に必要です。
  2. 新しいゲートウェイデプロイメントが要求を正常に処理していることを確認します。

    ServiceMeshControlPlane リソースでアクセスロギングが設定されている場合は、新しいゲートウェイデプロイメントのアクセスログを表示して動作を確認します。

  3. 古いデプロイメントをスケールダウンし、新しいデプロイメントをスケールアップします。

    次の手順を実行して、古いゲートウェイデプロイメントから新しいゲートウェイデプロイメントにトラフィックを徐々に移行します。

    1. 次のコマンドを実行して、新しいゲートウェイデプロイメントのレプリカの数を増やします。

      $ oc scale -n istio-system deployment/<new_gateway_deployment> --replicas <new_number_of_replicas>
    2. 次のコマンドを実行して、古いゲートウェイデプロイメントのレプリカの数を減らします。

      $ oc scale -n istio-system deployment/<old_gateway_deployment> --replicas <new_number_of_replicas>
    3. 前の 2 つのコマンドを繰り返し実行します。毎回、新しいゲートウェイデプロイメントのレプリカの数を増やし、古いゲートウェイデプロイメントのレプリカの数を減らします。新しいゲートウェイデプロイメントによって、ゲートウェイの Service オブジェクトへのトラフィックがすべて処理されるまで繰り返します。
  4. 次のコマンドを実行して、ゲートウェイの Service オブジェクトから app.kubernetes.io/managed-by ラベルを削除します。

    $ oc label service -n istio-system istio-ingressgateway app.kubernetes.io/managed-by-

    ラベルを削除すると、ServiceMeshControlPlane リソースでゲートウェイが無効にされたときにサービスが削除されなくなります。

  5. 次のコマンドを実行して、ゲートウェイの Service オブジェクトから ownerReferences オブジェクトを削除します。

    $ oc patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "remove", "path": "/metadata/ownerReferences"}]'

    このオブジェクトを削除すると、ServiceMeshControlPlane リソースが削除されたときにサービスがガベージコレクションされなくなります。

  6. 次のコマンドを実行して、ServiceMeshControlPlane リソースによって管理されていた古いゲートウェイデプロイメントを無効にします。

    $ oc patch smcp -n istio-system <smcp_name> --type='json' -p='[{"op": "replace", "path": "/spec/gateways/ingress/enabled", "value": false}]'
    注記

    古い Ingress ゲートウェイの Service オブジェクトを無効にしても、このオブジェクトは削除されません。この Service オブジェクトをファイルに保存し、新しいゲートウェイインジェクションリソースと一緒に管理できます。

2.15.3. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.