16
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

istioctlコマンドを使ったEnvoy-Proxyのデバッグ手法

Last updated at Posted at 2020-07-01

概要

  • 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

といった使い分けを私はしています。

16
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?