IstioとKubernetesでカナリアを展開する方法

前書き

サービスの新しいバージョンを導入する場合、古いバージョンを段階的に廃止する過程で、ユーザートラフィックの制御された割合を新しいバージョンのサービスにシフトすることが望ましい場合がよくあります。 この手法は、「カナリアデプロイメント」と呼ばれます。

Kubernetesクラスターオペレーターは、https://kubernetes.io/docs/concepts/overview/workingを使用してhttps://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/#canary-deployments[canary deployments]をネイティブにオーケストレーションできます。 -with-objects / labels / [labels]およびhttps://kubernetes.io/docs/concepts/workloads/controllers/deployment/[Deployments]。 ただし、この手法には一定の制限があります。トラフィックの分散とレプリカのカウントは連動しているため、実際には、カナリアリリースへのトラフィックを制限するにはレプリカの比率を手動で制御する必要があります。 つまり、トラフィックの10%をカナリア展開に向けるには、10個のポッドのプールが必要であり、1つのポッドがユーザートラフィックの10%を受信し、他の9つのポッドが残りを受信する必要があります。

Istioサービスメッシュを使用して展開すると、レプリカ数とトラフィック管理を明確に分離できるため、この問題に対処できます。 Istioメッシュにより、トラフィックの分散と管理をレプリカのスケーリングから切り離すきめ細かいトラフィック制御が可能になります。 レプリカの比率を手動で制御する代わりに、トラフィックの割合とターゲットを定義でき、Istioが残りを管理します。

このチュートリアルでは、IstioとKubernetesを使用してカナリアデプロイメントを作成します。 デモhttps://nodejs.org/[Node.js]アプリケーションの2つのバージョンをデプロイし、https://istio.io/docs/reference/config/networking/v1alpha3/virtual-service/ [Virtual Service ]およびhttps://istio.io/docs/reference/config/networking/v1alpha3/destination-rule/[Destination Rule]リソースを使用して、新しいバージョンと古いバージョンの両方へのトラフィックルーティングを構成します。 これは、Istioで将来のカナリア展開を構築するための良い出発点になります。

前提条件

  • 役割ベースのアクセス制御(RBAC)が有効になっているKubernetes 1.10+クラスター。 このセットアップでは、3つのノードを持つhttps://www.digitalocean.com/products/kubernetes/[DigitalOcean Kubernetesクラスター]を使用しますが、https://www.digitalocean.com/community/tutorials/how-toは自由です。 -create-a-kubernetes-1-11-cluster-using-kubeadm-on-ubuntu-18-04 [別の方法を使用してクラスターを作成]。

  • 開発サーバーにインストールされ、クラスターに接続するように設定されたコマンドラインツール「+ kubectl 」。 ` kubectl +`のインストールの詳細については、https://kubernetes.io/docs/tasks/tools/install-kubectl/ [公式ドキュメント]をご覧ください。

  • 開発サーバーにインストールされたhttps://www.docker.com/[Docker]。 Ubuntu 18.04を使用している場合は、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04 [How To]のステップ1および2に従ってください。 Ubuntu 18.04にDockerをインストールして使用する];それ以外の場合は、https://docs.docker.com/install/ [公式ドキュメント]に従って他のオペレーティングシステムへのインストールに関する情報を確認してください。 リンクされたチュートリアルのステップ2で説明されているように、必ず非ルートユーザーを `+ docker +`グループに追加してください。

  • Docker Hubアカウント。 この設定方法の概要については、Docker Hubのhttps://docs.docker.com/docker-hub/ [この概要]を参照してください。

  • Istioは、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-istio-with-kubernetes [KubernetesでIstioをインストールおよび使用する方法]の指示に従ってインストールおよび構成しました。 また、https://grafana.com/ [Grafana]テレメトリーアドオンを有効にして、外部アクセス用に構成する必要があります。

ステップ1-アプリケーションのパッケージ化

前提条件のチュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-and-use-istio-with-kubernetes[IstioとKubernetesをインストールして使用する方法]では、https:// www.digitalocean.com/community/tutorials/how-to-install-and-use-istio#step-1-%E2%80%94-packaging-the-application [+ node-demo + Dockerイメージを作成]サメ情報アプリケーションを実行し、このイメージをDocker Hubにプッシュします。 このステップでは、別のイメージを作成します。これは、カナリアのデプロイメントに使用するアプリケーションの新しいバージョンです。

