逐步排查 Cloud Service Mesh 问题

本部分介绍如何排查和解决使用 Cloud Service Mesh 时遇到的问题。如果您需要其他帮助,请参阅获取支持

问题排查步骤

请按照以下常规步骤排查 Cloud Service Mesh 问题:

  1. 使用自动配置验证工具。
  2. 检查遇到的常见问题是否存在已知的解决方案。
  3. 缩小问题的范围。
  4. 查看相关日志和信息。
  5. 收集诊断日志并寻求帮助。

Cloud Service Mesh 诊断工具可以检测常见的配置问题。按照这些说明安装问题排查工具。

准备工作

  1. 确保您的 kubeconfig 文件中包含集群的 kubeconfig 上下文。如果没有,请运行以下命令:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CLUSTER_LOCATION --project=PROJECT_NAME
    

    替换以下内容:

    • CLUSTER_NAME:您的集群的名称。
    • CLUSTER_LOCATION:集群的可用区或区域。
    • PROJECT_NAME:项目名称。
  2. 验证是否已创建应用默认凭据。如果没有,请运行以下命令之一:

    gcloud auth application-default login --billing-project=PROJECT_NAME
    
    gcloud auth application-default set-quota-project PROJECT_NAME
    

    PROJECT_NAME 替换为您的项目名称。

查看控制平面状态

以下命令可帮助您了解 Cloud Service Mesh 控制平面的状态:

代管式

  • 获取与 Cloud Service Mesh 控制平面连接的客户端状态列表:

    gcloud beta container fleet mesh debug proxy-status \
        --membership=MEMBERSHIP_NAME \
        --location=MEMBERSHIP_LOCATION \
        --project=PROJECT_NAME
    

    替换以下内容:

    • MEMBERSHIP_NAME:您的会员资格的名称。
    • MEMBERSHIP_LOCATION:您的会员资格所在的区域。您可以使用 gcloud container fleet memberships list --project FLEET_PROJECT_ID 检查成员资格的所在位置,只需将 FLEET_PROJECT_ID 替换为舰队项目 ID 即可。
    • PROJECT_NAME:项目名称。

    下表介绍了可能的响应。

    未知 (默认)⁣状态信息不可用或未知。
    已同步 控制平面将配置发送给客户端,并从客户端收到 ACK。
    错误 控制平面将配置发送给客户端,并从客户端收到 NACK。
    STALE 控制平面将配置发送给客户端,但未收到客户端的 ACK 或 NACK。
    未发送 配置未发送。
    不适用 不适用。
    不支持 问题排查 API 不支持同步状态。

集群内

  • kubectl get pods -n istio-system
  • kubectl describe -n istio-system
  • 针对 istio-system 中的所有 pod:kubectl logs -n istio-system -l istio --all-containers
  • istioctl version
  • istioctl proxy-status
  • kubectl get configmap istio -o yaml && kubectl get configmap istio-sidecar-injector -o yaml
  • kubectl top pods -n istio-system

使用以下命令可了解部署的规模:

  • kubectl get nodes
  • kubectl get services --all-namespaces
  • kubectl get pods --all-namespaces

查看代理配置

以下命令可帮助您了解 Cloud Service Mesh 代理配置:

代管式

gcloud beta container fleet mesh debug proxy-config POD_NAME.NAMESPACE \ 
    --type=TYPE \
    --membership=MEMBERSHIP_NAME \
    --location=MEMBERSHIP_LOCATION \
    --project=PROJECT_NAME
  • POD_NAME:您的 pod 的名称。
  • NAMESPACE:您的 pod 的命名空间。
  • TYPE:以下各项之一:集群、监听器、路由、端点、引导、日志、密钥、全部。
  • MEMBERSHIP_NAME:您的会员资格的名称。
  • MEMBERSHIP_LOCATION:您的会员资格所在的区域。您可以使用 gcloud container fleet memberships list --project FLEET_PROJECT_ID 检查成员资格的所在位置,只需将 FLEET_PROJECT_ID 替换为舰队项目 ID 即可。
  • PROJECT_NAME:项目名称。

集群内

使用 istioctl proxy-config 查看集群内控制平面的代理配置。如需了解详情,请参阅调试 Envoy 和 istiod

如果问题仍然存在,请参阅下一部分以检查您的问题是否为已知问题。

检查常见问题和解决方案

您可以在以下常见问题和解决方案部分中检查是否有您遇到的问题(按 Cloud Service Mesh 功能分组),以便节省时间:

如果没有解决您的问题,请参阅下一部分。

缩小问题的范围

Cloud Service Mesh 包含多种技术,这意味着某些类型的问题与特定功能或组件相关。每个组件都会生成各自有用的日志。在尝试手动分析其提供的信息之前,请先回答以下问题来缩小问题排查的范围:

  • 问题发生在控制层面还是数据平面(例如 istiod 或 Envoy 代理)?
  • 问题与哪个功能(例如网络、遥测、安全等)相关?
  • 是否存在服务网格流量丢失,或特定部署中的流量丢失?
  • 问题是否因无法扩缩服务网格中的流量而出现或更加严重?
  • 问题是否会导致延迟或其他性能问题?
  • 您能否根据需要重现该问题?
  • 问题是否在 Istio 和 GKE 进行配置变更后出现?
  • 服务网格内的流量是否增长或出现高峰?
  • 此集群是否启用了任何显著功能或拥有非典型部署?
  • 您是否观察到 CPU 利用率或内存利用率较高的情况?如果是,预期利用率是多少?
  • 是否存在配额限制?

查看相关日志和信息

缩小问题范围后,您可以更高效地分析某些日志和信息。如需了解 Cloud Service Mesh 生成的日志以及如何解读其中包含的信息,请参阅解读 Cloud Service Mesh 日志