Kialiを使ってサービスメッシュのトラフィックをチェックする。
[zaki@cloud-dev ~]$ kc get pod,deploy,svc -n istio-system -l app=kiali NAME READY STATUS RESTARTS AGE pod/kiali-d45468dc4-jlshb 1/1 Running 5 23d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/kiali 1/1 1 1 23d NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kiali ClusterIP 10.104.53.76 <none> 20001/TCP 23d
- 環境 (追記)
- インストール
- istioctlを使ったアクセス
- ログインアカウント
- サービスメッシュのグラフ表示
- トラフィックの様子をチェックする
- 常時使うならNodePortやLoadBalancer Serviceで
環境 (追記)
こちらで作った、kubeadmで構築したKubernetes 1.18に、MetalLB + istioctlでインストールしたIstio v1.6.5環境です。
インストール
demo profileを使ってIstioをインストールすればKialiも含まれる。
後から個別に追加インストールするには、アドオンコンポーネントで指定してインストールする。
[zaki@cloud-dev ~]$ istioctl install --set addonComponents.kiali.enabled=true Detected that your cluster does not support third party JWT authentication. Falling back to less secure first party JWT. See https://istio.io/docs/ops/bes t-practices/security/#configure-third-party-service-account-tokens for details. ✔ Istio core installed ✔ Istiod installed ✔ Ingress gateways installed ✔ Addons installed ✔ Installation complete
secret(後述のweb画面のログイン情報)が無ければ追加する。
$ KIALI_USER=$(echo -n "kiali" | base64) $ KIALI_PASS=$(echo -n "kiali" | base64) $ cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: kiali namespace: istio-system labels: app: kiali type: Opaque data: username: $KIALI_USER passphrase: $KIALI_PASS EOF
istioctlを使ったアクセス
[zaki@cloud-dev ~]$ istioctl dashboard kiali http://localhost:42983/kiali Failed to open browser; open http://localhost:42983/kiali in your browser.
これだと、istioctl
を実行ホスト上からのアクセスになるので、実行ホストへリモートアクセスしてるのであればSSHポートフォワードするなどする。
zaki@wensley% ssh -L 20001:localhost:42983 cloud-dev zaki@cloud-dev's password: Last login: Tue Aug 18 09:29:55 2020 from 192.168.0.220 [zaki@cloud-dev ~]$
まぁこんな感じで。
ログインアカウント
アカウント情報は、secretに保持されている。
デフォルトであればadmin / admin
でログイン
[zaki@cloud-dev ~]$ kc get secret -n istio-system kiali -o jsonpath='{.data.use rname}' | base64 -d; echo admin [zaki@cloud-dev ~]$ kc get secret -n istio-system kiali -o jsonpath='{.data.pas sphrase}' | base64 -d; echo admin
Runningでなくエラーになっているpodがあると(サービスメッシュと関係なく)赤くなるみたい。
サービスメッシュのグラフ表示
サイドメニューのここ。
そして、ネームスペース選択のドロップダウンから、Istioを使用しているネームスペースを選択。
すると、このようにサービスメッシュの構成と状態を俯瞰することができる。
※ BookInfoアプリケーション自体はこちらを参照。
以下、アーキテクチャ図を引用
トラフィックの様子をチェックする
BookInfoに実際にアクセスすると、Kialiの表示も更新される。
また、マウスオーバーしたり、ラインやコンポーネントをマウスクリックすると、プロトコル種別やトラフィック量・通信のエラー状況といった詳細も見れる。
また、ネームスペースは複数選択可能のため、複数ネームスペースにまたがるアプリケーション構成でもトラフィックをチェックできる。
常時使うならNodePortやLoadBalancer Serviceで
今回はistioctl dashboard kiali
を使った(ので、その変化球でSSHポートフォワード使った)けど、kubectl port-forward
でも良いし、開発環境などで常時使用・参照するならNodePort ServiceやLoadBalancer Serviceを作ってもいいと思う。
[zaki@cloud-dev ~]$ kc get svc -n istio-system kiali NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kiali ClusterIP 10.104.53.76 <none> 20001/TCP 23d [zaki@cloud-dev ~]$ kc get svc -n istio-system kiali -o jsonpath='{.spec.type}{"\n"}' ClusterIP
これを
[zaki@cloud-dev ~]$ kc patch svc -n istio-system kiali -p '{"spec": {"type": "LoadBalancer"}}' service/kiali patched
こうして
[zaki@cloud-dev ~]$ kc get svc -n istio-system kiali NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kiali LoadBalancer 10.104.53.76 192.168.0.184 20001:32086/TCP 23d
こうじゃ。
というか、istioctl dashboard
の中身ってport-forward
なのね。
それで"kiali"ってどういう意味なんだろう…