Z.S.K.'s Records

Istio学习(istioctl常用命令)

istioctl是istio的客户端命令行工具, 常用于对istio中的出现的各种问题进行诊断.istioctl支持非常多的命令, 这篇主要以proxy status、 proxy-config两个命令为主, 更多其它的命令, 可参考这里

所有操作都是基于官方提供的book-info示例进行,也是对上一篇对envoy的配置文件进行流量分析的补充.

istioctl proxy-status

istioctl proxy-status, 可以简写这istioctl ps, 一般用于检测envoy是否与pilot的连接成功, 如果不成功, 则无法获得pilot下发的配置文件

istioctl proxy-config

Istioctl proxy-config, 可以简写为istioctl pc, 主要用于查看各种资源对象,这里主要列举几个比较常用的命令

istioctl是个多级命令行工具, 都可直接通过-h 来查看用法

比如这里可以使用istioctl pc bootstrap -h 来查看二级命令bootstrap能够接受的参数

以下都会使用details-v1-78d78fbddf-z9cpj.default这个应用来做为示例

比如说, 从details中访问reviews:9080, envoy的处理逻辑是这样的

listener –> route –> cluster –> endpoint

下面通过istioctl命令行进行分析

pc bootstrap

检索pod 中 Envoy 实例的 bootstrap 配置的信息

从这个命令可以得到envoy启动时的一些静态参数,比如pilot地址, prometheus地址等.

1
istioctl pc bootstrap details-v1-78d78fbddf-z9cpj.default

pc listener

检索pod 中 Envoy 实例的监听器配置的信息

1
istioctl pc listener details-v1-78d78fbddf-z9cpj.default --port=9080 --address=0.0.0.0

从listener中获取routeconfigname:

pc route

检索pod中Envoy 实例的路由配置的信息, 从listener获取到的9080的routeconfigname来获取route

1
istioctl pc route details-v1-78d78fbddf-z9cpj.default

可以看到跟9080相关的route有5条, 找到与reviews相关的信息

1
istioctl pc route details-v1-78d78fbddf-z9cpj.default --name=9080 -ojson

virutalhosts中的domains一项列出的所有的跟reviews相关的域名及域名:端口,envoy会把domain中的字符串与请求中的host做对比

这里匹配/ 然后转到cluster为outbound|9080||reviews.default.svc.cluster.local

pc cluster

检索pod 中 Envoy 实例的集群配置的信息

1
istioctl pc cluster details-v1-78d78fbddf-z9cpj.default

说明

  • PORT: 指定端口, 一般与kubernetes中的svc端口一致
  • SUBSET: 使用该字段对集群进行过滤
  • DIRECTION: 表明是出向流量还是入向流量
  • TYPE: 这个svc是静态(STATIC)配置还是通过EDS动态获取的

使用–fqdn 指定svc, 先看一个动态类型(EDS)

1
istioctl pc cluster details-v1-78d78fbddf-z9cpj.default --fqdn details.default.svc.cluster.local --direction outbound -ojson

![image-20200210180657173](/Users/zhoushuke/Library/Application Support/typora-user-images/image-20200210180657173.png)

再看一个静态类型(STATIC)

1
istioctl pc cluster details-v1-78d78fbddf-z9cpj.default --direction inbound  --fqdn details.default.svc.cluster.local -ojson

如果是入向流量, 在cluster中的endpoint是127.0.0.1,因为这时请求已经被转发到了该容器上,直接响应即可

这里找到reviews与有关的cluster

1
istioctl pc cluster details-v1-78d78fbddf-z9cpj.default --fqdn=reviews.default.svc.cluster.local -ojson

pc endpoint

检索特定 pod 中 Envoy 实例的 endpoint 配置的信息

1
istioctl pc endpoints details-v1-78d78fbddf-z9cpj.default

第一列的endpoint即为真正的业务容器ip,如果实例有多个话就会有多行

比如这里通过上面动态类型的cluster来获取ep

1
istioctl pc endpoints details-v1-78d78fbddf-z9cpj.default --cluster="outbound|9080||reviews.default.svc.cluster.local"

![image-20200210191055227](/Users/zhoushuke/Library/Application Support/typora-user-images/image-20200210191055227.png)

由于reviews有3个实例, 因此有3条记录

最终根据发起方配置的负载均衡策略选出一个实例进行响应

至此整个请求路由就完成, 当然实际使用中还会进行一些其它的操作如重试、熔断等策略, 其原理是一样的.

参考文章:

转载请注明原作者: 周淑科(https://izsk.me)

 wechat
Scan Me To Read on Phone
I know you won't do this,but what if you did?