• 検索結果がありません。

Ingress トラフィックの管理

ドキュメント内 OpenShift Container Platform 4.6 サービスメッシュ (ページ 84-88)

バージョン 2. 0 ServiceMeshControlPlane の例 の例

1.12. トラフィック管理

1.12.2. Ingress トラフィックの管理

Red Hat OpenShift Service Mesh では、Ingress Gateway は、モニタリング、セキュリティー、ルート ルールなどのサービスメッシュ機能をクラスターに入るトラフィックに適用できるようにします。サー ビスメッシュを、サービスメッシュゲートウェイを使用してサービスメッシュ外のサービスを公開する ように設定します。

1.12.2.1. Ingress IP およびポートの判別 およびポートの判別

以下のコマンドを実行して、Kubernetes クラスターが外部ロードバランサーをサポートする環境で実 行されているかどうかを判別します。

このコマンドは、namespace のそれぞれの項目の NAME、TYPECLUSTER-IP EXTERNAL-IPPORT(S)、および AGE を返します。

EXTERNAL-IP 値が設定されている場合には、環境には Ingress ゲートウェイに使用できる外部ロード バランサーがあります。

EXTERNAL-IP の値が <none> または永続的に <pending> の場合、環境は Ingress ゲートウェイの外 部ロードバランサーを提供しません。サービスのノードポートを使用してゲートウェイにアクセスで きます。

環境の手順を選択します。

ロードバランサーを使用したルーティングの設定 ロードバランサーを使用したルーティングの設定

お使いの環境に外部ロードバランサーがある場合には、以下の手順に従います。

Ingress IP およびポートを設定します。

一部の環境では、ロードバランサーは IP アドレスの代わりにホスト名を使用して公開される場合があ ります。この場合、Ingress ゲートウェイの EXTERNAL-IP 値は IP アドレスではありません。これはホ スト名であり、直前のコマンドは INGRESS_HOST 環境変数の設定に失敗します。

kind: Sidecar metadata:

name: default

namespace: bookinfo spec:

egress:

- hosts:

- "./*"

- "istio-system/*"

$ oc get svc istio-ingressgateway -n istio-system

$ export INGRESS_HOST=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

$ export INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')

$ export SECURE_INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')

以下のコマンドを使用して INGRESS_HOST 値を修正します。

ロードバランサーを使用しないルーティングの設定 ロードバランサーを使用しないルーティングの設定

お使いの環境に外部のロードバランサーがない場合は、以下の手順に従います。ノードポートを代わり に使用する必要があります。

Ingress ポートを設定します。

1.12.3. Bookinfo アプリケーションを使用したルーティングの例

Service Mesh Bookinfo サンプルアプリケーションは、それぞれが複数のバージョンを持つ 4 つの別個

のマイクロサービスで構成されます。3 つの異なるバージョン (マイクロサービスの 1 つは reviews と 呼ばれる) はデプロイされており、同時に実行されます。

前提条件 前提条件:

以下の例に合わせて Bookinfo サンプルアプリケーションをデプロイします。

このタスクについて このタスクについて

これによって生じる問題を確認するには、ブラウザーで bookinfo アプリの /product page にアクセス し、複数回更新を実行します。

書評の出力に星評価が含まれる場合や、含まれない場合があります。ルーティング先の明示的なデフォ ルトサービスバージョンがない場合、サービスメッシュは、利用可能なすべてのバージョンに要求を ルーティングしていきます。

このチュートリアルは、すべてのトラフィックをマイクロサービスの v1 (バージョン 1) にルーティング するルールを適用するのに役立ちます。後に、HTTP 要求ヘッダーの値に基づいてトラフィックをルー ティングするためのルールを適用できます。

1.12.3.1. 仮想サービスの適用 仮想サービスの適用

1 つのバージョンにのみルーティングするには、マイクるサービスのデフォルトバージョンを設定する 仮想サービスを適用します。以下の例では、仮想サービスはすべてのトラフィックを各マイクロサービ スの v1 にルーティングします。

1. 以下のコマンドを実行して仮想サービスを適用します。

