本页面提供帮助您排查 IAP 本地连接器配置问题的逐步说明。如需了解其他 问题排查信息,请参阅 Cloud Service Mesh 调试。
排查错误 500 问题
以下是各种问题和可能的解决方案,可帮助您解决尝试访问应用时收到的 500 错误。
本地应用未连接到 Google Cloud 网络
您的本地应用可能未连接到 Google Cloud 网络。通过从其中一个本地连接器 Compute Engine 实例 ping 本地应用来验证连接。 如果本地连接器端点无法访问,请先调试网络连接和设置,然后再继续操作。
Envoy 未正确安装在虚拟机中
完成以下步骤以验证 Envoy 已正确安装:
- 从本地连接器登录其中一个 Compute Engine 虚拟机。本地连接器虚拟机名称以
opc-on-prem-app-deployment-ig-${app}开头。 - 在 Cloud 控制台中,验证
opc-on-prem-app-deployment-gclb-urlmap负载均衡后端服务健康检查为绿色。 - 如果后端服务未显示为健康,请通过 SSH 连接到其中一个实例:
gcloud compute ssh INSTANCE_NAME --zone=ZONE_NAME
通过发出以下命令来验证 Envoy 正常运行:
除了ps aux | grep envoy
grep envoy之外,还应有多个进程正在运行。输出示例:
envoy 943 0.0 0.0 5488 3076 ? Ss 06:25 0:00 /bin/bash /usr/local/bin/run-proxy.sh envoy 944 0.1 1.5 178928 57352 ? Sl 06:25 1:23 /usr/local/bin/envoy --config-path /usr/local/etc/ envoy/envoy-proxy-bootstrap.json --allow-unknown-static-fields --disable-hot-restart --log-level info --drain-time- s 60验证已在
/var/log/envoy/创建 Envoy 日志目录。通过发出以下命令,确保虚拟机可以访问 gce-mesh 存储桶:
gcloud storage cp gs://gce-mesh/service-proxy-agent/releases/service-proxy-agent-0.2.tgz .
如果此步骤中的任何验证失败,则表明 Envoy 未正确安装。如需了解详情,请查看 /var/log/daemon.log 中的启动日志。
如果通过上述步骤,您观察到 Envoy 未在运行,一个可能的原因是 VPC Service Controls。虚拟机中的启动脚本会从 gce-mesh 存储桶下载 Envoy 映像。如果 VPC Service Controls 规则不允许连接,则本地连接器部署将不起作用。
为确保 Envoy 正确安装,请在宿主项目的 VPC Service Controls 中允许访问 gce-mesh 存储桶。此外,请确保 VPC 具有允许流量流向公共互联网的路由规则。这将允许 Envoy 部署。
如需了解详情,请参阅
入站和出站规则。
本地应用未连接到 Envoy
如果您可以从虚拟机 ping 通本地应用,但无法使用本地连接器,则可能是 Envoy 无法连接到该应用。
如需验证 Envoy 可以连接到本地应用,请尝试从运行 Envoy 的机器调用 Envoy。使用 SSH 连接到虚拟机 opc-on-prem-app-deployment-ig-${app},然后运行以下命令。您可以在实例组 > 详细信息 > 端口名称映射 中找到 Envoy 端口号。
curl -x -v localhost:${envoy_port}如果端点无法访问,请检查以下内容:
- 查看
/var/log/envoy/envoy.err.log中是否有错误日志。如果没有错误日志,请运行以下命令来检查 Cloud Service Mesh 是否已启用并且能够配置 Envoy:sudo curl 0.0.0.0:15000/config_dump
- 验证
TRAFFICDIRECTOR_INTERCEPTION_LISTENER已设置。如果TRAFFICDIRECTOR_INTERCEPTION_LISTENER未设置,则 Cloud Service Mesh 无法配置 Envoy。 - 检查每个监听器中是否有任何错误消息。
Envoy 和 Cloud Service Mesh 账号权限未设置
如果您在 envoy.err.log 中看到 GRPC 403 错误,或者在 Envoy 配置中没有看到 TRAFFICDIRECTOR_INTERCEPTION_LISTENER,则说明您可能未设置正确的账号权限。
验证虚拟机服务帐号具有 xDS v3 的 TD 访问权限:
- 验证权限:准备设置使用 Envoy 的 Cloud Service Mesh
- 验证账号:启用服务账号
排查 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误
如果浏览器显示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误而不
重定向到登录页面,请在
Google Cloud 负载均衡器详情页面上验证证书的状态。
请注意,预配 Google 管理的证书最多可能需要 60 分钟时间。
排查 Envoy 安装问题
如果本地连接器已成功部署且证书已预配,但连接仍然失败,则可能表明 Envoy 未正确安装在虚拟机上。
如需验证 Envoy 是否已安装,请通过 SSH 连接到其中一个虚拟机,然后运行以下命令:
除了ps aux | grep envoy
grep envoy之外,还应有多个进程正在运行。 Envoy 管理端口 127.0.0.1:15000 应处于监听状态。netstat -tlpn
如果上述任何操作失败,请执行以下操作来缓解问题:
- 确保在部署连接器的子网上启用 专用 Google 访问通道。
- 确保已启用 虚拟机管理器 (OS Config API)。
排查 IamMemberBinding 资源部署失败问题
如果本地连接器正在部署或更新,并且遇到与 IamMemberBinding 资源相关的
PERMISSION_DENIED 错误,则可能是
因为在
为本地应用启用 IAP 时,未向 Google APIs Service Agent 服务账号授予所需的
OWNER 角色。
部署错误示例:
bind-iam-policy: {"ResourceType":"gcp-types/cloudresourcemanager-v1:virtual.projects.iamMemberBinding","ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"message":"Policy update access denied.","status":"PERMISSION_DENIED","statusMessage":"Forbidden","requestPath":"https://cloudresourcemanager.googleapis.com/v1/projects/<project-ID>:setIamPolicy","httpMethod":"POST"}}
bind-storage-admin-account-iam-policy: {"ResourceType":"gcp-types/cloudresourcemanager-v1:virtual.projects.iamMemberBinding","ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"message":"Policy update access denied.","status":"PERMISSION_DENIED","statusMessage":"Forbidden","requestPath":"https://cloudresourcemanager.googleapis.com/v1/projects/<project-ID>:setIamPolicy","httpMethod":"POST"}}
如果您在部署时看到这些错误,请验证是否已向 Google APIs Service Agent 服务账号授予 OWNER 角色,然后重试。