2 つのサービス間のトラフィックスプリットの設定

ここでは、一般にトラフィックスプリットとして知られている 2 つの Kubernetes サービス間のトラフィックをスプリットする方法を示す。バックエンドの「bookstore」サービスと「bookstore-v2」サービスの間で、ルートの「bookstore」サービスに向けられたトラフィックをスプリットする。

bookstore v2 アプリケーションをデプロイする

SMIトラフィックアクセスとスプリットポリシーの使用法を示すために、バージョン v2 のブックストアアプリケーション (bookstore-v2) をデプロイする。- openshift を使用している場合は、installation guideで指定されているように、bookstore-v2 サービス アカウントにセキュリティコンテキスト制約を追加する必要があることに注意してください。

# Contains the bookstore-v2 Kubernetes Service, Service Account, Deployment and SMI Traffic Target resource to allow
# `bookbuyer` to communicate with `bookstore-v2` pods
kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/release-v1.1/manifests/apps/bookstore-v2.yaml

bookstore-v2 Pod が bookstore 名前空間で実行されるのを待。次に、bookstore の v2 にアクセスするために、./scripts/port-forward-all.sh スクリプトを終了して再起動する。

bookstore-v2 サービスにはまだトラフィックが流れていないため、カウンターは増加しない。

SMI トラフィックスプリットの作成

SMI トラフィックスプリットポリシーをデプロイして、ルートブックストアサービスに送信されるトラフィックの 100% をブックストア サービス バックエンドに転送する。

kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/release-v1.1/manifests/split/traffic-split-v1.yaml

注意: ルートサービスには、任意のKubernetesサービスを指定することができる。ラベルセレクタは一切ない。また、トラフィックスプリットリソースで指定されたバックエンドサービスと重複する必要はない。ルートサービスは、SMI Traffic Splitリソースにおいて、.サフィックスの有無にかかわらず、サービス名として参照することができる。

bookstore-v2 ブラウザ ウィンドウから販売された書籍の数は 0 のままである必要がある。これは、bookbuyer が bookstore サービスにトラフィックを送信しており、bookstore-v2 サービスにリクエストを送信しているアプリケーションがないという事実に加えて、現在のトラフィックスプリットポリシーが bookstore に対して現在 100 に重み付けされているためだ。以下を実行し、Backends プロパティを表示することで、トラフィックスプリットポリシーを確認できる。

kubectl describe trafficsplit bookstore-split -n bookstore

Bookstore v2 へのトラフィックスプリット

SMIトラフィックスプリットポリシーを更新して、ルートブックストアサービスに送信されるトラフィックの50パーセントをブックストアサービスに、50パーセントをブックストア-v2サービスに向けるように、ブックストア-v2バックエンドを仕様に追加し、ウエイトフィールドを変更することによって行う。

kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/release-v1.1/manifests/split/traffic-split-50-50.yaml

変更が反映されるのを待ち、ブラウザウィンドウで bookstorebookstore-v2 のカウンターの増加を観察してください。両方のカウンタがインクリメントしているはずだ。

すべてのトラフィックを Bookstore v2 にスプリット

bookstore-split TrafficSplit を更新して、すべてのトラフィックが bookstore-v2 に向かうように設定する。

kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/release-v1.1/manifests/split/traffic-split-v2.yaml

変更が反映されるのを待ち、「bookstore-v2」のカウンターが増加し、ブラウザウィンドウの「bookstore」がフリーズするのを観察する。

これで、「bookstore」サービスに向けられたすべてのトラフィックが「bookstore-v2」に流れる。

次のステップ