OpenShift Service Meshを使ってみた！

# 背景

元々の目的はユーザー定義プロジェクトのモニタリングを使うことではなく、Argo RolloutsでProgressive Deliveryを実施する際のトラフィックコントロールにOpenShift Service Meshを使うユースケースを試したかったのが発端です。

この記事ではOpenShift Service MeshをOpenShift v4.6に導入してBookinfoアプリケーションの稼働を確認するまでの手順を記載しています。

# 手順


## Red Hat OpenShift Service Mesh のインストール

以下のマニュアルを参考にRed Hat OpenShift Service Mesh をインストールします。

https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.6/html/service_mesh/installing-ossm

### OpenShift Elasticsearch Operatorの導入

- 以下のOperatorをインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/5e900d02-389d-07d0-261e-b7abc8953291.png)

- installをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/946fb553-68a8-acf5-cdd7-9a12d13f8aea.png)

- デフォルトの設定のままinstall
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/8df4413c-fd49-9581-c07d-6fa7c357570d.png)

- 完了して以下の画面が表示されるまで待機
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/b3228323-efbf-d208-248a-eb979a3223c9.png)

### OpenShift Jaeger Operatorのインストール

- 以下のOperatorをインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/b1ab9684-000b-f7d4-326f-556ebf755ffa.png)

- installをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/9e9e46ea-d5e5-d6c1-b302-913df60d96a8.png)

- デフォルトの設定のままinstall
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/5a256924-8fcd-3b52-847c-a03cfa0f5be9.png)

- 完了して以下の画面が表示されるまで待機
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/545ae52f-d7b5-0c8a-86cb-a2975886f229.png)

### Kiali Operatorのインストール

- 以下のOperatorをインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/9a154798-f492-3183-91e5-3a0b9c99520d.png)

- installをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/639309ae-07fe-4a23-6260-7ea72bf57085.png)

- デフォルトの設定のままinstall
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/b6631fd6-2cc7-5ff8-a68d-69a10e963a13.png)

- 完了して以下の画面が表示されるまで待機
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/afd88917-a954-505a-d0fd-2c1891115060.png)

### Red Hat OpenShift Service Mesh Operatorのインストール

- 以下のOperatorをインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/81c5c317-30cc-dd16-907f-40a2a7b5a397.png)

- installをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/262e94db-dae8-12e8-164b-808425eb246f.png)

- デフォルトの設定のままinstall
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/e3b3747e-1f92-16a5-b081-cee785a585c3.png)

- 完了して以下の画面が表示されるまで待機
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/c0d43516-5a01-0759-95a3-2f815706f8d3.png)

- 左メニューのInstalled OperatorsよりすべてのOperatorがインストールされていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/b1917df2-6abc-c188-8db3-2f5dcad12343.png)

### ServiceMeshControlPlaneの作成

- istio-systemプロジェクトを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/6c3622ad-645a-880e-2f50-64d3e635494f.png)

- 作成されたことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/a9c882a8-4966-bb55-7300-c9be4af1d958.png)

- 左メニューのInstalled OperatorsよりRed Hat OpenShift Service Mesh を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/6906b616-6b97-0c2b-ec19-8b2ce78296a1.png)

- Istion Service Mesh Control Planeタブを選択して、Create ServiceMeshControlPlaneをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/d2819031-046e-555f-ba9f-64781c4a4cf6.png)

- デフォルト設定のままCreateをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/560c4d19-d3a4-e4ce-34f1-2213057469d1.png)

- ServiceMeshControlPlaneが作成されたことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/ce7b9f08-0e16-57be-cc15-60771c6b5b6f.png)

- Resources タブをクリックして、Red Hat OpenShift Service Mesh コントロールプレーンリソース (Operator が作成し、設定したもの) を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/ad2b1c95-023e-480d-83ca-d0852b6b39e1.png)

### サービスメッシュへのサービスの追加
- サービスメッシュに参加させたいプロジェクトを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/38bd1f9a-a603-fb8b-5e1f-4b3e2b5feaf1.png)

- 左メニューのInstalled Operatorsを選択し、プロジェクトでistio-systemを選択した上で、Red Hat OpenShift Service Meshを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/f0c0eebd-c49b-45c8-578b-3cd944c56f57.png)

- Istio Service Mesh Member Rollタブを選択し、Create ServiceMeshMemberRollをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/9bc7364a-eda6-1102-ec94-220679a5b340.png)

- Membersを展開して、Valueにサービスメッシュに参加させたいプロジェクトを設定し、Createをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/507fb92f-a3ff-53df-bdcf-1c70e0b98e10.png)

- ServiceMeshMemberRollが作成されたことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/ada4807a-9129-51bd-e515-91adb4a872f5.png)

### Bookinfo のサンプルアプリケーションのデプロイ
- 以下のコマンドを実行し、サービスメッシュに参加させたプロジェクトにBookinfoサンプルアプリケーションをデプロイ

```
PS D:\git> oc apply -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/platform/kube/bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
PS D:\git>
```

-  Ingressゲートウェイの作成

```
PS D:\git> oc apply -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
PS D:\git>
```


- デフォルトの宛先ルールの追加

```
PS D:\git> oc apply -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.0/samples/bookinfo/networking/destination-rule-all.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
PS D:\git>
```

### 稼働確認

- istio-systemのRouteを取得

```
PS D:\git> oc get route -n istio-system
NAME                   HOST/PORT                                                                                                                     PATH   SERVICES               PORT    TERMINATION          WILDCARD
grafana                grafana-istio-system.dte-ocp46-8uvivd-915b3b336cabec458a7c7ec2aa7c625f-0000.us-east.containers.appdomain.cloud                       grafana                <all>   reencrypt/Redirect   None
istio-ingressgateway   istio-ingressgateway-istio-system.dte-ocp46-8uvivd-915b3b336cabec458a7c7ec2aa7c625f-0000.us-east.containers.appdomain.cloud          istio-ingressgateway   8080                         None
jaeger                 jaeger-istio-system.dte-ocp46-8uvivd-915b3b336cabec458a7c7ec2aa7c625f-0000.us-east.containers.appdomain.cloud                        jaeger-query           <all>   reencrypt            None
kiali                  kiali-istio-system.dte-ocp46-8uvivd-915b3b336cabec458a7c7ec2aa7c625f-0000.us-east.containers.appdomain.cloud                         kiali                  <all>   reencrypt/Redirect   None
prometheus             prometheus-istio-system.dte-ocp46-8uvivd-915b3b336cabec458a7c7ec2aa7c625f-0000.us-east.containers.appdomain.cloud                    prometheus             <all>   reencrypt/Redirect   None
PS D:\git>
```

- ブラウザから以下のアドレスにアクセスする
    - http://取得したistio-ingressgatewayのHOST/PORT/productpage

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/d13f2101-869c-d099-2502-9bc5a7dacd2a.png)
Bookinfoの画面が表示されればOK
なお、前日のistio-systemの各RouteからGrafana、Jaeger、Kiali、Prometheusの各UIにアクセスできる。

KialiのコンソールにアクセスすることでBookinfoの各サービスのルーティング情報がよくわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5259/3937d881-ff8e-7fd3-3ccc-296fa459e664.png)