排查本地连接器设置问题

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

排查错误 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 端口号。

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 v3TD 访问权限:

  • 验证权限: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 在内,应该有多个进程正在运行。
  •  netstat -tlpn 
    Envoy 管理端口 127.0.0.1:15000 应处于监听状态。

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

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