本页面提供帮助您排查 IAP 本地连接器配置问题的逐步说明。如需了解更多问题排查信息,请参阅 Traffic Director 调试。
排查错误 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 端口号。
shell curl -x -v localhost:${envoy_port}
如果端点无法访问,请检查以下内容:
- 查看
/var/log/envoy/envoy.err.log
中是否有错误日志。如果没有错误日志,请运行以下命令来检查 Traffic Director 是否已启用并且能够配置 Envoy:sudo curl 0.0.0.0:15000/config_dump
- 验证
TRAFFICDIRECTOR_INTERCEPTION_LISTENER
已设置。如果TRAFFICDIRECTOR_INTERCEPTION_LISTENER
未设置,则 Traffic Director 无法配置 Envoy。 - 检查每个监听器中是否有任何错误消息。
Envoy 和 Traffic Director 账号权限未设置
如果您在 envoy.err.log
中看到 GRPC 403
错误,或者在 Envoy 配置中没有看到 TRAFFICDIRECTOR_INTERCEPTION_LISTENER
,则说明您可能未设置正确的账号权限。
验证虚拟机服务账号具有 xDS v3
的 TD
访问权限:
- 验证权限:https://cloud.google.com/traffic-director/docs/prepare-for-envoy-setup#grant
- 验证权限:https://cloud.google.com/traffic-director/docs/prepare-for-envoy-setup#enable-service
排查 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 访问通道。
- 确保已启用 VM Manager (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
角色,然后重试。