OpenShift Service Mesh 3.0 is a Technology Preview feature only
Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process. This documentation is a work in progress and might not be complete or fully tested.1.5. Bookinfo アプリケーションについて
info
サンプルアプリケーションのインストールは、アプリケーションのデプロイと、クラスター外部からアプリケーションにアクセスできるようにするためのゲートウェイの作成という 2 つのタスクで主に構成されます。
info
アプリケーションを使用して、サービスメッシュの機能を調べることができます。bookinfo
アプリケーションを使用すると、Web ブラウザーからのリクエストがメッシュを通過してアプリケーションに到達することを簡単に確認できます。
info
アプリケーションは、オンラインブックストアの単一のカタログエントリーと同様に、書籍に関する情報を表示します。アプリケーションには、書籍の説明、書籍の詳細 (ISBN、ページ数、その他の情報)、書籍のレビューが記載されたページが表示されます。
info
アプリケーションはメッシュを通じて公開され、メッシュ設定によって、アプリケーションを構成するマイクロサービスがリクエストの処理にどのように使用されるかが決まります。レビュー情報は、reviews-v1
、reviews-v2
、reviews-v3
の 3 つのサービスのいずれかから取得されます。reviews
仮想サービスを定義せずに bookinfo
アプリケーションをデプロイすると、メッシュはラウンドロビンルールを使用してリクエストをサービスにルーティングします。
reviews
仮想サービスをデプロイすることで、異なる動作を指定できます。たとえば、ユーザーが info
アプリケーションにログインすると、メッシュがリクエストを reviews-v2
サービスにルーティングし、アプリケーションが黒い星付きのレビューを表示するように指定できます。ユーザーが bookinfo
アプリケーションにログインしない場合、メッシュはリクエストを reviews-v3
サービスにルーティングし、アプリケーションは赤い星付きのレビューを表示します。
詳細は、アップストリーム Istio ドキュメントの Bookinfo Application を参照してください。
1.5.1. Bookinfo アプリケーションをデプロイする
前提条件
- クラスターを OpenShift Container Platform 4.15 以降にデプロイしている。
-
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform Web コンソールにログインしている。 - OpenShift CLI (oc) にアクセスできる。
- Red Hat OpenShift Service Mesh Operator をインストールし、Istio リソースを作成して、Operator によって Istio がデプロイされている。
- IstioCNI リソースが作成され、Operator によって必要な IstioCNI Pod がデプロイされている。
手順
-
OpenShift Container Platform Web コンソールで、Home
Projects ページに移動します。 - Create Project をクリックします。
Project name フィールドに
info
を入力します。Display name と Description のフィールドは、必須ではなく、補足情報を提供します。
- Create をクリックします。
次のコマンドを入力して、Istio 検出セレクターとインジェクションラベルを
info
namespace に適用します。$ oc label namespace info istio-discovery=enabled istio-injection=enabled
注記この例では、Istio リソースの名前は
default
です。Istio リソース名が異なる場合は、istio-injection=enabled
ラベルを追加するのではなく、istio.io/rev
ラベルを Istio リソースの名前に設定する必要があります。次のコマンドを入力して、
info
YAML ファイルを適用し、bookinfo
アプリケーションをデプロイします。oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/info/platform/kube/bookinfo.yaml -n bookinfo
検証
次のコマンドを実行して、
info
サービスが利用可能であることを確認します。$ oc get services -n info
出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 172.30.137.21 <none> 9080/TCP 44s productpage ClusterIP 172.30.2.246 <none> 9080/TCP 43s ratings ClusterIP 172.30.33.85 <none> 9080/TCP 44s reviews ClusterIP 172.30.175.88 <none> 9080/TCP 44s
次のコマンドを実行して、
info
Pod が利用可能であることを確認します。$ oc get pods -n info
出力例
NAME READY STATUS RESTARTS AGE details-v1-698d88b-km2jg 2/2 Running 0 66s productpage-v1-675fc69cf-cvxv9 2/2 Running 0 65s ratings-v1-6484c4d9bb-tpx7d 2/2 Running 0 65s reviews-v1-5b5d6494f4-wsrwp 2/2 Running 0 65s reviews-v2-5b667bcbf8-4lsfd 2/2 Running 0 65s reviews-v3-5b9bd44f4-44hr6 2/2 Running 0 65s
Ready
列に2/2
と表示される場合、プロキシーサイドカーは正常に注入されています。各 Pod のStatus
列にRunning
と表示されていることを確認します。bookinfo
ページにリクエストを送信して、info
アプリケーションが実行中であることを確認します。以下のコマンドを実行します。$ oc exec "$(oc get pod -l app=ratings -n info -o jsonpath='{.items[0].metadata.name}')" -c ratings -n bookinfo -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
1.5.2. ゲートウェイを使用して Bookinfo アプリケーションにアクセスする方法
Red Hat OpenShift Service Mesh Operator はゲートウェイをデプロイしません。ゲートウェイはコントロールプレーンの一部ではありません。セキュリティーのベストプラクティスとして、Ingress ゲートウェイと Egress ゲートウェイは、コントロールプレーンが含まれる namespace とは別の namespace にデプロイする必要があります。
ゲートウェイ API またはゲートウェイインジェクションメソッドのいずれかを使用してゲートウェイをデプロイできます。
1.5.3. Istio ゲートウェイインジェクションを使用して Bookinfo アプリケーションにアクセスする
ゲートウェイインジェクションは、Istio サイドカーインジェクションと同じメカニズムを使用して、Service
リソースとペアになっている Deployment
リソースからゲートウェイを作成します。Service
リソースは、OpenShift Container Platform クラスターの外部からアクセスできるようになります。
前提条件
-
OpenShift Container Platform Web コンソールに
cluster-admin
としてログインしている。 - Red Hat OpenShift Service Mesh Operator がインストールされている。
- Istio リソースをデプロイしておく。
手順
以下のコマンドを実行して
istio-ingressgateway
のデプロイメントおよびサービスを作成します。$ oc apply -n info -f ingress-gateway.yaml
注記この例では、Istio コミュニティーリポジトリーで使用可能なサンプル
Ingress-gateway.yaml
ファイル を使用します。新しいゲートウェイを使用するように
info
アプリケーションを設定します。次のコマンドを実行して、ゲートウェイ設定を適用します。$ oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/info/networking/bookinfo-gateway.yaml -n bookinfo
注記この例では、
info
アプリケーションでゲートウェイインジェクションを設定するために、アプリケーションがインストールされている namespace に適用する必要があるサンプルゲートウェイ設定ファイルを使用します。次のコマンドを実行して、ルートを使用してクラスターの外部にゲートウェイを公開します。
$ oc expose service istio-ingressgateway -n info
Ingress トラフィックが増加した場合に Pod を自動的にスケーリングするように、YAML ファイルを変更します。
設定例
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: labels: istio: ingressgateway release: istio name: ingressgatewayhpa namespace: info spec: maxReplicas: 5 1 metrics: - resource: name: cpu target: averageUtilization: 80 type: Utilization type: Resource minReplicas: 2 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: istio-ingressgateway
- 1
- この例では、最大レプリカを
5
に設定し、最小レプリカを2
に設定します。また、使用率が 80% に達すると、別のレプリカが作成されます。
ノードで実行する必要がある Pod の最小数を指定します。
設定例
apiVersion: policy/v1 kind: PodDisruptionBudget metadata: labels: istio: ingressgateway release: istio name: ingressgatewaypdb namespace: info spec: minAvailable: 1 1 selector: matchLabels: istio: ingressgateway
- 1
- この例では、Pod が新しいノードで再起動した場合に、1 つのレプリカが実行していることを確認します。
以下のコマンドを実行して、ゲートウェイホスト名と製品ページの URL を取得します。
$ HOST=$(oc get route istio-ingressgateway -n info -o jsonpath='{.spec.host}')
次のコマンドを実行して、Web ブラウザーから
productpage
にアクセスできることを確認します。$ echo productpage URL: http://$HOST/productpage
1.5.4. Gateway API を使用して Bookinfo アプリケーションにアクセスする
Kubernetes Gateway API は、Gateway
リソースを作成してゲートウェイをデプロイします。(OpenShift Container Platform 4.15 以降のバージョン)。クラスターで Gateway API CRD を使用する場合は、CRD はデフォルトで無効になっているため、有効にする必要があります。
Red Hat は、Red Hat OpenShift Service Mesh で Kubernetes Gateway API を使用するためのサポートを提供します。Red Hat では、Kubernetes Gateway API カスタムリソース定義 (CRD) のサポートは提供しません。この手順では、コミュニティーゲートウェイ API CRD の使用はデモンストレーションの目的でのみ示されています。
前提条件
-
OpenShift Container Platform Web コンソールに
cluster-admin
としてログインしている。 - Red Hat OpenShift Service Mesh Operator がインストールされている。
- Istio リソースをデプロイしておく。
-
OpenShift Container Platform Web コンソールに
手順
ゲートウェイ API CRD を有効にします。
$ oc get crd gateways.gateway.networking.k8s.io &> /dev/null || { oc kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.0.0" | oc apply -f -; }
Gateway
リソースとHTTPRoute
リソースを使用してゲートウェイを作成および設定します。$ oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/info/gateway-api/bookinfo-gateway.yaml -n bookinfo
注記この例では、ゲートウェイ API を使用して
info
アプリケーションでゲートウェイを設定するために、アプリケーションがインストールされている namespace に適用する必要があるサンプルゲートウェイ設定ファイルを使用します。Gateway API サービスが準備完了しており、アドレスが割り当てられていることを確認します。
$ oc wait --for=condition=programmed gtw info-gateway -n bookinfo
ホスト、ポート、ゲートウェイ URL を取得します。
$ export INGRESS_HOST=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.status.addresses[0].value}') $ export INGRESS_PORT=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.spec.listeners[?(@.name=="http")].port}') $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
ゲートウェイのホスト名と製品ページの URL を取得します。
$ echo "http://${GATEWAY_URL}/productpage"
-
Web ブラウザーから
productpage
にアクセスできることを確認します。