在 VMware Cloud Director service 中将 VMware Cloud Director 实例与 SDDC 关联后,您可能无法执行各种任务。
问题
使用 VMware Proxy Service 将 VMware Cloud Director 实例关联到 SDDC 后,vCenter Server 可能会显示为“已断开连接”。如果您尝试刷新或重新连接,会导致故障并引发网络连接异常,例如 SocketTimeoutException
。
您无法打开虚拟机控制台,也无法上载和下载 OVF 和 OVA 文件。
您无法添加、编辑或删除网络资源,例如网络池、外部网络或 Edge 网关。
当 VMware Cloud Director 对 NSX 进行 API 调用时,在 vcd-debug-container.log 中,您会看到类似于 Received Response: 503
的条目。
原因
该问题之所以会发生,是因为 VMware Cloud Director 实例无法通过 VMware Proxy Service 与 vCenter Server、ESXi 主机或 NSX 进行通信。
造成这种情况的原因可能有两个。
VMware Cloud Director 与 VMware Proxy Service 之间不能成功进行通信,或者 VMware Cloud Director 与在将实例关联到 VMware Cloud on AWS SDDC 期间部署的代理虚拟机之间可成功进行通信,但代理服务与 vCenter Server 或 NSX 之间的连接失败。
前提条件
- 在 vCenter Server UI 的资源池中找到在执行 SDDC 与 VMware Cloud Director 实例关联时部署的 VMware 反向代理客户端虚拟机。
- 以 root 身份登录到反向代理客户端虚拟机的操作系统。
提示: 您可以在虚拟机 vApp 属性的
root-password
下找到
root 用户的密码。
解决方案
- 要验证虚拟机是否具有网络连接,请运行
transporter-status.sh
命令。
如果虚拟机已连接,该命令会将状态返回为
UP
,并将
command_channel_1
和
command_channel_2
的状态返回为
CONNECTED
。
- 确认 VMware 反向代理客户端虚拟机具有有效的 IPv4 地址。
- 在 vCenter Server 的资源池中导航到该虚拟机,然后检查该虚拟机是否具有有效的 IPv4 地址。
- 如果虚拟机没有有效的 IPv4 地址,请选择以下选项之一。
- 对存储 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 Server、NSX 和 ESXi 执行 ping 的防火墙规则或任何其他网络问题。
如果允许的目标列表包含 CIDR 表示法,并且您无法访问其中的一个主机,请验证您是否可以对特定主机执行 ping。如果可以成功执行 ping,请将主机 IP 地址或 FQDN 作为单独的条目添加到列表中。
- 确认 VMware 反向代理客户端虚拟机正在使用有效的 API 令牌。
您可以在 VMware 反向代理客户端虚拟机 vApp 属性的
csp-token
下找到当前的 API 令牌。
- 对 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 Token
或 400 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)。
- 复制
access_token
,然后将其粘贴到 https://jwt.io/ 中的编码 (Encoded) 部分。
- 确认在负载中,
context_name
包含您 VMware Cloud 组织的组织 ID,并且 Perms
部分包含 provider:network 角色。