はじめに
サービスメッシュを担うOSSであるIstioですが、アドオンとしてKialiをクラスターにインストールできます。
本記事では実際にサンプルプログラムをKialiで可視化した流れについて記載しました。
環境情報
- IKS v1.18.13
- Debian GNU/Linux 9
- istio-1.10.3
事前準備
Istio関連をKubernetesクラスターにインストールし
# curl -L https://istio.io/downloadIstio | sh -
# ~/istio-1.10.3# ./bin/istioctl install --set profile=demo -y ✔ Istio core installed ✔ Istiod installed ✔ Egress gateways installed ✔ Ingress gateways installed ✔ Installation complete
名前空間defaultには自動的にIstio仕様にするようにラベルを変更します。
# kubectl label namespace default istio-injection=enabled namespace/default labeled
尚、手動でIstioを介したい場合は以下記事の手順でYAMLを変換することも可能です。
あとは以下でPodとServiceを展開すると
~/istio-1.10.3 # kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml ~/istio-1.10.3 # kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
virtualserviceにて以下のように定義されているので
route: - destination: host: productpage ...
確かにアクセスができます。
$ curl http://XX:32058/productpage <!DOCTYPE html> <html> <head> <title>Simple Bookstore App</title>...
Kialiの導入
Istioのインストーラの中にアドオンがあるのでこれを展開すると
~/istio-1.10.3# kubectl apply -f samples/addons
Kialiのサービスが起動します。
$ kubectl get service -n istio-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ... kiali ClusterIP 172.21.112.14 <none> 20001/TCP,9090/TCP
今回はポートフォワードでローカルからアクセスできるようにしてブラウザを開くと
$ kubectl -n istio-system port-forward service/kiali 20001:20001
メニュー欄で「Graph」を選ぶと以下のようにサービス群がGUIに表示されます。
試しに一部のPodをエラーにすると
# kubectl get pod NAME READY STATUS RESTARTS AGE details-v1-7d557df78-xk2z7 1/2 InvalidImageName 0 xx
該当するサービス箇所が赤線で囲まれて影響を把握できます。
終わりに
Kialiはサービスメッシュトポロジーを可視化することで、今どのサービスにアクセスが流れているのかであったりサーキットブレーカーが起きていないかなどが見える化できます。
アプリケーションの健全性をサクッと確認する場合には便利なので、Istio導入の動機の一つとしてオススメです。