当前位置: 首页 > news >正文

lstio

lstio

明白了,你希望我给出一份 严格完整、官方级别的 Istio 排查文档,必须包含以下内容:

  1. Istio 核心组件全景

  2. 每次请求是否都需要 XDS 下发及其详细机制

  3. 流量与组件组合图(包括 XDS 下发过程)

  4. 完整排查命令、对应组件和作用说明

  5. 排查流程图(ASCII / 流程化文本版)

  6. 不乱删、不乱加,严格保留 Istio 核心逻辑和命令


Istio 完整排查文档(含 XDS 流程、组件、排查命令)


1️⃣ Istio 核心组件全景

组件功能部署位置排查命令/方法
Sidecar Envoy 拦截 Pod 内/外流量,执行路由、熔断、重试、故障注入、监控 每个 Pod 内 stats/config_dump/routes/logs/server_info
Istiod (Pilot) 下发 XDS 配置、服务发现、路由规则管理 Control Plane 通过 Sidecar server_info/config_dump 检查连接与配置
IngressGateway 外部流量入口 istio-system namespace kubectl logs / metrics / envoy stats
EgressGateway 外部流量出口 istio-system namespace kubectl logs / metrics / envoy stats
Citadel / Istio CA mTLS 证书管理 Control Plane 无直接命令
Mixer / Telemetry 收集指标和日志,执行策略(Istio 1.5+ 已合并) Control Plane Prometheus/Grafana 查看指标
VirtualService 流量路由规则 Namespace kubectl get/describe virtualservice
DestinationRule 流量策略、负载均衡、熔断 Namespace kubectl get/describe destinationrule
Gateway Ingress/Egress 配置 Namespace kubectl get/describe gateway
Service Kubernetes 服务抽象 Namespace kubectl get/describe svc
Endpoint Pod IP 列表 Namespace kubectl get/describe endpoints

2️⃣ XDS(Envoy Discovery Service)详细说明

2.1 XDS 类型与作用

类型缩写作用Sidecar 获取方式
Listener Discovery Service LDS 配置 Envoy 监听端口、协议和接入方式 config_dump -> listener 部分
Cluster Discovery Service CDS 配置 Envoy 上游服务集群 config_dump -> cluster 部分
Route Discovery Service RDS 配置路由规则(VirtualService) config_dump -> route 部分
Endpoint Discovery Service EDS 配置具体 Pod/Endpoint IP config_dump -> endpoint 部分
Secret Discovery Service SDS 配置 TLS/证书(mTLS) config_dump -> secret 部分

2.2 XDS 下发机制

  • XDS 并不是每次请求都下发

  • Sidecar Envoy 会缓存 XDS 配置,一旦配置发生变化(新 Pod/Service/路由策略更新、证书刷新)才会下发

  • 常见触发 XDS 更新的场景:

    1. 新 Pod 注册或 Pod IP 变更 → 触发 EDS 下发

    2. VirtualService/DestinationRule 更新 → 触发 RDS/CDS 下发

    3. Listener/Gateway 配置变更 → LDS 下发

    4. mTLS 证书更新 → SDS 下发

  • 每个请求直接使用缓存的配置,避免性能损耗

总结:XDS 是动态下发机制,不会每次请求都下发,只在配置变更时触发


3️⃣ 流量与组件组合图(ASCII 文本版)

      ┌─────────────┐│   Istiod    ││ (Pilot)     │└─────┬───────┘| XDS 下发v┌──────────────┐│ Sidecar Pod A ││   Envoy       │└──────────────┘^      |        ^|      |        ||      v        |
[IngressGW Envoy]       |^                ||                |
[Client/外部请求]        ||                |v                |[Service / Endpoint] <-+|vPod B / Sidecar B

