概要
kubernetesのサービスメッシュのistioと、可視化ツールのkialiを試してみる。
環境
github codespaceを利用。
- minikube 1.34.0
- istio 1.24.2
minikubeの起動
minikube start --memory=4096 --cpus=2
istioの導入
istioのインストール&minikubeへのデプロイ。
curl -L https://istio.io/downloadIstio | sh -
cd istio-1.24.2
export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo -y
cd ..
アプリケーションのデプロイ
前回作成した、Streamlit+FlaskのTodoアプリを流用。
アプリをデプロイするための名前空間をtodo-appとして作成する。
作成した名前空間内でistioの追跡が聞くように、istio-injection=enabledのラベルを設定する。
kubectl create namespace todo-app
kubectl label namespace todo-app istio-injection=enabled
テスト用のアプリケーションをデプロイ。
kubectl apply -f k8s/ -n todo-app
以下コマンドで起動したポッドのstatusを確認できる。
kubectl get pod,svc -n todo-app
NAME READY STATUS RESTARTS AGE
pod/backend-75db745896-jjlw7 2/2 Running 2 (3m41s ago) 4m
pod/backend-75db745896-p69dw 2/2 Running 1 (3m47s ago) 4m
pod/db-5566db44cc-9r8k9 2/2 Running 0 4m
pod/frontend-6776dd978-2fvw5 2/2 Running 0 4m
pod/frontend-6776dd978-h5kwf 2/2 Running 0 4m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/backend ClusterIP 10.99.67.199 <none> 5000/TCP 4m
service/db ClusterIP 10.101.133.18 <none> 5432/TCP 4m
service/frontend LoadBalancer 10.100.148.37 <pending> 8501:31648/TCP 4m
READYの項目が「2/2」となっている。
これは、デプロイしたコンテナに対するサイドカーコンテナ(Envoyプロキシ)で、以下の追加機能をk8sに付与する。
機能 | 説明 |
---|---|
トラフィック制御 | ルーティング、負荷分散、カナリアリリース |
セキュリティ | mTLS暗号化、認証・認可 |
可観測性 | メトリクス収集、ログ、トレース |
耐障害性 | フォールトインジェクション、エラー制御 |
サーキットブレーカー | 過負荷時のリクエスト制限 |
以下コマンドでフロントエンドの実行ポート(8501)をローカルのポート(8080)に転送。
http://localhost:8080
でアプリにアクセスできる。
kubectl port-forward svc/frontend 8080:8501 -n todo-app
トラフィックの可視化
istioのアドオン(grafana, jaeger, kiali, loki, prometheus)をデプロイする。
これらは名前空間istio-systemにデプロイされる。
kubectl apply -f istio-1.24.2/samples/addons
kialiダッシュボードを起動。
istioctl dashboard kiali
traffic graph
タブを表示し、namespace:todo-app
にセットする。
すると、todo-app名前空間内に存在するすべてのサービスとアプリケーションが表示される。
△のアイコンがサービスで、□のアイコンがアプリケーション。
立ち上げてすぐの状態だと、サービス間通信がkialiで未取得のため、すべてのサービスとアプリケーションが縦一列に並んでいる。
ブラウザでアプリを適当に操作すると、通信がトラッキングされ、サービス間のエッジが描画される。
このときにレスポンスタイムやステータスなども確認できる。
削除
名前空間ごとアプリケーションを削除する。
kubectl delete namespace sample-app
まとめ
kubernetes上にistioのインストール、簡単なサービスメッシュの可視化を行った。
次回はネットワークの制御を行いたい。