概要
- VirtualService、DestinationRuleといったIstio由来の設定が正しく反映されているか。
- どのPodのEnvoy-Proxyに反映されているか
といった検証やデバッグに用いることが多いコマンドを記載します。
詳細に関してはこちらの Istio / Debugging Envoy and Istio を参照頂けるとより理解が深まると思います。
デバッグで便利だと思ったりメモっておきたいと思ったのは随時追加していきます。
VirtualService
$ istioctl proxy-config route [PODNAME].[NAMESPACE] -o json
VirtualServiceで定義したhttp.match.uriやretry回数、timeout秒数などが反映されていることを確認できます。
proxy-configはpc
と短縮でき、routeはr
に置き換えることができます。
$ istioctl pc r [PODNAME].[NAMESPACE] -o json
さらに80番ポートでリッスンしているエントリに絞り込みたい場合は次のように--name
を加えます。
$ istioctl pc r [PODNAME].[NAMESPACE] --name 80 -o json
DestinationRule
$ istioctl proxy-config cluster [PODNAME].[NAMESPACE] -o json
DestinationRuleで定義したtcpKeepalive、idleTimeout、connectTimeoutなどが反映されていることを確認できます。
こちらも同じようにコマンド短縮が可能です。
$ istioctl pc c [PODNAME].[NAMESPACE] -o json
さらにfqdnで絞り込みたい場合は次のように--fqdn
を加えます。
istioctl pc c [PODNAME].[NAMESPACE] --fqdn "productpage.default.svc.cluster.local" -o json
EnvoyFilter
EnvoyFilterの場合は、ApplyToの値によって反映される箇所が変わる。
Istio1.6.0のリファレンス Istio / Envoy Filter によると
ApplyTo: CLUSTER
-> istioctl proxy-config cluster [PODNAME].[NAMESPACE] -o json
ApplyTo: LISTENER
-> istioctl proxy-config listernes [PODNAME].[NAMESPACE] -o json
ApplyTo: ROUTE_CONFIGURATION / VIRTUAL_HOST / HTTP_ROUTE
-> istioctl proxy-config route [PODNAME].[NAMESPACE] -o json
このように反映先が変わるようです。
Envoy-Proxyに反映されているconfigデータ全てをダンプする
$ kubectl exec [PODNAME] -c istio-proxy -n [NAMESPACE] -- curl localhost:15000/config_dump
または、
$ kubectl exec -it [PODNAME] -c istio-proxy -n [NAMESPACE] bash
でEnvoy-Proxyにログインし、
$ curl localhost:15000/config_dump
前者であればパイプやリダイレクトで好みの情報を抜き出したり加工することができるので、デバッグもログ採取も楽です。しかし情報量が多すぎるため、上述のistioctl proxy-config
で必要な分だけをさらに絞り込んだ方が楽な時もあります。
FQDN指定でアクセスする際のエンドポイントが正しいか確認する
$ istioctl proxy-config endpoint [PODNAME].[NAMESPACE] -o json
エンドポイントがどのIPアドレスで解決されるかを確認することができます。
私がトラブルシューティングする場合
反映されている箇所は知っている -> istioctl proxy-config listeners/route/endpoint/cluster
どこに反映されているかわからない。またはconfigを全て取得しておきたい。 -> curl localhost:15000/config_dump
といった使い分けを私はしています。