VMware Cloud Director service 中将 VMware Cloud Director 实例与 SDDC 关联后,您可能无法执行各种任务。

问题

使用 VMware Proxy ServiceVMware Cloud Director 实例关联到 SDDC 后,vCenter Server 可能会显示为“已断开连接”。如果您尝试刷新或重新连接,会导致故障并引发网络连接异常,例如 SocketTimeoutException

您无法打开虚拟机控制台,也无法上载和下载 OVF 和 OVA 文件。

您无法添加、编辑或删除网络资源,例如网络池、外部网络或 Edge 网关。

VMware Cloud DirectorNSX 进行 API 调用时,在 vcd-debug-container.log 中,您会看到类似于 Received Response: 503 的条目。

注: 在较新版本的 VMware Cloud Director service 代理客户端设备中,可以使用 diagnose.sh 故障排除命令来诊断设备的问题。请参见 如何对 VMware Cloud Director service 代理客户端设备进行故障排除。如果尝试运行 diagnose.sh 命令并导致错误,请按照下面所述的故障排除说明进行操作。

原因

该问题之所以会发生,是因为 VMware Cloud Director 实例无法通过 VMware Proxy ServicevCenter ServerESXi 主机或 NSX 进行通信。

造成这种情况的原因可能有两个。

VMware Cloud DirectorVMware Proxy Service 之间不能成功进行通信,或者 VMware Cloud Director 与在将实例关联到 VMware Cloud on AWS SDDC 期间部署的代理虚拟机之间可成功进行通信,但代理服务与 vCenter ServerNSX 之间的连接失败。

前提条件

  1. vCenter Server UI 的资源池中找到在执行 SDDC 与 VMware Cloud Director 实例关联时部署的 VMware 反向代理客户端虚拟机。
  2. root 身份登录到反向代理客户端虚拟机的操作系统。
    提示: 您可以在虚拟机 vApp 属性的 root-password 下找到 root 用户的密码。

解决方案

  • 要验证虚拟机是否具有网络连接,请运行 transporter-status.sh 命令。
    如果虚拟机已连接,该命令会将状态返回为 UP,并将 command_channel_1command_channel_2 的状态返回为 CONNECTED
  • 确认 VMware 反向代理客户端虚拟机具有有效的 IPv4 地址。
    1. vCenter Server 的资源池中导航到该虚拟机,然后检查该虚拟机是否具有有效的 IPv4 地址。
    2. 如果虚拟机没有有效的 IPv4 地址,请选择以下选项之一。
      • 单击“网络”选项卡,然后选择具有有效 DHCP 配置文件的网络。
      • 登录到虚拟机的操作系统,然后通过运行以下命令手动为虚拟机分配 IPv4 地址。
        sudo ifconfig ens160 IPv4-address netmask mask
        sudo route add default gw gateway-address ens160
  • 对存储 VMware 反向代理客户端虚拟机最新映像的 URL 运行 cURL 请求。
  • 从 VMware 反向代理客户端虚拟机的操作系统中,对 VMware 代理服务运行 cURL 请求。
    curl -v <VMware-Proxy-Service-IP-address>
    您可以在 VMware 反向代理客户端虚拟机 vApp 属性的 reverse-proxy-host 下找到 VMware 代理服务 IP 地址。
    该命令返回的结果与以下内容类似。
    Connected to <VMware-Proxy-Service-IP-address> port 80
  • 确认不存在阻止 VMware 反向代理客户端虚拟机对 vCenter ServerNSXESXi 执行 ping 的防火墙规则或任何其他网络问题。
    如果允许的目标列表包含 CIDR 表示法,并且您无法访问其中的一个主机,请验证您是否可以对特定主机执行 ping。如果可以成功执行 ping,请将主机 IP 地址或 FQDN 作为单独的条目添加到列表中。
  • 确认 VMware 反向代理客户端虚拟机正在使用有效的 API 令牌。
    您可以在 VMware 反向代理客户端虚拟机 vApp 属性的 csp-token 下找到当前的 API 令牌。
    1. https://console.cloud.vmware.com/csp/gateway/am/api/auth/api-tokens/authorize 运行 POST 请求,并在请求正文中包含 refresh_token={your-api-token-value}
      例如:
      curl --location --request POST 'https://console.cloud.vmware.com/csp/gateway/am/api/auth/api-tokens/authorize' \
      --header 'Accept: application/json' \
      --header 'Content-Type: application/x-www-form-urlencoded' \
      --header 'Cookie: incap_ses_8217_1285679=sJfafQlQfgUmPGK0X6YIckRAaWIAAAAAZ5DsTuKH0eALPsXXCrk1Lw==; nlbi_1285679=qGFfKYa/khghkd06+iiRRwAAAAA7h7npdR2O1o9/MIk2Plre' \
      --data-urlencode 'refresh_token=<your-csp-token>'

      如果您的 API 令牌已过期,该请求将返回 Invalid Token400 Bad Request 错误。请参见如何续订 VMware 反向代理客户端虚拟机的 API 令牌

      如果您的 API 令牌有效,该请求将返回包含访问令牌的响应,例如:
      {
        "id_token": "eyJhbGciOiJS.......srRmGX9eYKOKMA",
        "token_type": "bearer",
        "expires_in": 1799,
        "scope": "ALL_PERMISSIONS openid group_ids group_names",
        "access_token": "eyJhbGciOiJSU.........Q6Y9Yohgw",
        "refresh_token": "B4STbh2fYFmjI9ABCv..............XeRniDiO4cBJjF82sWWprZfm7OLHn"
      }

      相关部分是 access_token,这部分始终以 "ey" 开头,并且是一个 JSON Web 令牌 (JWT)。

    2. 复制 access_token,然后将其粘贴到 https://jwt.io/ 中的编码 (Encoded) 部分。
    3. 确认在负载中,context_name 包含您 VMware Cloud 组织的组织 ID,并且 Perms 部分包含 provider:network 角色。
      如果不满足其中任何一个条件,请续订您的 API 令牌。请参见 如何续订 VMware 反向代理客户端虚拟机的 API 令牌