逐步排查 Cloud Service Mesh 问题

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

问题排查步骤

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

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

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

准备工作

  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。
    过时 控制平面已将配置发送到客户端,但未从客户端收到 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 日志