逐步排查 Cloud Service Mesh 问题
本部分介绍如何排查和解决使用 Cloud Service Mesh 时遇到的问题。如果您需要其他帮助,请参阅获取支持。
问题排查步骤
请按照以下常规步骤排查 Cloud Service Mesh 问题:
- 使用自动配置验证工具。
- 检查遇到的常见问题是否存在已知的解决方案。
- 缩小问题的范围。
- 查看相关日志和信息。
- 收集诊断日志并寻求帮助。
Cloud Service Mesh 诊断工具可以检测常见的配置问题。按照这些说明安装问题排查工具。
准备工作
确保您的 kubeconfig 文件中包含集群的 kubeconfig 上下文。如果没有,请运行以下命令:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CLUSTER_LOCATION --project=PROJECT_NAME
替换以下内容:
CLUSTER_NAME
:您的集群的名称。CLUSTER_LOCATION
:集群的可用区或区域。PROJECT_NAME
:项目名称。
验证是否已创建应用默认凭据。如果没有,请运行以下命令之一:
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 日志。