本页面提供了分步说明,可帮助您排查 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 错误,则可能是因为 Google APIs Service Agent 服务账号未获得为本地应用启用 IAP 时所需的 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 角色,然后重试。