元のデモアプリケーションでは、* Shark Info *ページでサメに関するわかりやすい事実を強調しました。

image:https://assets.digitalocean.com/articles/docker_node_image/sharks.png [サメ情報ページ]

しかし、新しいカナリアバージョンでは、より恐ろしい事実を強調することにしました。

image:https://assets.digitalocean.com/articles/istio_canary/scary_sharks.png [Scary Shark Info Page]

最初のステップは、この2番目のバージョンのアプリケーションのコードを「++」というディレクトリに複製することです。 次のコマンドを使用して、https://github.com/do-community [DigitalOcean Communityからhttps://github.com/do-community/nodejs-canary-app.git[nodejs-canary-app repository]を複製しますGitHubアカウント]。 このリポジトリには、アプリケーションの2番目の恐ろしいバージョンのコードが含まれています。

git clone https://github.com/do-community/nodejs-canary-app.git

`++`ディレクトリに移動します:

cd

このディレクトリには、サメ情報アプリケーションの新しいバージョン用のファイルとフォルダが含まれています。このアプリケーションは、元のアプリケーションと同様に、恐ろしい事実に重点を置いて、サメに関する情報をユーザーに提供します。 ディレクトリには、アプリケーションファイルに加えて、アプリケーションコードを使用してDockerイメージを構築するための手順を含むDockerfileが含まれています。 Dockerfileの指示の詳細については、https://www.digitalocean.com/community/tutorials/how-to-build-a-node-js-application-with-docker#step-3-%E2%を参照してください80%94-writing-the-dockerfile [DockerでNode.jsアプリケーションを構築する方法のステップ3]。

アプリケーションコードとDockerfileが期待どおりに動作することをテストするには、https://docs.docker.com/engine/reference/commandline/build/ [+ docker build +]コマンドを使用してイメージをビルドし、タグ付けしてから、画像を使用してデモコンテナを実行します。 + docker build`で + -t + `フラグを使用すると、イメージにDocker Hubユーザー名をタグ付けできるため、テスト後にDocker Hubにプッシュできます。

次のコマンドでイメージをビルドします。

docker build -t / .

コマンドの「。」は、ビルドコンテキストが現在のディレクトリであることを指定します。 「+ node-demo 」画像を参照するために、画像に「+」という名前を付けましたhttps://www.digitalocean.com/community/tutorials/how-to-install-and-use-istio#step-1 -%E2%80%94-packaging-the-application [作成済み] How To KubernetesでのIstioのインストールと使用]。

ビルドプロセスが完了すると、https://docs.docker.com/engine/reference/commandline/images/ [+ docker images +]で画像を一覧表示できます。

docker images

イメージのビルドを確認する次の出力が表示されます。

OutputREPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
/  latest              37f1c2939dbf        5 seconds ago       77.6MB
node                                  10-alpine           9dfa73010b19        2 days ago          75.3MB

次に、 `+ docker run +`を使用して、この画像に基づいてコンテナーを作成します。 このコマンドには3つのフラグが含まれます。

  • + -p +:これはコンテナ上のポートを公開し、ホスト上のポートにマッピングします。 ホストではポート「80」を使用しますが、そのポートで別のプロセスを実行している場合は、必要に応じて自由に変更してください。 これがどのように機能するかについての詳細は、https://docs.docker.com/v17.09/engine/userguide/networking/default_network/binding/ [ポートバインディング]のDockerドキュメントのこの説明を参照してください。

  • + -d +:これはバックグラウンドでコンテナを実行します。

  • +-name +:これにより、コンテナにカスタマイズした名前を付けることができます。

次のコマンドを実行して、コンテナを構築します。

docker run --name  -p 80:8080 -d /

`+docker ps + `で実行中のコンテナを検査します。

docker ps

アプリケーションコンテナが実行されていることを確認する出力が表示されます。

OutputCONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS              PORTS                  NAMES
49a67bafc325        /   "docker-entrypoint.s…"   8 seconds ago       Up 6 seconds        0.0.0.0:80->8080/tcp

ブラウザでサーバーIPにアクセスして、設定をテストできます: + http:// +。 アプリケーションには、次のランディングページが表示されます。

image:https://assets.digitalocean.com/articles/docker_node_image/landing_page.png [アプリケーションのランディングページ]

*サメの情報を取得*ボタンをクリックして、より恐ろしいサメの情報を取得します。

