一个高效的Istio可视化命令行工具
项目信息¶
目前i9s已经开源,项目开源地址: i9s 。开发i9s的初衷是提高服务网格的运维效率,我们希望有一款工具可以便捷的查看istio和envoy的调试接口, 最好像k9s操作pods资源那样简单 。得益于k9s代码的可扩展性,我们基于k9s-v0.25.18,提供了istio envoy 调试接口查看能力。
运维场景¶
在istio开发运维时,我们常常遇到服务治理规则不生效的问题,为了解决这个问题,可能会分以下几个步骤进行排查:
-
查找服务
pods, 这里以view服务为例kubectl -n skiff-demo-sidecar get pods demo-stock-viewer-sidecar-8547788687-lk48m 2/2 Running 0 15d -
执行
envoy config_dump命令查看config_dump文件kubectl -n skiff-demo-sidecar exec demo-stock-viewer-sidecar-8547788687-lk48m -- curl 127.0.0.1:15000/config_dump | less -
这时候,我们从config_dump文件中基本可以判断配置是否存在,是否错误。如果发现配置不存在,我们需要进一步排查控制面。
-
目标转移到控制面,查找
istio podkubectl -n istio-system get pods istiod-112-5fb95d6fff-k94pz 1/1 Running 0 46h -
查看
istio中是否有相关配置kubectl exec istiod-112-5fb95d6fff-k94pz -n istio-system -- curl 127.0.0.1:15014/debug/configz | less -
如果发现没有配置,可能是
istio的上层问题(没下发)。如果是istio的问题,可以接着看下发到 view 服务的实际数据是否正常kubectl -n istio-system exec istiod-112-5fb95d6fff-k94pz -- curl 127.0.0.1:15014/debug/config_dump?proxyID=demo-stock-viewer-sidecar-8547788687-lk48m | less -
到这步基本就能判断出问题出在了控制面还是数据面
可以发现,在以上过程中我们需要反复利用kubectl查询相关信息,过程十分繁琐,为了简化以上过程,我们推出了i9s。
i9s介绍¶
i9s的宗旨是提高istio的运维效率,从运维场景章节可以看到,配置下发生效问题的定位就需要多个kubectl交互命令,而i9s可以极大提升该过程的查询效率。目前i9s提供的功能包括
-
istio接口视图,包括configz,adsz,config_dump等接口信息查看 -
enovy接口视图,包括config_dump,cluster,endpoints等接口信息查看 -
revision查看,从revision视角提供注入规则、deployment资源清单、mesh配置文件等信息
运行¶
前提须知:需要指定kubeconfig, 且目前以适配istio 1.12 为主,由于不同版本接口不同,可能导致查询其他版本的接口时出现问题。
-
镜像方式(需要将kubeconfig文件挂载进容器内)
docker run -it --net=host -v $HOME/.kube/config:/root/.kube/config slimeio/i9s:v0.0.1 -
二进制方式, 该安装脚本(在开源项目中)会检查本地是否有
kubectl, 如果没有需用户自行安装。之后会检查jq,less等命令是否存在,如果不存在会自动安装, 之后会运行镜像,并将镜像中的 i9s,istioctl 可执行文件移动至 /usr/bin 目录下sh ./install.sh i9s
由于有些minikube 权限问题,可能需要将kubeconifg中client-key的目录一同挂进容器
使用说明¶
- 按下
:istio切换至isito revision视图,可以选在不同rev

- 选中
rev按下enter进入rev详情页面, 包含注入规则、deployment清单和mesh configuration

- 选中
istiod configuratiojn按下enter展示了mesh配置项详情

- 在
istio revision视图下,选中rev并按下m(mesh)进入isito api视图, 展示可调试的istio接口列表

- 选中
istio/configz按下enter展示debug/configz信息, 支持less操作,按q退出

- 选中服务(接入网格的服务)所在
pod并按下m(mesh) 进入envoy api视图,展示可调试的envoy接口信息

- 选中
envoy/config_dump进入/config_dump接口,支持less操作,按q退出

Release && 视频教程¶
版本 release
i9s介绍和使用说明 视频
展望¶
i9s 目前提供了istio和envoy接口查看能力, 结合k9s 已有的能力,我们可以极大提升日常的istio 的维护效率。 由于项目目前处于起步阶段,功能尚不全面,在接下来的一段时间内,我们将提升用户的使用体验并为i9s提 供更多的分析能力,努力将k9s和istioctl更好的结合,提升运维效率。