3.8. Service Mesh へのアプリケーションのデプロイ
こちらは、サポートされなくなった Red Hat OpenShift Service Mesh リリースのドキュメントです。
Service Mesh バージョン 1.0 および 1.1 コントロールプレーンはサポートされなくなりました。Service Mesh コントロールプレーンのアップグレードの詳細は、Service Mesh の アップグレード を参照してください。
特定の Red Hat OpenShift Service Mesh リリースのサポートステータスは、製品ライフサイクルページ を参照してください。
アプリケーションを Service Mesh にデプロイする場合は、Istio のアップストリームのコミュニティーバージョンのアプリケーションの動作と Red Hat OpenShift Service Mesh インストール内のアプリケーションの動作に違いがいくつかあります。
3.8.1. 前提条件
3.8.2. コントロールプレーンのテンプレートの作成
ServiceMeshControlPlane
テンプレートを使用すると、再利用可能な設定を作成できます。各ユーザーは、作成するテンプレートを独自の設定で拡張できます。テンプレートは、他のテンプレートから設定情報を継承することもできます。たとえば、会計チーム用の会計コントロールプレーンとマーケティングチーム用のマーケティングコントロールプレーンを作成できます。開発プロファイルと実稼働テンプレートを作成する場合、マーケティングチームおよび会計チームのメンバーは、チーム固有のカスタマイズで開発および実稼働テンプレートを拡張できます。
ServiceMeshControlPlane
と同じ構文に従うコントロールプレーンのテンプレートを設定する場合、ユーザーは階層的に設定を継承します。Operator は、Red Hat OpenShift Service Mesh のデフォルト設定を使用する default
テンプレートと共に提供されます。カスタムテンプレートを追加するには、openshift-operators
プロジェクトで smcp-templates
という名前の ConfigMap を作成し、/usr/local/share/istio-operator/templates
で Operator コンテナーに ConfigMap をマウントする必要があります。
3.8.2.1. ConfigMap の作成
以下の手順に従って、ConfigMap を作成します。
前提条件
- Service Mesh Operator がインストールされ、検証されていること。
-
cluster-admin
ロールを持つアカウントがある。 - Operator デプロイメントの場所。
-
OpenShift CLI (
oc
) へのアクセスがある。
手順
- クラスター管理者として OpenShift Container Platform CLI にログインします。
CLI で以下のコマンドを実行し、
openshift-operators
プロジェクトにsmcp-templates
という名前の ConfigMap を作成し、<templates-directory>
をローカルディスクのServiceMeshControlPlane
ファイルの場所に置き換えます。$ oc create configmap --from-file=<templates-directory> smcp-templates -n openshift-operators
Operator ClusterServiceVersion 名を見つけます。
$ oc get clusterserviceversion -n openshift-operators | grep 'Service Mesh'
出力例
maistra.v1.0.0 Red Hat OpenShift Service Mesh 1.0.0 Succeeded
Operator クラスターサービスバージョンを編集して、Operator に
smcp-templates
ConfigMap を使用するよう指示します。$ oc edit clusterserviceversion -n openshift-operators maistra.v1.0.0
ボリュームマウントおよびボリュームを Operator デプロイメントに追加します。
deployments: - name: istio-operator spec: template: spec: containers: volumeMounts: - name: discovery-cache mountPath: /home/istio-operator/.kube/cache/discovery - name: smcp-templates mountPath: /usr/local/share/istio-operator/templates/ volumes: - name: discovery-cache emptyDir: medium: Memory - name: smcp-templates configMap: name: smcp-templates ...
- 変更を保存し、エディターを終了します。
ServiceMeshControlPlane
でtemplate
パラメーターを使用してテンプレートを指定できます。apiVersion: maistra.io/v1 kind: ServiceMeshControlPlane metadata: name: minimal-install spec: template: default
3.8.3. サイドカーコンテナーの自動挿入の有効化
アプリケーションをデプロイする場合は、deployment
オブジェクトで spec.template.metadata.labels
の sidecar.istio.io/inject
ラベルを true
に設定して、インジェクションをオプトインする必要があります。オプトインにより、サイドカーの挿入が OpenShift Container Platform エコシステム内の複数のフレームワークが使用する、ビルダー Pod などの他の OpenShift Container Platform 機能に干渉しないようにします。
前提条件
- Service Mesh の一部である namespace と、サイドカーの自動注入が必要なデプロイメントを特定しておく。
手順
デプロイメントを見つけるには、
oc get
コマンドを使用します。$ oc get deployment -n <namespace>
たとえば、
info
namespace の 'ratings-v1' マイクロサービスのDeployment
YAML ファイルを表示するには、次のコマンドを使用して YAML 形式でリソースを表示します。oc get deployment -n info ratings-v1 -o yaml
-
エディターでアプリケーションの
Deployment
YAML ファイルを開きます。 次の例に示すように、
spec.template.metadata.labels.sidecar.istio/inject
を Deployment YAML ファイルに追加し、sidecar.istio.io/inject
をtrue
に設定します。info deployment-ratings-v1.yaml からのスニペットの例
apiVersion: apps/v1 kind: Deployment metadata: name: ratings-v1 namespace: info labels: app: ratings version: v1 spec: template: metadata: labels: sidecar.istio.io/inject: 'true'
注記自動サイドカーコンテナー注入を有効にする際の
annotations
パラメーターの使用は非推奨となり、labels
パラメーターの使用に置き換えられます。-
Deployment
YAML ファイルを保存します。 ファイルをアプリケーションが含まれるプロジェクトに追加し直します。
$ oc apply -n <namespace> -f deployment.yaml
この例では、
info
はratings-v1
アプリを含むプロジェクトの名前であり、deployment-ratings-v1.yaml
は編集したファイルです。$ oc apply -n info -f deployment-ratings-v1.yaml
リソースが正常にアップロードされたことを確認するには、以下のコマンドを実行します。
$ oc get deployment -n <namespace> <deploymentName> -o yaml
以下に例を示します。
$ oc get deployment -n info ratings-v1 -o yaml
3.8.4. アノテーションによるプロキシー環境変数の設定
Envoy サイドカープロキシーの設定は、ServiceMeshControlPlane
によって管理されます。
デプロイメントの Pod アノテーションを injection-template.yaml
ファイルに追加することにより、アプリケーションのサイドカープロキシーで環境変数を設定できます。環境変数がサイドカーコンテナーに挿入されます。
injection-template.yaml の例
apiVersion: apps/v1 kind: Deployment metadata: name: resource spec: replicas: 7 selector: matchLabels: app: resource template: metadata: annotations: sidecar.maistra.io/proxyEnv: "{ \"maistra_test_env\": \"env_value\", \"maistra_test_env_2\": \"env_value_2\" }"
独自のカスタムリソースを作成するときは、maistra.io/
ラベルとアノテーションを含めないでください。これらのラベルとアノテーションは、リソースが Operator によって生成および管理されていることを示しています。独自のリソースの作成時に Operator が生成したリソースからコンテンツをコピーする場合は、maistra.io/
で始まるラベルやアノテーションを含めないでください。これらのラベルまたはアノテーションを含むリソースは、次回の調整時に Operator によって上書きまたは削除されます。
3.8.5. Mixer ポリシー適用の更新
以前のバージョンの Red Hat OpenShift Service Mesh では、Mixer のポリシーの適用がデフォルトで有効になっていました。Mixer ポリシーの適用はデフォルトで無効になりました。ポリシータスクを実行する前にこれを有効にする必要があります。
前提条件
-
OpenShift CLI (
oc
) へのアクセスがある。
この例では、コントロールプレーンの namespace として istio-system
を使用します。この値は、Service Mesh コントロールプレーン (SMCP) をデプロイした namespace に置き換えてください。
手順
- OpenShift Container Platform CLI にログインします。
以下のコマンドを実行して、現在の Mixer ポリシー適用のステータスを確認します。
$ oc get cm -n istio-system istio -o jsonpath='{.data.mesh}' | grep disablePolicyChecks
disablePolicyChecks: true
の場合は、Service Mesh ConfigMap を編集します。$ oc edit cm -n istio-system istio
-
ConfigMap 内で
disablePolicyChecks: true
を見つけ、値をfalse
に変更します。 - 設定を保存してエディターを終了します。
-
Mixer ポリシー適用ステータスを再度チェックして、
false
に設定されていることを確認します。
3.8.5.1. 適切なネットワークポリシーの設定
Service Mesh は Service Mesh コントロールプレーンおよびメンバー namespace にネットワークポリシーを作成し、それらの間のトラフィックを許可します。デプロイする前に、以下の条件を考慮し、OpenShift Container Platform ルートで以前に公開されたサービスメッシュのサービスを確認します。
- Istio が適切に機能するには、サービスメッシュへのトラフィックが常に ingress-gateway を経由する必要があります。
- サービスメッシュ外のサービスは、サービスメッシュにない個別の namespace にデプロイします。
-
サービスメッシュでリストされた namespace 内にデプロイする必要のあるメッシュ以外のサービスでは、それらのデプロイメント
maistra.io/expose-route: "true"
にラベルを付けます。これにより、これらのサービスへの OpenShift Container Platform ルートは依然として機能します。
3.8.6. Bookinfo のサンプルアプリケーション
Bookinfo のサンプルアプリケーションでは、OpenShift Container Platform での Red Hat OpenShift Service Mesh 2.6.2 のインストールをテストできます。
Bookinfo アプリケーションは、オンラインブックストアの単一カタログエントリーのように、書籍に関する情報を表示します。このアプリケーションでは、書籍の説明、書籍の詳細 (ISBN、ページ数その他の情報)、および書評のページが表示されます。
Bookinfo アプリケーションはこれらのマイクロサービスで構成されます。
-
productpage
マイクロサービスは、details
とreviews
マイクロサービスを呼び出して、ページを設定します。 -
details
マイクロサービスには書籍の情報が含まれています。 -
reviews
マイクロサービスには、書評が含まれます。これはratings
マイクロサービスも呼び出します。 -
ratings
マイクロサービスには、書評を伴う書籍のランキング情報が含まれます。
reviews マイクロサービスには、以下の 3 つのバージョンがあります。
-
バージョン v1 は、
ratings
サービスを呼び出しません。 -
バージョン v2 は、
ratings
サービスを呼び出して、各評価を 1 から 5 の黒い星で表示します。 -
バージョン v3 は、
ratings
サービスを呼び出して、各評価を 1 から 5 の赤い星で表示します。
3.8.6.1. Bookinfo アプリケーションのインストール
このチュートリアルでは、プロジェクトの作成、そのプロジェクトへの Bookinfo アプリケーションのデプロイ、Service Mesh での実行中のアプリケーションの表示を行い、サンプルアプリケーションを作成する方法を説明します。
前提条件
- OpenShift Container Platform 4.1 以降がインストールされている。
- Red Hat OpenShift Service Mesh 2.6.2 がインストールされている。
-
OpenShift CLI (
oc
) へのアクセスがある。 - OpenShift Container Platform に `cluster-admin` としてログインしている。
Bookinfo サンプルアプリケーションは、IBM Z® および IBM Power® にインストールできません。
このセクションのコマンドは、Service Mesh コントロールプレーンプロジェクトが istio-system
であると仮定します。コントロールプレーンを別の namespace にインストールしている場合は、実行する前にそれぞれのコマンドを編集します。
手順
-
Home
Projects をクリックします。 - Create Project をクリックします。
Project Name として
info
を入力し、Display Name を入力します。その後、Description を入力し、Create をクリックします。または、CLI からこのコマンドを実行して、
info
プロジェクトを作成できます。$ oc new-project info
-
Operators
Installed Operators をクリックします。 -
プロジェクト メニューをクリックし、Service Mesh コントロールプレーンの namespace を使用します。この例では
istio-system
を使用します。 - Red Hat OpenShift Service Mesh Operator をクリックします。
Istio Service Mesh Member Roll タブをクリックします。
- Istio Service Mesh Member Roll がすでに作成されている場合は、名前をクリックしてから YAML タブをクリックし、YAML エディターを開きます。
-
ServiceMeshMemberRoll
を作成していない場合は、Create ServiceMeshMemberRoll をクリックします。
- Members をクリックし、Value フィールドにプロジェクトの名前を入力します。
Create をクリックして、更新した Service Mesh Member Roll を保存します。
または、以下のサンプルを YAML ファイルに保存します。
Bookinfo ServiceMeshMemberRoll の例 (servicemeshmemberroll-default.yaml)
apiVersion: maistra.io/v1 kind: ServiceMeshMemberRoll metadata: name: default spec: members: - info
以下のコマンドを実行して、そのファイルをアップロードし、
istio-system
namespace にServiceMeshMemberRoll
リソースを作成します。この例では、istio-system
が Service Mesh コントロールプレーンプロジェクトの名前となります。$ oc create -n istio-system -f servicemeshmemberroll-default.yaml
以下のコマンドを実行して、
ServiceMeshMemberRoll
が正常に作成されていることを確認します。$ oc get smmr -n istio-system -o wide
STATUS
列がConfigured
の場合、インストールは正常に終了しています。NAME READY STATUS AGE MEMBERS default 1/1 Configured 70s ["info"]
CLI で `info` プロジェクトに Bookinfo アプリケーションをデプロイするには、
bookinfo.yaml
ファイルを適用します。$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.6/samples/bookinfo/platform/kube/bookinfo.yaml
以下のような出力が表示されるはずです。
service/details created serviceaccount/info-details created deployment.apps/details-v1 created service/ratings created serviceaccount/info-ratings created deployment.apps/ratings-v1 created service/reviews created serviceaccount/info-reviews created deployment.apps/reviews-v1 created deployment.apps/reviews-v2 created deployment.apps/reviews-v3 created service/productpage created serviceaccount/info-productpage created deployment.apps/productpage-v1 created
info-gateway.yaml
ファイルを適用して Ingress ゲートウェイを作成します。$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.6/samples/bookinfo/networking/bookinfo-gateway.yaml
以下のような出力が表示されるはずです。
gateway.networking.istio.io/info-gateway created virtualservice.networking.istio.io/info created
GATEWAY_URL
パラメーターの値を設定します。$ export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')
3.8.6.2. デフォルトの宛先ルールの追加
Bookinfo アプリケーションを使用するには、先にデフォルトの宛先ルールを追加する必要があります。相互トランスポート層セキュリティー (TLS) 認証が有効かどうかによって、2 つの事前設定される YAML ファイルを使用できます。
手順
宛先ルールを追加するには、以下のいずれかのコマンドを実行します。
相互 TLS を有効にしていない場合:
$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.6/samples/bookinfo/networking/destination-rule-all.yaml
相互 TLS を有効にしている場合:
$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.6/samples/bookinfo/networking/destination-rule-all-mtls.yaml
以下のような出力が表示されるはずです。
destinationrule.networking.istio.io/productpage created destinationrule.networking.istio.io/reviews created destinationrule.networking.istio.io/ratings created destinationrule.networking.istio.io/details created
3.8.6.3. Bookinfo インストールの検証
Bookinfo アプリケーションのサンプルが正常にデプロイされたことを確認するには、以下の手順を実行します。
前提条件
- Red Hat OpenShift Service Mesh がインストールされている。
- Bookinfo サンプルアプリケーションのインストール手順を実行します。
- OpenShift Container Platform に `cluster-admin` としてログインしている。
CLI からの手順
以下のコマンドですべての Pod が準備状態にあることを確認します。
$ oc get pods -n info
すべての Pod のステータスは
Running
である必要があります。以下のような出力が表示されるはずです。NAME READY STATUS RESTARTS AGE details-v1-55b869668-jh7hb 2/2 Running 0 12m productpage-v1-6fc77ff794-nsl8r 2/2 Running 0 12m ratings-v1-7d7d8d8b56-55scn 2/2 Running 0 12m reviews-v1-868597db96-bdxgq 2/2 Running 0 12m reviews-v2-5b64f47978-cvssp 2/2 Running 0 12m reviews-v3-6dfd49b55b-vcwpf 2/2 Running 0 12m
以下のコマンドを実行して、製品ページの URL を取得します。
echo "http://$GATEWAY_URL/productpage"
- Web ブラウザーで出力をコピーして貼り付けて、Bookinfo の製品ページがデプロイされていることを確認します。
Kiali Web コンソールからの手順
Kiali Web コンソールのアドレスを取得します。
- OpenShift Container Platform Web コンソールにログインします。
-
Networking
Routes に移動します。 Routes ページで、Namespace メニューから Service Mesh コントロールプレーンプロジェクトを選択します (例:
istio-system
)。Location 列には、各ルートのリンク先アドレスが表示されます。
- Kiali の 場所 列のリンクをクリックします。
- Log In With OpenShift をクリックします。Kiali の 概要 画面には、各プロジェクトの namespace のタイルが表示されます。
- Kiali で、グラフ をクリックします。
- Namespace リストから info を選択し、Graph Type リストから App graph を選択します。
Display メニューから Display idle nodes をクリックします。
これにより、定義されているが要求を受信または送信していないノードが表示されます。アプリケーションが適切に定義されていることを確認できますが、要求トラフィックは報告されていません。
- 期間 メニューを使用して、期間を延ばして、古いトラフィックを取得できるようにします。
- Refresh Rate メニューを使用して、トラフィックを頻繁に更新するか、まったく更新しないようにします。
- Services、Workloads または Istio Config をクリックして、info コンポーネントのリストビューを表示し、それらが正常であることを確認します。
3.8.6.4. Bookinfo アプリケーションの削除
以下の手順で、Bookinfo アプリケーションを削除します。
前提条件
- OpenShift Container Platform 4.1 以降がインストールされている。
- Red Hat OpenShift Service Mesh 2.6.2 がインストールされている。
-
OpenShift CLI (
oc
) へのアクセスがある。
3.8.6.4.1. Bookinfo プロジェクトの削除
手順
- OpenShift Container Platform Web コンソールにログインします。
-
Home
Projects をクリックします。 -
info
メニュー をクリックしてから Delete Project をクリックします。 確認ダイアログボックスに
info
と入力してから Delete をクリックします。または、CLI を使用して次のコマンドを実行し、
info
プロジェクトを作成できます。$ oc delete project info
3.8.6.4.2. Service Mesh Member Roll からの Bookinfo プロジェクトの削除
手順
- OpenShift Container Platform Web コンソールにログインします。
-
Operators
Installed Operators をクリックします。 -
Project メニューをクリックし、一覧から
istio-system
を選択します。 - Red Hat OpenShift Service Mesh Operator の Provided APIS で、Istio Service Mesh Member Roll のリンクをクリックします。
-
ServiceMeshMemberRoll
メニュー をクリックし、Edit Service Mesh Member Roll を選択します。 デフォルトの Service Mesh Member Roll YAML を編集し、members 一覧から
info
を削除します。または、CLI を使用して次のコマンドを実行し、
ServiceMeshMemberRoll
からinfo
プロジェクトを削除できます。この例では、istio-system
が Service Mesh コントロールプレーンプロジェクトの名前となります。$ oc -n istio-system patch --type='json' smmr default -p '[{"op": "remove", "path": "/spec/members", "value":["'"info"'"]}]'
- Save をクリックして、Service Mesh Member Roll を更新します。
3.8.7. サンプルトレースの生成とトレースデータの分析
Jaeger はオープンソースの分散トレースシステムです。Jaeger を使用すると、トレースを実行でき、アプリケーションを設定するさまざまなマイクロサービスで要求のパスを追跡します。Jaeger はデフォルトで Service Mesh の一部としてインストールされます。
このチュートリアルでは、Service Mesh と Bookinfo サンプルアプリケーションを使用して、Jaeger で分散トレースを実行する方法を示します。
前提条件
- OpenShift Container Platform 4.1 以降がインストールされている。
- Red Hat OpenShift Service Mesh 2.6.2 がインストールされている。
- インストール時に Jaeger が有効になっている。
- Bookinfo のサンプルアプリケーションがインストールされている。
手順
Bookinfo サンプルアプリケーションのインストール後に、トラフィックをメッシュに送信します。以下のコマンドを数回入力します。
$ curl "http://$GATEWAY_URL/productpage"
このコマンドはアプリケーションの
productpage
マイクロサービスにアクセスするユーザーをシミュレートします。OpenShift Container Platform コンソールで、Networking
Routes に移動し、Jaeger ルートを検索します。これは Location に一覧される URL です。 または CLI を使用してルートの詳細のクエリーを実行します。この例では、
istio-system
が Service Mesh コントロールプレーンの namespace です。$ export JAEGER_URL=$(oc get route -n istio-system jaeger -o jsonpath='{.spec.host}')
以下のコマンドを実行して Jaeger コンソールの URL を表示します。結果をブラウザーに貼り付け、その URL に移動します。
echo $JAEGER_URL
- OpenShift Container Platform コンソールへアクセスするときに使用するものと同じユーザー名とパスワードを使用してログインします。
- Jaeger ダッシュボードの左側のペインで、サービス メニューから productpage.info を選択し、ペイン下部の Find Traces をクリックします。トレースの一覧が表示されます。
-
一覧のトレースのいずれかをクリックし、そのトレースの詳細ビューを開きます。リストで最初の項目をクリックすると、
/productpage
の最終更新に対応する詳細が表示されます。