image:https://assets.digitalocean.com/articles/istio_canary/scary_sharks.png [Scary Shark Info Page]

アプリケーションをテストしたので、実行中のコンテナを停止できます。 もう一度 `+ docker ps `を使用して、 ` CONTAINER ID +`を取得します。

docker ps
OutputCONTAINER ID        IMAGE                                  COMMAND                  CREATED              STATUS              PORTS                  NAMES
49a67bafc325        /   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:80->8080/tcp

https://docs.docker.com/engine/reference/commandline/stop/[`docker stop + `]でコンテナを停止します。 ここにリストされている ` CONTAINER ID `を独自のアプリケーション ` CONTAINER ID +`に置き換えてください:

docker stop

イメージをテストしたので、Docker Hubにプッシュできます。 まず、前提条件で作成したDocker Hubアカウントにログインします。

docker login -u

プロンプトが表示されたら、Docker Hubアカウントのパスワードを入力します。 この方法でログインすると、Docker Hubの資格情報を使用して、非ルートユーザーのホームディレクトリに `+〜/ .docker / config.json +`ファイルが作成されます。

https://docs.docker.com/engine/reference/commandline/push/[`docker push + `command]を使用して、アプリケーションイメージをDocker Hubにプッシュします。 `+`を自分のDocker Hubユーザー名に置き換えることを忘れないでください:

docker push /

これで、Docker Hubに2つのアプリケーションイメージが保存されました: + node-demo +`イメージと `++。 前提条件チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-install-and-use-istio-with-kubernetes[KubernetesでIstioをインストールして使用する方法]で作成したマニフェストを変更します。 ]アプリケーションのカナリアバージョンにトラフィックを誘導します。

手順2-アプリケーションの展開の変更

KubernetesでIstioをインストールおよび使用する方法で、アプリケーションhttps:// kubernetesを作成しました.io / docs / concepts / cluster-administration / manage-deployment /#organizing-resource-configurations [manifest] with specifications with your application https://kubernetes.io/docs/concepts/services-networking/service/ [サービス]およびhttps://kubernetes.io/docs/concepts/workloads/controllers/deployment/[Deployment]オブジェクト。 これらの仕様は、各オブジェクトの望ましい状態を説明しています。 このステップでは、Istioがこれらのリソースを管理できるようにするバージョンラベルとともに、アプリケーションの2番目のバージョンのデプロイメントをこのマニフェストに追加します。

