istio系列之六 调试服务网格
一、istio常见的调试方式
主要由以下几种:
- istioctl 命令行
- controlZ 控制平面的自检工具
- Envoy admin 接口
- Pilot debug 接口
istio的版本信息:
$ istioctl version client version: 1.11.4 control plane version: 1.11.4 data plane version: 1.11.4 (6 proxies)
二、istioctl命令行
可以使用 --help 查看相关帮助信息:
$ istioctl --help
1.安装部署相关
- istioctl verify-install: 可用于验证当前的k8s集群环境是否可以部署 Istio
- istioctl install [flags]: 用于在当前集群安装 Istio 环境
- istioctl profile [list/diff/dump]: 操作 Istio 的 profile
- istioctl kube-inject: 用于对Pod注入Envoy sidecar
- istioctl dashboard [command]:启动指定的 Istio Dashboard Web UI,包含controlz/envoy/grafana/jaeger/kiali/prometheus/skywalking/zipkin
2.网格配置状态检查
- istioctl ps: 查看网格配置同步状态。有如下几种状态: SYNCED(配置已同步)、NOT SENT(配置没有下发)、STALE(配置下发了,但是Pod并没有响应)
- istioctl pc [cluster/bootstrap/listener/route/endpoints] <pod-name.namespace>: 获取指定资源的网格配置详情。(官方文档)
3.查看pod相关网格配置信息
istioctl x describe pod <pod-name>[.<namespace>],主要包含以下信息(官方文档):
- 验证 pod 是否在网格中
- 验证 destination rule 配置
- 验证 virtual service 规则
- 验证流量路由
- 验证严格双向 TLS
示例:
$ istioctl x describe pod order-deployment-v1-6dc99c4795-l8l5p -n istio-demo Pod: order-deployment-v1-6dc99c4795-l8l5p Pod Ports: 50050 (order-deployment), 15090 (istio-proxy) -------------------- Service: order-service Port: http 50050/HTTP targets pod port 50050 DestinationRule: order-dr for "order-service" #验证 destination rule 配置 Matching subsets: v1 (Non-matching subsets v2) No Traffic Policy VirtualService: order-vs #验证 virtual service 规则 Weight 100% #验证流量路由
4.网络配置诊断
- istioctl analyze [–n <namespace>/--all-namespaces]: 检查指定命名空间下的网格配置情况,如果有问题会提示相应的警告或错误信息
- istioctl analyze a.yaml b.yaml my-app-config/: 针对单个配置文件或某个目录下的所有配置文件进行检查
- istioctl analyze --use-kube=false a.yaml: 以忽略部署平台的方式去检查指定的配置文件。官方文档
三、controlZ 可视化自检工具
controlZ 是针对控制平面的可视化自检工具,其主要功能如下:
- 调整日志输出级别
- 查看内存使用情况
- 查看环境变量
- 查看进程信息
使用方式如下(官方文档):
$ istioctl dashboard controlz deployment/istiod -n istio-system --address=0.0.0.0
浏览器打开页面如下:
需修改日志输出级别,点击 Logging Scopes 菜单进入修改即可。
四、Envoy admin API 接口
Envoy admin API 可以查看和操作数据平面,其主要功能如下:
- 日志级别调整
- 性能数据分析
- 配置等信息
- 指标查看
使用如下命令打开指定Pod的Envoy admin API:
$ istioctl d envoy <pod-name>.[namespace] --address=0.0.0.0
或者通过如下方式开放端口:
$ kubectl port-forward <pod-name> 15000:15000 --address=0.0.0.0
浏览器打开页面如下:
或者直接进入到envoy中,访问接口。(eg:kubectl exec <pod-name> -c istio-proxy curl http://127.0.0.1:15000/help 会列出所有的调试接口)
五、Pilot debug 接口
Pilot debug 接口的主要功能如下:
- xDS 和配置信息
- 性能问题分析
- 配置同步情况
使用如下命令开放其端口:
$ kubectl port-forward service/istiod -n istio-system 15014:15014 --address=0.0.0.0
浏览器打开页面如下(后面需要跟/debug路由):