VMware vSphere Web Services SDK编程指南(十一)- 11.3 VMware 标准虚拟交换机
11.3 VMware 标准虚拟交换机ESXi 主机的网络设置包含如下部分: ■设置一个或多个虚拟交换机 虚拟交换机提供同一主机上的虚拟机之间的通信,并且支持 VMkernel 网络访问 VMotion、iSCSI 和 NFS。可以在每个主机上独立地设置虚拟交换机。 ■添加虚拟交换机端口组 虚拟机总是通过一个端口组访问网络,查看添加虚拟端口组。
11.3 VMware 标准虚拟交换机
ESXi 主机的网络设置包含如下部分:
■ 设置一个或多个虚拟交换机
虚拟交换机提供同一主机上的虚拟机之间的通信,并且支持 VMkernel 网络访问 VMotion、iSCSI 和 NFS。可以在每个主机上独立地设置虚拟交换机。
■ 添加虚拟交换机端口组
虚拟机总是通过一个端口组访问网络,查看添加虚拟端口组。
■ 指定虚拟机适配器
该适配器被指定为虚拟设备,配置为虚拟机设置的一部分,并在配置虚拟机中讨论。
■ 添加 VMkernel 网络接口,如要支持 iSCSI 存储或 VMotion。
■ 配置物理适配器(pnic),从主机到网络的真实连接
你可以通过 HostNetworkSystem.pnic 属性配置 pnic,该属性是一个 PhysicalNic 数据对象。你可以指定通过 VirtualSwitch.pnic 属性和虚拟交换机相关联的 pnics 组,它有一组物理网络适配器。
■ 主机网络配置(IP 路由,DNS,SNMP),查阅添加网络服务。
要使用一个 VMware 标准虚拟交换机,使用下列元素去配置 ESXi host 上的交换机:
■ HostNetworkSystem – 表示主机网络配置的托管对象
该对象的属性指向可以用于网络管理的网络数据对象,包括 HostDnsConfig 和 HostIpRouteConfig。
HostNetworkSystem 属性使你可以访问 HostNetCapabilities 和 HostNetworkInfo 数据对象,及访问、修改 HostNetworkConfig 数据对象。
HostNetworkSystem 包含检索和更改网络配置的方法。
■ HostNetworkConfig – 允许指定主机的网络配置
通过运行 HostNetworkSystem.UpdateNetworkConfig 方法应用配置。
■ Network – 表示网络可被主机或虚拟机访问,这个可能是一个物理网络或逻辑网络,如 VLAN
当你添加一个主机或 vCenter 服务器系统,或当你在 ESX/ESXi 主机上添加一个虚拟机时,一个网络会被自动地添加。
HostSystem.QueryHostConnectionInfo 和 Datacenter.QueryConnectionInfo 两者都返回一个 HostConnectInfo 数据对象,该对象描述了 当前的网络配置。
■ HostSNMPSystem – 支持 SNMP 设置。
11.3.1 vNetwork 标准交换机环境
vNetwork 标准交换机(vSS)可以在虚拟机之间内部路由流量(route traffic),并可以将虚拟机连接到外部网络。下图显示了 vSS Environment 元素。
vSS Environment
虚拟交换机
与 vSS 联网的中心是虚拟交换机本身,vSS 可以在虚拟机之间(相同主机上)发送网络流量(私有网络)或发送网络流量到一个外部网络(公共网络),公共网络使用以太网适配器关联物理主机(uplink 适配器)。
当两个或多个虚拟机被连接到相同的 vSS,它们之间的网络流量走的是本地路由的,如果一个 uplink 适配器连上 vSS,每个虚拟机可以访问该适配器连接到的外部的网络。
11.3.2 与 vSS 建立网络
你可以使用 HostNetworkSystem 托管对象去访问及操作 ESX/ESXi 系统的网络元素。
检索有关网络配置信息
■ HostNetworkConfig 对象的属性
通过 HostNetworkSystem.networkConfig 访问,可以检索到配置信息。这些信息是全面的,包括物理适配器、虚拟交换机、虚拟网络接口等等。
也可以使用 HostNetworkConfig 更改配置。
■ HostNetworkInfo 对象的属性
通过 HostNetworkSystem.networkInfo 访问,可以检索到 runtime 信息。
添加一个标准虚拟交换机
调用 HostNetworkSystem.AddVirtualSwitch 方法来添加一个或多个虚拟交换机,传入虚拟交换机的名称及一个 HostVirtualSwitchSpec 数据对象作为参数。
在 HostVirtualSwitchSpec 内可以指定 MTU、端口数、网络策略及桥接规范。该桥接规范指定虚拟交换机如何连接到物理适配器。目前支持的 bond bridge 通过使用物理设备列表和可选的信标探针(beacon probe)来测试与物理适配器的连接,从而提供了网络适配器(NIC)协作功能。
当创建完虚拟交换机后,可以将它连接到一个 pnic 连接,以连接到外部,以及一个 VMkernel 端口或一个端口组。
添加一个虚拟交换机的步骤
1 获取当前网络配置信息
使用属性收集器去获取 HostNetworkSystem 托管对象和它的若干属性,如 networkInfo。
2 定义一个指定虚拟交换机属性的 HostVirtualSwitchSpec
可以指定端口数量(56 到 4088 )及 HostNetworkPolicy。查阅 定义主机网络策略。
3 调用 HostNetworkSystem.AddVirtualSwitch 添加一个虚拟交换机
指定唯一名称及一个定义交换机属性的 HostVirtualSwitchSpec。
下面的 AddVirtualSwitch.java 代码片段说明了如何添加:
Example: 添加一个虚拟交换机
vswitchId = vSwitch42;
...
ManagedObjectReference nwSystem = configMgr.getNetworkSystem();
HostVirtualSwitchSpec spec = new HostVirtualSwitchSpec();
spec.setNumPorts(8);
service.addVirtualSwitch(nwSystem, vswitchId, spec);
System.out.println( " : Successful creating : "
+ vswitchId);
添加一个虚拟端口组
端口组允许你区分通过虚拟交换机的不同类型的流量,还可以使用端口组作为通信的边界,或者用于安全策略配置。
对于 ESXi 系统,默认的端口组是 Management Network 和 VM Network;
对于 ESX 系统,默认的端口组是 Service console 和 VM Network。
当你创建了一个端口组后,你可以给它指定一个 VLAN ID,VLANs 是 ESX/ESXi 网络的一个重要部分,因为它们可以允许你分组流量。如,你可以为 vMotion 创建单独的网段,用于管理或开发。使用 VLANs,对每个网段你只需有一个单独的 uplink 适配器及单个虚拟交换机连接到该适配器。这种设置可以极大地减少所需的交换机数量。
添加一个虚拟端口组步骤
1 定义一个 HostPortgroupSpec
对于每个端口组,你可以指定网络策略, VLAN ID,及端口组所属的虚拟交换机。
2 调用 HostNetworkSystem.AddPortGroup,传入 PortGroupSpec。
添加一个 VMKernel 网络接口
VMKernel 网络接口为 VMkernel TCP/IP 栈提供网络访问,如果你计划使用 VMotion、VMware FT、或者 iSCSI 及 NAS 存储,你必须为你的 ESX/ESXi 系统创建新的 VMKernel 端口,一个 VMKernel 端口由虚拟交换机上的一个端口和VMkernel接口组成。
添加一个 VMKernel 网络接口步骤
1 创建一个 HostVirtualNicSpec 数据对象
在对象内,你可以在 HostIpConfig 数据对象指定 IP 配置,对于 vSS,指定 portgroup 属性;对于 vDS,指定 distributedVirtualPort 属性。
2 调用 HostNetworkSystem.AddVirtualNic,传入 HostVirtualNicSpec。
3 然后使用 VMKernel 网络接口于 iSCSI 或 NAS,或者调用 HostVmotionSystem.SelectVnic 方法以使用这个 VMkernel NIC 于 VMotion。
下面的代码片段,从 AddVirtualNic 示例中抽取,说明了如何添加,该示例使用 cb.get_option 调用从命令行获取 IP 地址。
Example: 添加一个 VMKernel 网络接口
private HostVirtualNicSpec createVNicSpecification() {
HostVirtualNicSpec vNicSpec = new HostVirtualNicSpec();
HostIpConfig ipConfig = new HostIpConfig();
ipConfig.setDhcp(false);
ipAddr = cb.get_option("ipaddress");
ipConfig.setIpAddress(ipAddr);
ipConfig.setSubnetMask("255.255.255.0");
vNicSpec.setIp(ipConfig);
return vNicSpec;
....
HostVirtualNicSpec vNicSpec = createVNicSpecification();
service.addVirtualNic(nwSystem, portGroup, vNicSpec);
11.3.3 定义主机网络策略
当你配置主机网络,你可以为网络定义指定的策略,HostNetworkPolicy 数据对象类型为虚拟机及端口组描述了网络策略,如果没有明确为端口组指定设置,那么端口组将从与它关联的虚拟交换机中继承策略设置。
策略由以下数据对象定义,作为可用的 HostNetworkPolicy 的属性。
■ HostNicTeamingPolicy – 定义到物理网络的连接,这包括故障标准、活动和备用 NIC、故障转移和负载均衡信息。
■ HostNetworkSecurityPolicy – 定义网络安全策略
■ HostNetworkTrafficShapingPolicy – 为三个流量特性建立参数:平均带宽、峰值带宽和最大崩溃值。
也可以通过分配一个整型到 HostPortgroupSpec.vlanid 策略指定 VLAN 策略,VMkernel 负责在通过虚拟交换机时对包进行标记和取消标记。
可查阅 API 说明书中的 HostPortgroupSpec and HostNetworkPolicy 数据对象。
11.3.4 NIC Teaming
虚拟机通过虚拟交换机连接公网,而虚拟交换机又连接到物理网络接口(pnic)。当物理适配器或适配器的网络连接失败,相关的虚拟交换机和所有端口组和虚拟机的连接都丢失了。
为了解决这个问题,你可以设置你的环境,以便每个虚拟交换机连接到两个uplink 适配器,每个 uplink 适配器连接到两个不同的物理交换机。然后该 team 可以在部分或全部成员之间共享物理和虚拟网络之间的通信量,或者在硬件故障或网络中断发生时提供被动故障转移。
你可以通过设置 HostNetworkPolicy 设置 NIC 组(teaming), HostNicTeamingPolicy 的路径是:HostConfigSpec.network.vswitch[].spec.policy.nicTeaming。
如果你要给一个虚拟交换机指定 NIC 组,HostVirtualSwitchSpec.bridge 属性必须设置为 HostVirtualSwitchBondBridge。
NIC Teaming
11.3.5 设置 IPv6 网络
vSphere 支持 Internet 协议版本 4(IPv4) 和 Internet 协议 6(IPv6) 环境,使用 IPv6,可以在 IPv6 环境中使用诸如 NFS 之类的 vSphere 特性。
vSphere 中的一个特定于 IPv6 的配置涉及到提供 IPv6 地址,要么通过输入静态地址,要么通过使用 DHCP 来实现所有相关的 vSphere 网络接口。IPv6 地址也可以使用由路由器广告发送的无状态自动配置来配置。
你可以通过修改 HostIpConfig.ipV6Config 属性为主机设置 IPv6 网络,该属性是一个 HostIpConfigIpV6AddressConfiguration 数据对象,HostIpConfigIpV6AddressConfiguration 对象可指定自动配置是否启用,ipV6 地址的 DHCP 是否启用,及一组 IPv6 地址(HostIpConfigIpV6Address 数据对象)。
HostIpConfigIpV6Address 可以允许指定 IPv6 地址的所有方面,包括地址状态、地址(除非 DHCP 启用)、生命周期、操作、起源、前缀长度。
下面的代码片段说明了设置 VMkernel NIC 从路由广播及通过 DHCP 获取一个自动的 IPv6 地址,当调用该代码片段程序,用户在命令行提供该 IP 地址,该示例使用 cb.get_option 实用程序调用来检索地址。
Example: IPv6 设置
private HostVirtualNicSpec createVNicSpecification() {
HostVirtualNicSpec vNicSpec = new HostVirtualNicSpec();
HostIpConfig ipConfig = new HostIpConfig();
//setting the vnic to get an automatic ipv6 address from router advertisements
// and through dhcp
ipV6Config = new HostIpConfigIpV6AddressConfiguration();
ipV6Config.setAutoConfigurationEnabled(true);
ipV6Config.setDhcpV6Enabled(true);
ipConfig.setIpV6Config(ipV6Config);
vNicSpec.setIp(ipConfig);
return vNicSpec;
....
11.3.6 添加网络服务
可以通过使用 HostConfigManager 属性及方法为 ESXi 系统设置网络服务。
添加一个 NTP
HostConfigManager.dateTimeSystem 属性包含一个 HostDateTimeSystem 数据对象,该对象允许执行 NTP 和日期和时间相关的配置。:
■ 查询、更新日期时间信息,通过使用其中一个在 HostDateTimeSystem 定义的方法。
■ 修改 HostDateTimeSystem.dateTimeInfo 属性(该属性包含一个 HostDateTimeInfo 对象)来设置 NTP,该 NTP 信息存放在 HostDateTimeInfo.ntpConfig 属性中,该属性是一个 HostNtpConfig 对象,HostNtpConfig 对象的 server 属性包含时间服务器列表,由 IP 地址或完全限定域名指定。
重要:你可以通过使用 HostServiceSystem 对象启动或停止 NTP 守护进程及检索有关 NTP 的信息。
设置 IP 路由配置
可以使用 HostNetworkSystem.UpdateIPRouteConfig 方法为 ESX/ESXi 系统指定 IP 路由配置,该方法以一个 HostIPRouteConfig 数据对象作为参数,在这个对象里,你可以指定默认网关地址及 IPv6 网关地址,也允许你指定在 ESX 上的服务控制台网关设备。
设置 SNMP
简单网络管理协议(SNMP)允许管理程序监控及控制网络设备。vCenter 服务器和 ESX/ESXi 系统包括不同的 SNMP 代理:
■ vCenter 服务器中包含的 SNMP 代理可以在 vCenter 服务器系统启动时发送陷阱(trap),或者在 vCenter 服务器上警报触发时发送。vCenter 服务器 SNMP 代理仅作为一个陷阱发射器起作用,不支持其它 SNMP 操作,如 GET。
■ ESX/ESXi 4.0 及之后的系统包含一个嵌入在 ESX/ESXi 主机后台进程(hostd)的 SNMP 代理,该代理可以发送 traps 并接收诸如 GET 请求之类的轮询请求。
在 ESX/ESXi 4.0 之前发行的 ESX 版本都包含一个基于 Net-SNMP 的代理,你可以在 ESX 4.x 继续使用基于 Net-SNMP 的代理和你的硬件供应商和其他第三方管理应用程序提供的 MIBs 一起。但是,要使用 VMware MIB 文件,必须使用嵌入式 SNMP 代理,要同时使用基于 Net-SNMP 的代理和嵌入式 SNMP 代理,请让其中一个代理侦听非缺省端口。默认情况下,两个代理使用相同的端口。
该 SDK 支持 SNMP 代理配置,通过 HostSnmpSystem 管理对象。该对象包含两个方法, ReconfigureSnmpAgent 和 SendTestNotification。
■ HostSnmpSystem.ReconfigureSnmpAgent 允许你通过一个 HostSnmpConfigSpec 对象指定代理属性,该数据对象可以让你在 HostSnmpDestination 对象内指定 SNMP 端口、只读连接及陷阱目标(trap targets) ,HostSnmpDestination 对象允许你指定 连接、主机及端口端口侦听通知。
■ HostSnmpSystem.SendTestNotification 允许你测试配置。
在 HostSnmpSystem.limits 属性中的 HostSnmpSystemAgentLimits 数据对象指定代理的限制。
11.4 示例代码参考
Networking 的示例应用代码在如下几个程序中(只列出了 java 文件),这些 vSphere SDK 示例程序说明了如何使用一些本章所讨论到的托管对象:
AddVirtualNic.java
AddVirtualSwitch.java
AddVirtualSwitchPortGroup.java
RemoveVirtualNic.java
RemoveVirtualSwitch.java
RemoveVirtualSwitchPortGroup.java
原文:
VMware vSphere 6.5 Documentation Center:VMware Standard Virtual Switch
更多推荐
所有评论(0)