前提条件のチュートリアルのセットアップ手順に従って、 + istio_project +`というディレクトリと2つの `+ yaml +`マニフェストを作成しました。+ node-app.yaml + `には、サービスおよびデプロイメントオブジェクトの仕様が含まれ、 + node-istio.yaml + `。IstioVirtual ServiceおよびGatewayリソースの仕様が含まれています。

今すぐ `+ istio_project +`ディレクトリに移動します:

cd
cd istio_project

アプリケーションのマニフェストを変更するには、「+ nano 」またはお気に入りのエディターで「 node-app.yaml +」を開きます。

nano node-app.yaml

現在、ファイルは次のようになっています。

〜/ istio_project / node-app.yaml

apiVersion: v1
kind: Service
metadata:
 name: nodejs
 labels:
   app: nodejs
spec:
 selector:
   app: nodejs
 ports:
 - name: http
   port: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nodejs
 labels:
   version: v1
spec:
 replicas: 1
 selector:
   matchLabels:
     app: nodejs
 template:
   metadata:
     labels:
       app: nodejs
       version: v1
   spec:
     containers:
     - name: nodejs
       image: /node-demo
       ports:
       - containerPort: 8080

このファイルの内容の詳細については、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-istio#step-3-%E2%80%94-creating-applicationを参照してください-objects [ステップ3] KubernetesでIstioをインストールして使用する方法

Istioのポッドとサービスに関する推奨事項に従って、Deploymentの `+ metadata `および ` template `フィールドにバージョンラベルを既に含めています。 これで、アプリケーションの2番目のバージョンを表す2番目のDeploymentオブジェクトの仕様を追加し、最初のDeploymentオブジェクトの ` name +`を簡単に変更できます。

最初に、既存のDeploymentオブジェクトの名前を `+ nodejs +`に変更します。

〜/ istio_project / node-app.yaml

...
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nodejs
 labels:
   version: v1
...

次に、この展開の仕様の下に、2番目の展開の仕様を追加します。 独自の画像の名前を `+ image +`フィールドに忘れずに追加してください:

〜/ istio_project / node-app.yaml

...
---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nodejs-v2
 labels:
   version: v2
spec:
 replicas: 1
 selector:
   matchLabels:
     app: nodejs
 template:
   metadata:
     labels:
       app: nodejs
       version: v2
   spec:
     containers:
     - name: nodejs
       image: /node-demo-v2
       ports:
       - containerPort: 8080

最初のデプロイメントと同様に、このデプロイメントは `+ version `ラベルを使用して、このデプロイメントに対応するアプリケーションのバージョンを指定します。 この場合、 ` v2 `はこのデプロイメントに関連付けられたアプリケーションバージョンを、最初のデプロイメントに対応する ` v1 +`と区別します。

また、 `+ v2 `デプロイメントで管理されるhttps://kubernetes.io/docs/concepts/workloads/pods/pod/[Pods]が ` node-demo-v2 +`カナリアイメージを実行することを確認しました。前のステップで作成しました。

編集が終了したら、ファイルを保存して閉じます。

アプリケーションマニフェストを変更したら、 `+ node-istio.yaml +`ファイルに変更を加えることができます。

ステップ3-仮想サービスを使用したトラフィックの重み付けと宛先ルールの追加

KubernetesでIstioをインストールして使用する方法で、許可するゲートウェイおよび仮想サービスオブジェクトを作成しました外部トラフィックをIstioメッシュに入力し、アプリケーションサービスにルーティングします。 ここでは、仮想サービスの設定を変更して、アプリケーションサービスサブセット(「+ v1 」および「 v2 +」)へのルーティングを含めます。 また、https://istio.io/docs/reference/config/networking/v1alpha3/destination-rule/ [Destination Rule]を追加して、 `+に適用するルーティングルールに追加のバージョンベースのポリシーを定義します。 nodejs + `アプリケーションサービス。

`+ node-istio.yaml +`ファイルを開きます:

nano node-istio.yaml

現在、ファイルは次のようになっています。

〜/ istio_project / node-istio.yaml

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
 name: nodejs-gateway
spec:
 selector:
   istio: ingressgateway
 servers:
 - port:
     number: 80
     name: http
     protocol: HTTP
   hosts:
   - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: nodejs
spec:
 hosts:
 - "*"
 gateways:
 - nodejs-gateway
 http:
 - route:
   - destination:
       host: nodejs

このマニフェストの仕様の完全な説明については、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-istio#step-4-%E2%80%94-creatingを参照してください-istio-objects [ステップ4] IstioをKubernetesでインストールおよび使用する方法

最初の変更は、仮想サービスに対するものです。 現在、このリソースは、メッシュに入るトラフィックを「+ nodejs-gateway」を介して「+ nodejs」アプリケーションサービスにルーティングします。 やりたいことは、トラフィックの80%を元のアプリケーションに送信し、20%を新しいバージョンに送信するルーティングルールを構成することです。 カナリアのパフォーマンスに満足したら、すべてのトラフィックを徐々に新しいアプリケーションバージョンに送信するようにトラフィックルールを設定できます。

元のマニフェストで行ったように、単一の + destination +`にルーティングする代わりに、両方のアプリケーションサブセット(元のバージョン( `+ v1 +)とカナリア( `+ v2 + `)。

このルーティングルールを作成するには、仮想サービスに次の追加を行います。

〜/ istio_project / node-istio.yaml

...
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
 name: nodejs
spec:
 hosts:
 - "*"
 gateways:
 - nodejs-gateway
 http:
 - route:
   - destination:
       host: nodejs

追加したポリシーには、2つの宛先が含まれます。アプリケーションの元のバージョンを実行している「+ nodejs 」サービスの「 subset 」、「 v1 」、およびカナリアを実行している「 subset +」、 + v2 + `。 サブセット1は着信トラフィックの80%を受け取り、カナリアは20%を受け取ります。

次に、トラフィックが適切なサービスにルーティングされた後に着信トラフィックにルールを適用する宛先ルールを追加します。 私たちの場合、 `+ subset +`フィールドを設定して、適切なバージョンラベルでポッドにトラフィックを送信します。

仮想サービス定義の下に次のコードを追加します。

〜/ istio_project / node-istio.yaml

...
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 name: nodejs
spec:
 host: nodejs
 subsets:
 - name: v1
   labels:
     version: v1
 - name: v2
   labels:
     version: v2

ルールは、サービスサブセットである「+ v1 」および「 v2 」へのトラフィックが、適切なラベル「 version:v1 」および「 version:v2 +」でポッドに到達するようにします。 これらは、アプリケーションの展開仕様に含まれているラベルです。

ただし、必要に応じて、サブセットレベルで特定のトラフィックポリシーを適用することもできます。これにより、カナリアの展開をさらに詳細に行うことができます。 このレベルでのトラフィックポリシーの定義に関する追加情報については、https://istio.io/docs/reference/config/networking/v1alpha3/destination-rule/#Subset [公式Istioドキュメント]を参照してください。

編集が終了したら、ファイルを保存して閉じます。

アプリケーションマニフェストを修正したら、Grafanaテレメトリアドオンを使用して、構成の変更を適用し、アプリケーショントラフィックデータを調べる準備ができました。

ステップ4-構成変更の適用とトラフィックデータへのアクセス

アプリケーションマニフェストは更新されますが、これらの変更をKubernetesクラスターに適用する必要があります。 `+kubectl apply + `コマンドを使用して、既存の構成を完全に上書きせずに変更を適用します。 これを実行すると、アプリケーションへのリクエストを生成し、Istio Grafanaダッシュボードで関連データを確認できるようになります。

構成をアプリケーションのServiceおよびDeploymentオブジェクトに適用します。

kubectl apply -f node-app.yaml

次の出力が表示されます。

Outputservice/nodejs unchanged
deployment.apps/nodejs-v1 created
deployment.apps/nodejs-v2 created

次に、作成した設定の更新を「+ node-istio.yaml +」に適用します。これには、仮想サービスへの変更と新しい宛先ルールが含まれます。

kubectl apply -f node-istio.yaml

次の出力が表示されます。

Outputgateway.networking.istio.io/nodejs-gateway unchanged
virtualservice.networking.istio.io/nodejs configured
destinationrule.networking.istio.io/nodejs created

これで、アプリケーションへのトラフィックを生成する準備ができました。 ただし、それを行う前に、まず、 `+ grafana +`サービスが実行されていることを確認してください。

kubectl get svc -n istio-system | grep grafana
Outputgrafana                  ClusterIP      10.245.233.51    <none>           3000/TCP                                                                                                                                     4d2h

関連するポッドも確認してください。

kubectl get svc -n istio-system | grep grafana
Outputgrafana-67c69bb567-jpf6h                 1/1     Running     0          4d2h

最後に、「+ grafana-gateway 」ゲートウェイと「 grafana-vs +」仮想サービスを確認します。

kubectl get gateway -n istio-system | grep grafana
Outputgrafana-gateway   3d5h
kubectl get virtualservice -n istio-system | grep grafana
Outputgrafana-vs   [grafana-gateway]   [*]     4d2h

これらのコマンドからの出力が表示されない場合は、ステップhttps://www.digitalocean.com/community/tutorials/how-to-install-and-use-istio#step-2-%E2%80%94-を確認してくださいinstallation-istio-with-helm [2]およびhttps://www.digitalocean.com/community/tutorials/how-to-install-and-use-istio#step-5-%E2%80%94-creating- https://www.digitalocean.com/community/tutorials/how-to-install-and-use-istio-with-kubernetes [インストールと使用方法]のapplication-resources-and-enabling-telemetry-access [5] Istio With Kubernetes]。Istioのインストール時にGrafanaテレメトリアドオンを有効にする方法と、GrafanaサービスへのHTTPアクセスを有効にする方法について説明しています。

ブラウザでアプリケーションにアクセスできるようになりました。 これを行うには、https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer [LoadBalancer Service type]である `+ istio-ingressgateway +`サービスに関連付けられた外部IPが必要です。 How KubernetesでIstioをインストールして使用するには。 Gatewayマニフェストの詳細については、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-istio#step-4-%E2%80%94-creating-istio-を参照してください。そのチュートリアルのオブジェクト[ステップ4]。

次のコマンドを使用して、 `+ istio-ingressgateway +`サービスの外部IPを取得します。

kubectl get svc -n istio-system

次のような出力が表示されます。

OutputNAME                     TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)                                                                                                                                      AGE
grafana                  ClusterIP      10.245.85.162    <none>            3000/TCP                                                                                                                                     42m
istio-citadel            ClusterIP      10.245.135.45    <none>            8060/TCP,15014/TCP                                                                                                                           42m
istio-galley             ClusterIP      10.245.46.245    <none>            443/TCP,15014/TCP,9901/TCP                                                                                                                   42m
istio-ingressgateway        10.245.171.39     15020:30707/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:30285/TCP,15030:31668/TCP,15031:32297/TCP,15032:30853/TCP,15443:30406/TCP   42m
istio-pilot              ClusterIP      10.245.56.97     <none>            15010/TCP,15011/TCP,8080/TCP,15014/TCP                                                                                                       42m
istio-policy             ClusterIP      10.245.206.189   <none>            9091/TCP,15004/TCP,15014/TCP                                                                                                                 42m
istio-sidecar-injector   ClusterIP      10.245.223.99    <none>            443/TCP                                                                                                                                      42m
istio-telemetry          ClusterIP      10.245.5.215     <none>            9091/TCP,15004/TCP,15014/TCP,42422/TCP                                                                                                       42m
prometheus               ClusterIP      10.245.100.132   <none>            9090/TCP                                                                                                                                     42m

+ istio-ingress gateway`は、 + TYPE` `+ LoadBalancer`を持つ唯一のサービスであり、外部IPを持つ唯一のサービスでなければなりません。

ブラウザで次の外部IPに移動します: + http:// +

次のランディングページが表示されます。

image:https://assets.digitalocean.com/articles/docker_node_image/landing_page.png [アプリケーションのランディングページ]

  • Get Shark Info *ボタンをクリックします。 次の2つのサメ情報ページのいずれかが表示されます。

image:https://assets.digitalocean.com/articles/docker_node_image/sharks.png [サメ情報ページ]

image:https://assets.digitalocean.com/articles/istio_canary/scary_sharks.png [Scary Shark Info Page]

このページで[更新]を数回クリックします。 恐ろしいバージョンよりも、より親しみやすいサメ情報ページが表示されるはずです。

5回または6回更新して負荷を生成したら、Grafanaダッシュボードに移動できます。

ブラウザで、再び「+ istio-ingressgateway 」外部IPとGrafana Gatewayマニフェストで定義されているポート「 http:// +」を使用して、次のアドレスに移動します。

次のランディングページが表示されます。

画像:https://assets.digitalocean.com/articles/istio_install/grafana_home.png [Grafana Home Dash]

ページ上部の[* Home ]をクリックすると、 istio フォルダーのあるページが表示されます。 ドロップダウンオプションのリストを取得するには、 istio *フォルダーアイコンをクリックします。

image:https://assets.digitalocean.com/articles/istio_install/istio_dropdown.png [Istio Dashオプションドロップダウンメニュー]

このオプションのリストから、* Istio Service Dashboard *をクリックします。

これにより、別のドロップダウンメニューのあるランディングページが表示されます。

image:https://assets.digitalocean.com/articles/istio_install/service_dropdown.png [Istio Service Dashのサービスドロップダウン]

利用可能なオプションのリストから「+ nodejs.default.svc.cluster.local +」を選択します。

ページの* Service Workloads *セクションに移動すると、*宛先および応答コードごとの着信要求*を確認できます。

image:https://assets.digitalocean.com/articles/istio_canary/service_workloads_dash.png [サービスワークロードダッシュボード]

ここでは、200および304のHTTP応答コードの組み合わせが表示され、成功した `+ OK `および ` Not Modified `応答を示します。 「 nodejs-v1 」というラベルの付いた応答は、「 nodejs-v2 +」というラベルの付いた応答よりも多く、マニフェストで定義したパラメーターに従って着信トラフィックがアプリケーションのサブセットにルーティングされていることを示します。

結論

このチュートリアルでは、IstioとKubernetesを使用して、デモ版Node.jsアプリケーションのカナリアバージョンをデプロイしました。 仮想サービスと宛先ルールのリソースを作成して、トラフィックの80%を元のアプリケーションサービスに送信し、20%を新しいバージョンに送信できるようにしました。 新しいアプリケーションバージョンのパフォーマンスに満足したら、必要に応じて構成設定を更新できます。

Istioのトラフィック管理の詳細については、ドキュメントの関連するhttps://istio.io/docs/concepts/traffic-management/ [高レベルの概要]およびIstioのhttps://を使用する特定の例を参照してください。 istio.io/docs/tasks/traffic-management/traffic-shifting/ [+ bookinfo +]およびhttps://istio.io/blog/2017/0.1-canary/ [+ helloworld +]サンプルアプリケーション。

Related