3. 网格拓扑可视化:Kiali的安装、服务图拓扑、健康状态与指标关联
Kiali 是 Istio 生态中最重要的可视化组件,它提供了服务网格的实时拓扑图、健康状态监控以及指标关联能力。在故障排查场景中,Kiali 能够帮助运维人员快速定位服务间的调用异常、配置错误以及流量走向。本节将围绕 Kiali 的安装部署、服务图拓扑解析、健康状态判断以及指标关联四个核心维度展开。
3.1 Kiali 安装与配置
Kiali 的安装方式主要有两种:使用 Istio 内置的 addon 快速部署,或通过 Helm Chart 进行生产级定制。以下为推荐的生产环境安装步骤:
- 前置条件:确保已部署 Prometheus 和 Jaeger,Kiali 依赖它们获取指标与追踪数据。
- 创建 Secret:Kiali 需要访问 Kubernetes API,建议使用 认证。
- Helm 安装:配置 values 文件,指定 Prometheus 地址、认证方式及日志级别。
# 创建 Kiali 认证 Secret
kubectl create secret generic kiali -n istio-system \
--from-literal=username=admin \
--from-literal=passphrase=admin123
# 使用 Helm 安装 Kiali
helm repo add kiali https://kiali.org/helm-charts
helm install kiali kiali/kiali-server \
--namespace istio-system \
--set auth.strategy=login \
--set external_services.prometheus.url=http://prometheus.istio-system:9090 \
--set external_services.tracing.url=http://tracing.istio-system:16685
排查提示:如果 Kiali 页面加载后服务图为空,请检查
kiali-configmap 中 prometheus 和 istio 组件的命名空间配置是否正确,以及 Istio 是否开启了指标采集。
3.2 服务图拓扑(Service Graph)
Kiali 的服务图是故障排查的核心入口。它以有向图的形式展示服务间的调用关系,每个节点代表一个工作负载(Workload)或服务(Service),边代表流量方向。服务图支持多种布局模式,包括“工作负载图”、“服务图”和“应用图”。
下图展示了 Kiali 服务图的核心组件与数据流关系:
在服务图中,运维人员可以直观地看到:
- 节点颜色:绿色表示健康,黄色表示警告,红色表示错误,灰色表示无流量。
- 边线样式:实线表示当前有流量,虚线表示配置了路由但无流量,带闪电图标表示故障注入。
- 节点大小:与请求量或响应时间成正比,便于快速识别热点服务。
3.3 健康状态与指标关联
Kiali 的健康状态评估基于三个维度:工作负载健康、服务健康 和 应用健康。每个维度都通过聚合底层指标得出,并与 Prometheus 中的黄金指标(延迟、流量、错误、饱和度)直接关联。
| 健康维度 | 判断依据 | 关联指标(Prometheus) | 故障排查场景 |
|---|---|---|---|
| 工作负载健康 | Pod 状态、Envoy 就绪、请求错误率 | istio_requests_total{response_code=~"5.*"} |
Pod 崩溃、Envoy 配置推送失败 |
| 服务健康 | 服务端错误率、P95 延迟、流量突变 | istio_request_duration_milliseconds_bucket |
服务超时、熔断触发、限流生效 |
| 应用健康 | 组成该应用的所有工作负载综合评分 | istio_tcp_sent_bytes_total(TCP 场景) |
应用整体降级、依赖服务不可用 |
实战技巧:当服务图中某个节点变为红色时,点击该节点进入详情页,在“指标”标签页中可以直接查看该工作负载的请求量、错误率、P50/P95/P99 延迟趋势图。结合“追踪”标签页,可以下钻到具体的故障请求链路。
3.4 故障排查中的 Kiali 使用流程
以下是一个典型的基于 Kiali 的故障排查步骤:
- 全局扫描:打开服务图,观察是否有红色或黄色节点,快速定位异常范围。
- 下钻分析:点击异常节点,查看“指标”面板,确认错误率突增的时间点。
- 关联追踪:切换到“追踪”面板,筛选出错误请求的 Trace,查看具体调用链。
- 配置检查:在“配置”面板中检查该工作负载的 VirtualService、DestinationRule 是否有语法错误或冲突。
- 日志辅助:通过 Kiali 集成的日志功能(需配置 Loki),查看 Envoy 或应用日志。
下图展示了从服务图异常到根因定位的排查链路:
3.5 常见问题与避坑
- 服务图不显示流量:检查 Prometheus 中是否有
istio_requests_total指标数据,确认 Istio 的telemetry组件是否正常工作。 - 节点显示为“未知”:Kiali 无法从 Kubernetes API 获取到对应的 Deployment 或 Service 信息,检查 RBAC 权限是否足够。
- 指标延迟高:Kiali 默认查询最近 30 分钟数据,如果 Prometheus 数据量大,建议调整
prometheus.query_timeout参数或增加缓存。 - 健康状态误报:如果服务本身无流量,Kiali 会显示灰色,而非绿色。在排查时需区分“无流量”和“健康”两种状态。
注意:Kiali 的“配置”面板只能检测 Istio 资源的语法错误,无法检测语义错误(例如 VirtualService 引用了不存在的 Service)。在修改路由规则后,建议通过服务图观察流量是否按预期分发。