如果具有单独的 ESXi 主机,您无法通过基于 Web 的 vSphere Web Client 访问主机虚拟机。在这种情况下,您可以使用该过程将虚拟机连接到 NSX 逻辑交换机。
该过程中显示的示例说明了如何将名为 app-vm 的虚拟机连接到名为 app-switch 的逻辑交换机。
前提条件
- 必须在已添加到 NSX Fabric 的 Hypervisor 上托管虚拟机。
- Fabric 节点必须具有 NSX 管理平面 (MPA) 和 NSX 控制平面 (LCP) 连接。
- 必须将 Fabric 节点添加到传输区域中。
- 必须创建一个逻辑交换机。
- 您必须具有 NSX Manager API 的访问权限。
- 您必须具有虚拟机的 VMX 文件的写入访问权限。
过程
- 通过使用(基于安装的)vSphere Client 应用程序或某种其他虚拟机管理工具,编辑虚拟机并添加一个 VMXNET 3 以太网适配器。
选择任何命名的网络。您将在后面的步骤中更改网络连接。
- 使用 NSX API 发出 GET https://<nsx-mgr>/api/v1/fabric/virtual-machines/<VM-ID> API 调用。
在结果中,找到虚拟机的 externalId。
例如:
GET https://<nsx-mgr>/api/v1/fabric/virtual-machines/60a5a5d5-ea2b-407e-a806-4fdc8468f735
{
"resource_type": "VirtualMachine",
"id": "60a5a5d5-ea2b-407e-a806-4fdc8468f735",
"display_name": "app-vm",
"compute_ids": [
"instanceUuid:50066bae-0f8a-386b-e62e-b0b9c6013a51",
"moIdOnHost:5",
"externalId:50066bae-0f8a-386b-e62e-b0b9c6013a51",
"hostLocalId:5",
"locationId:564dc020-1565-e3f4-f591-ee3953eef3ff",
"biosUuid:4206f47d-fef7-08c5-5bf7-ea26a4c6b18d"
],
"external_id": "50066bae-0f8a-386b-e62e-b0b9c6013a51",
"type": "REGULAR",
"host_id": "cb82b0fa-a8f1-11e5-92a9-6b7d1f8661fa",
"local_id_on_host": "5"
}
- 关闭虚拟机电源并从主机中取消注册虚拟机。
您可以使用虚拟机管理工具或 ESXi CLI(如下所示)。
[user@host:~] vim-cmd /vmsvc/getallvms
Vmid Name File Guest OS Version Annotation
5 app-vm [ds2] app-vm/app-vm.vmx ubuntuGuest vmx-08
8 web-vm [ds2] web-vm/web-vm.vmx ubuntu64Guest vmx-08
[user@host:~] vim-cmd /vmsvc/power.off 5
Powering off VM:
[user@host:~] vim-cmd /vmsvc/unregister 5
- 从 NSX Manager UI 中,获取逻辑交换机 ID。
例如:
- 修改虚拟机的 VMX 文件。
删除
ethernet1.networkName = "<name>" 字段并添加以下字段:
- ethernet1.opaqueNetwork.id = "<logical switch's ID>"
- ethernet1.opaqueNetwork.type = "nsx.LogicalSwitch"
- ethernet1.externalId = "<VM's externalId>"
- ethernet1.connected = "TRUE"
- ethernet1.startConnected = "TRUE"
例如:
OLD
ethernet1.pciSlotNumber = "224"
ethernet1.virtualDev = "vmxnet3"
ethernet1.networkName = "VM Network"
ethernet1.addressType = "vpx"
ethernet1.generatedAddress = "00:50:56:86:7b:d7"
ethernet1.uptCompatibility = "true"
ethernet1.present = "TRUE"
NEW
ethernet1.pciSlotNumber = "224"
ethernet1.virtualDev = "vmxnet3"
ethernet1.addressType = "vpx"
ethernet1.generatedAddress = "00:50:56:86:7b:d7"
ethernet1.uptCompatibility = "true"
ethernet1.present = "TRUE"
ethernet1.opaqueNetwork.id = "22b22448-38bc-419b-bea8-b51126bec7ad"
ethernet1.opaqueNetwork.type = "nsx.LogicalSwitch"
ethernet1.externalId = "50066bae-0f8a-386b-e62e-b0b9c6013a51"
ethernet1.connected = "TRUE"
ethernet1.startConnected = "TRUE"
- 在 NSX Manager UI 中,添加一个逻辑交换机端口,然后使用虚拟机的 externalId 进行 VIF 连接。
- 重新注册虚拟机,然后打开虚拟机电源。
您可以使用虚拟机管理工具或 ESXi CLI(如下所示)。
[user@host:~] vim-cmd /solo/register /path/to/file.vmx
For example:
[user@host:~] vim-cmd solo/registervm /vmfs/volumes/355f2049-6c704347/app-vm/app-vm.vmx
9
[user@host:~] vim-cmd /vmsvc/power.on 9
Powering on VM:
结果
在
NSX Manager UI 中的
管理器模式下,选择
。找到与虚拟机的 externalId 匹配的 VIF 连接 ID,并确保管理和运行状态为“已连接/已连接”。
如果两个虚拟机连接到同一逻辑交换机并在同一子网中配置了 IP 地址,则它们应该可以 ping 通对方。
下一步做什么
添加逻辑路由器。
您可以监控逻辑交换机端口上的活动以解决问题。请参阅NSX 管理指南中的“监控逻辑交换机端口活动”。