排查本地连接器设置问题

本页面提供了分步说明,可帮助您排查 IAP 本地连接器配置问题。如需了解更多问题排查信息,请参阅 Cloud Service Mesh 调试。

排查错误 500 问题

以下是各种问题和可能的解决方案,可帮助您解决尝试访问应用时收到的 500 错误。

本地应用未连接到 Google Cloud 网络

您的本地应用可能未连接到Google Cloud 网络。通过从其中一个本地连接器 Compute Engine 实例对本地应用执行 ping 操作来验证连接性。如果本地连接器端点无法访问,请先调试网络连接和设置,然后再继续。

Envoy 未正确安装在虚拟机中

完成以下步骤以验证 Envoy 已正确安装:

  1. 从本地连接器登录其中一个 Compute Engine 虚拟机。本地连接器虚拟机名称以 opc-on-prem-app-deployment-ig-${app} 开头。
  2. 在 Cloud 控制台中,验证 opc-on-prem-app-deployment-gclb-urlmap 负载均衡后端服务健康检查是否为绿色。
  3. 如果后端服务未显示为健康,请通过 SSH 连接到其中一个实例:
    gcloud compute ssh INSTANCE_NAME --zone=ZONE_NAME
  4. 通过发出以下命令来验证 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
    
  5. 验证已在 /var/log/envoy/ 创建 Envoy 日志目录。

  6. 通过发出以下命令,确保虚拟机可以访问 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 访问权限:

排查 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 之外,应该还有多个进程在运行。
  •  netstat -tlpn 
    Envoy 管理端口 127.0.0.1:15000 应处于监听状态。

如果上述任何操作失败,请采取以下措施来缓解问题:

  1. 确保在部署连接器的子网上启用了专用 Google 访问通道。
  2. 确保虚拟机管理器 (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 角色,然后重试。