2. コマンドが正常に実行されることをテストするには、以下のコマンドで定義されたルートを表 示します。

$ export INGRESS_HOST=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')

$ export INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')

$ export SECURE_INGRESS_PORT=$(oc -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')

$ oc apply -f https://raw.githubusercontent.com/Maistra/istio/maistra-1.1/samples/bookinfo/networking/virtual-service-all-v1.yaml

このコマンドは以下の YAML ファイルを返します。

$ oc get virtualservices -o yaml

apiVersion: networking.istio.io/v1alpha3 kind: VirtualService

metadata:

name: details ...

spec:

hosts:

- details http:

- route:

- destination:

host: details subset: v1

---apiVersion: networking.istio.io/v1alpha3 kind: VirtualService

metadata:

name: productpage ...

spec:

gateways:

- bookinfo-gateway - mesh

hosts:

- productpage http:

- route:

- destination:

host: productpage subset: v1

---apiVersion: networking.istio.io/v1alpha3 kind: VirtualService

metadata:

name: ratings ...

spec:

hosts:

- ratings http:

- route:

- destination:

host: ratings subset: v1

---apiVersion: networking.istio.io/v1alpha3 kind: VirtualService

metadata:

name: reviews ...

spec:

サービスメッシュを Bookinfo マイクロサービスの v1 バージョン (最も重要な点として reviews サービスバージョン 1) にルーティングするように設定しています。

1.12.3.2. 新規ルーティング設定のテスト 新規ルーティング設定のテスト

Bookinfo アプリケーションの /productpage を再度更新すると、新しい設定を簡単にテストできます。

1. ブラウザーで Bookinfo サイトを開きます。URL は http://$GATEWAY_URL/productpage で す。ここで、$GATEWAY_URL は Ingress の外部 IP アドレスです。

更新回数に関係なく、ページのレビュー部分は星評価なしに表示されます。これは、サービス メッシュを、reviews サービスのすべてのトラフィックをバージョン reviews:v1 にルーティン グするように設定しているためであり、サービスのこのバージョンは星評価サービスにアクセ スしません。

サービスメッシュは、トラフィックを 1 つのバージョンのサービスにルーティングするように なりました。

1.12.3.3. ユーザーアイデンティティーに基づくルート ユーザーアイデンティティーに基づくルート

次に、ルート設定を変更して、特定のユーザーからのトラフィックすべてが特定のサービスバージョン にルーティングされるようにします。この場合、jason という名前のユーザーからのトラフィックはす べて、サービス reviews:v2 にルーティングされます。

サービスメッシュには、ユーザーアイデンティティーについての特別な組み込み情報がないことに注意 してください。この例は、productpage サービスが reviews サービスへのすべてのアウトバウンド

HTTP 要求にカスタム end-user ヘッダーを追加することで有効にされます。

1. 以下のコマンドを実行してユーザーベースのルーティングを有効にします。

2. ルールが作成されていることを確認します。

このコマンドは以下の YAML ファイルを返します。

hosts:

- reviews http:

- route:

- destination:

host: reviews subset: v1

$ oc apply -f https://raw.githubusercontent.com/Maistra/istio/maistra-1.1/samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml

$ oc get virtualservice reviews -o yaml

apiVersion: networking.istio.io/v1alpha3 kind: VirtualService

metadata:

name: reviews ...

spec:

hosts:

- reviews http:

3. Bookinfo アプリケーションの /productpage で、ユーザー jason としてログインします。ブラ ウザーを更新します。表示内容を確認してください。各レビューの横に星評価が表示されま す。

4. 別のユーザーとしてログインします(任意の名前を指定します)。ブラウザーを更新します。こ れで星がなくなりました。これは、Jason 以外のすべてのユーザーについてトラフィックが reviews:v1 にルーティングされるためです。

ユーザーアイデンティティーに基づいてトラフィックをルーティングするようにサービスメッシュが正 常に設定されています。

ドキュメント内 OpenShift Container Platform 4.6 サービスメッシュ (ページ 84-88)