メッシュの可視化
このタスクでは、Istioメッシュのさまざまな側面を可視化する方法を示します。
このタスクでは、Kialiアドオンをインストールし、Webベースのグラフィカルユーザーインターフェースを使用して、メッシュのサービスグラフとIstio設定オブジェクトを表示します。
このタスクでは、Bookinfoサンプルアプリケーションを例として使用します。このタスクでは、Bookinfoアプリケーションがbookinfo
名前空間にインストールされていることを前提としています。
始める前に
Kialiのインストールドキュメントに従って、Kialiをクラスタにデプロイしてください。
グラフの生成
クラスタでサービスが実行されていることを確認するには、次のコマンドを実行します。
$ kubectl -n istio-system get svc kiali
BookinfoのURLを確認するには、Bookinfoイングレスの
GATEWAY_URL
を確認するための手順に従ってください。メッシュにトラフィックを送信するには、3つのオプションがあります。
Webブラウザで
http://$GATEWAY_URL/productpage
にアクセスします。以下のコマンドを複数回実行します。
$ curl http://$GATEWAY_URL/productpage
システムに
watch
コマンドがインストールされている場合は、以下のようにして継続的にリクエストを送信します。$ watch -n 1 curl -o /dev/null -s -w %{http_code} $GATEWAY_URL/productpage
Kiali UIを開くには、Kubernetes環境で以下のコマンドを実行します。
$ istioctl dashboard kiali
ログイン直後に表示される**概要**ページでメッシュの概要を確認します。**概要**ページには、メッシュ内にサービスを持つすべての名前空間が表示されます。以下のスクリーンショットは同様のページを示しています。
概要の例 名前空間グラフを表示するには、Bookinfo概要カードのケバブメニューで
Graph
オプションを選択します。ケバブメニューはカードの右上にあり、3つの縦に並んだドットのように見えます。クリックして利用可能なオプションを確認します。ページは以下に似ています。グラフの例 グラフは、一定期間におけるサービスメッシュを通過するトラフィックを表しています。Istioテレメトリを使用して生成されます。
メトリクスのサマリーを表示するには、グラフ内のノードまたはエッジを選択して、右側のサマリー詳細パネルにメトリックの詳細を表示します。
異なるグラフの種類を使用してサービスメッシュを表示するには、**グラフの種類**ドロップダウンメニューからグラフの種類を選択します。選択できるグラフの種類はいくつかあります。**アプリケーション**、**バージョン付きアプリケーション**、**ワークロード**、**サービス**です。
**アプリケーション**グラフの種類は、アプリケーションのすべてのバージョンを単一のグラフノードに集約します。次の例は、reviewsアプリケーションの3つのバージョンを表す単一の**reviews**ノードを示しています。
Show Service Nodes
表示オプションが無効になっていることに注意してください。アプリケーショングラフの例 **バージョン付きアプリケーション**グラフの種類は、アプリケーションの各バージョンごとにノードを表示しますが、特定のアプリケーションのすべてのバージョンはグループ化されます。次の例は、reviewsアプリケーションの3つのバージョンを表す3つのノードを含む**reviews**グループボックスを示しています。
バージョン付きアプリケーショングラフの例 **ワークロード**グラフの種類は、サービスメッシュ内の各ワークロードごとにノードを表示します。このグラフの種類では、
app
ラベルとversion
ラベルを使用する必要がないため、コンポーネントにこれらのラベルを使用しないことを選択した場合、これが最適なグラフの種類になる可能性があります。ワークロードグラフの例 **サービス**グラフの種類は、メッシュ内のサービストラフィックの高レベルな集約を示します。
サービスグラフの例
Istio設定の調査
左側のメニューオプションは、**アプリケーション**、**ワークロード**、**サービス**、**Istio構成**のリストビューにつながります。次のスクリーンショットは、Bookinfo名前空間の**サービス**情報を示しています。
詳細の例
トラフィックシフト
Kialiトラフィックシフトウィザードを使用して、2つ以上のワークロードにルーティングするリクエストトラフィックの特定の割合を定義できます。
bookinfo
グラフの**バージョン付きアプリケーショングラフ**を表示します。各ワークロードにルーティングされるトラフィックの割合を表示するには、**トラフィック分散**エッジラベル**表示**オプションが有効になっていることを確認します。
グラフにサービスノードを表示するには、**サービスノードの表示**オプションが有効になっていることを確認します。
Bookinfoグラフオプション ratings
サービス(三角形)ノードをクリックして、bookinfo
グラフ内のratings
サービスに焦点を当てます。ratings
サービスのトラフィックは、2つのratings
ワークロードv1
とv2
に均等に分散されていることに注意してください(リクエストの50%が各ワークロードにルーティングされます)。トラフィックの割合を示すグラフ サイドパネルにある**ratings**リンクをクリックして、
ratings
サービスの詳細ビューに移動します。これは、ratings
サービスノードを右クリックして、コンテキストメニューからDetails
を選択することでも実行できます。**アクション**ドロップダウンメニューから**トラフィックシフト**を選択して、トラフィックシフトウィザードにアクセスします。
サービスアクションメニュー スライダーをドラッグして、各ワークロードにルーティングするトラフィックの割合を指定します。
ratings-v1
は10%、ratings-v2
は90%に設定します。重み付けルーティングウィザード **プレビュー**ボタンをクリックして、ウィザードによって生成されるYAMLを表示します。
ルーティングウィザードプレビュー **作成**ボタンをクリックして確認し、新しいトラフィック設定を適用します。
左側のナビゲーションバーで**グラフ**をクリックして、
bookinfo
グラフに戻ります。ratings
サービスノードにvirtual service
アイコンが付いていることに注意してください。bookinfo
アプリケーションにリクエストを送信します。たとえば、1秒間に1つのリクエストを送信するには、システムにwatch
がインストールされている場合、このコマンドを実行できます。$ watch -n 1 curl -o /dev/null -s -w %{http_code} $GATEWAY_URL/productpage
数分後、トラフィックの割合が新しいトラフィックルートを反映していることに気付くでしょう。これにより、新しいトラフィックルートがすべてのトラフィックリクエストの90%を
ratings-v2
に正常にルーティングしていることが確認されます。90%のratingsトラフィックがratings-v2にルーティングされました。
Istio設定の検証
KialiはIstioリソースを検証して、適切な規則とセマンティクスに従っていることを確認できます。Istioリソースの構成で検出された問題は、不適切な構成の重大度に応じて、エラーまたは警告としてフラグ付けされます。Kialiが実行するすべての検証チェックのリストについては、Kiali検証ページを参照してください。
サービスポート名の無効な構成を強制して、Kialiが検証エラーをどのように報告するかを確認します。
details
サービスのポート名をhttp
からfoo
に変更します。$ kubectl patch service details -n bookinfo --type json -p '[{"op":"replace","path":"/spec/ports/0/name", "value":"foo"}]'
左側のナビゲーションバーで**サービス**をクリックして、**サービス**リストに移動します。
まだ選択されていない場合は、**名前空間**ドロップダウンメニューから
bookinfo
を選択します。details
行の**構成**列に表示されるエラーアイコンに注意してください。無効な構成を示すサービスリスト **名前**列の**details**リンクをクリックして、サービス詳細ビューに移動します。
エラーアイコンの上にカーソルを置くと、エラーを説明するツールチップが表示されます。
無効な構成を説明するサービス詳細 ポート名を
http
に戻して構成を修正し、bookinfo
を元の状態に戻します。$ kubectl patch service details -n bookinfo --type json -p '[{"op":"replace","path":"/spec/ports/0/name", "value":"http"}]'
有効な構成を示すサービス詳細
Istio設定YAMLの表示と編集
Kialiは、Istio構成リソースの表示と編集のためのYAMLエディターを提供します。YAMLエディターは、不適切な構成を検出した場合にも検証メッセージを提供します。
bookinfo
VirtualServiceにエラーを導入します。$ kubectl patch vs bookinfo -n bookinfo --type json -p '[{"op":"replace","path":"/spec/gateways/0", "value":"bookinfo-gateway-invalid"}]'
左側のナビゲーションバーで
Istio Config
をクリックして、Istio構成リストに移動します。まだ選択されていない場合は、**名前空間**ドロップダウンメニューから
bookinfo
を選択します。構成の問題を警告するエラーアイコンに注意してください。
不適切な構成を示すIstio構成リスト bookinfo
行の**構成**列にあるエラーアイコンをクリックして、bookinfo
仮想サービスビューに移動します。**YAML**タブが事前に選択されています。検証チェック通知が関連付けられている行の色強調表示とアイコンに注意してください。
検証通知を示すYAMLエディター 赤いアイコンの上にカーソルを置くと、エラーをトリガーした検証チェックを知らせるツールチップメッセージが表示されます。エラーの原因と解決方法の詳細については、Kiali検証ページで検証エラーメッセージを検索してください。
エラーツールチップを示すYAMLエディター 仮想サービス
bookinfo
を元の状態にリセットします。$ kubectl patch vs bookinfo -n bookinfo --type json -p '[{"op":"replace","path":"/spec/gateways/0", "value":"bookinfo-gateway"}]'
追加機能
Kialiには、このタスクで確認した以外にも多くの機能があります。たとえば、Jaeger tracingとの統合などがあります。
これらの追加機能の詳細については、Kialiドキュメントを参照してください。
Kialiをより深く探求するには、Kialiチュートリアルを実行することをお勧めします。
クリーンアップ
フォローアップタスクを計画していない場合は、BookinfoサンプルアプリケーションとKialiをクラスタから削除します。
Bookinfoアプリケーションを削除するには、Bookinfoクリーンアップ手順を参照してください。
Kubernetes環境からKialiを削除するには
$ kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.24/samples/addons/kiali.yaml