バージョン 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、TYPE、CLUSTER-IP、 EXTERNAL-IP、PORT(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 にルーティングされるためです。
ユーザーアイデンティティーに基づいてトラフィックをルーティングするようにサービスメッシュが正 常に設定されています。