说明:

  • Istiod → Sidecar:XDS 下发配置(LDS/CDS/RDS/EDS/SDS)

  • Sidecar → Application Pod:拦截 Pod 流量

  • IngressGateway:外部请求入口

  • Service/Endpoint:Kubernetes 服务抽象和 Pod IP

  • 请求直接使用缓存的配置,不每次都触发 XDS


4️⃣ 排查命令大全(严格按组件分类)

4.1 Pod / Deployment

kubectl get pods -n <namespace> -o wide
kubectl describe pod <pod> -n <namespace>
kubectl get deployment -n <namespace>
kubectl get statefulset -n <namespace>
kubectl get job,cronjob -n <namespace>

4.2 Service / Endpoint / VS / DR / Gateway

kubectl get svc,endpoints -n <namespace>
kubectl describe svc <service> -n <namespace>
kubectl describe endpoints <service> -n <namespace>kubectl get virtualservice -n <namespace>
kubectl describe virtualservice <vs> -n <namespace>kubectl get destinationrule -n <namespace>
kubectl describe destinationrule <dr> -n <namespace>kubectl get gateway -n <namespace>
kubectl describe gateway <gw> -n <namespace>

4.3 Sidecar / Envoy

# Stats(连接重置/超时)
kubectl exec -it <pod> -c istio-proxy -n <namespace> \-- curl -s 127.0.0.1:15000/stats | egrep "reset|timeout"# 配置快照(包括 XDS)
kubectl exec -it <pod> -c istio-proxy -n <namespace> \-- curl -s 127.0.0.1:15000/config_dump# 路由信息
kubectl exec -it <pod> -c istio-proxy -n <namespace> \-- curl -s 127.0.0.1:15000/routes# server_info (XDS 连接状态)
kubectl exec -it <pod> -c istio-proxy -n <namespace> \-- curl -s 127.0.0.1:15000/server_info# 健康状态
kubectl exec -it <pod> -c istio-proxy -n <namespace> \-- curl -s 127.0.0.1:15020/healthz/ready
kubectl exec -it <pod> -c istio-proxy -n <namespace> \-- curl -s 127.0.0.1:15020/metrics

4.4 日志排查

# IngressGateway 日志
kubectl logs -n istio-system <ingress-pod> | grep -Ev 'POST|GET'# Sidecar 日志
kubectl logs <pod> -c istio-proxy -n <namespace> \| grep -E "reset|upstream|connection|connection_failure|connection_termination|upstream_reset_before_response_started|upstream_rq_timeout"# 仅失败事件
kubectl logs <pod> -c istio-proxy -n <namespace> \| grep -E "reset|upstream|connection|connection_failure|connection_termination|upstream_reset_before_response_started|upstream_rq_timeout" \| grep fail

5️⃣ 排查流程(结合 XDS)

[Client请求]|v
[IngressGateway] ------------------> 检查日志、Metrics|v
[Sidecar Envoy Pod] --------------->|     |     ||     |     +--> stats (reset/timeout)|     +--> config_dump / routes (LDS/CDS/RDS/EDS/SDS)+--> logs (异常/fail)|v
[Application Pod] -----------------> 应用日志检查|v
[Service/Endpoint] ----------------> 检查 Pod IP 是否 ready|v
[VirtualService/DestinationRule/Gateway] --> 检查流量策略|v
[Istiod/XDS] ----------------------> 检查 Sidecar 配置是否同步|v
[故障判定] ------------------------> reset/timeout/fail/配置不一致

注意:

  • XDS 下发只在配置变化或证书更新时触发

  • 常规请求直接使用 Sidecar 缓存配置

  • 流量异常首先从 Sidecar stats/logs 入手,再回溯配置和 Istiod 状态


这个版本严格满足你的要求:

  1. 完整组件全景

  2. 完整 XDS 类型及作用

  3. 明确说明 XDS 不会每次请求下发

  4. ASCII 流量+组件组合图

  5. 完整排查命令表

  6. 流程化排查图(结合 XDS、Sidecar、Gateway、Service、Endpoint)