现在我们所说的NSX DC,早已不是之前那个狭义的、只面向VMware虚拟化的软件定义网络和安全产品。在市场上,依托专有硬件,配套软件实现SDN的产品也可称得上多家争鸣、各有千秋;而VMware NSX最与众不同的优势可归纳为:
- ▪NSX软件不受到底层硬件的限制,适用于ANY NETWORK或者说ANY TRANSPORT;
- ▪强大的分布式防火墙策略适用于任意虚拟化指标,提供全面的端到端安全防护
虽然VMware NSX有上述优势,不过在国内相当长的一段时间内,只有NSX for vSphere解决方案,只能适用于VMware ESXi作为服务器虚拟化平台的场景。虽然NSX-V能提供包括数据中心双活、灾备等功能,但无法兼容并包异构化的虚拟化平台或者公有云。
在今天的分享中,我将演示NSX-T如何打造一个跨VMware与KVM环境的二层逻辑网络,实现异构化虚拟化平台上运行的多台虚拟机之间的二层通信。
0x04-01:逻辑交换机实现二层通信
==========================
- ▪访问NSXMGR,在高级网络和安全-网络-交换页面,添加新的交换机
- ▪在Overlay传输区域,添加一个新的逻辑交换机T1-dev-web-tier
- ▪采用默认的交换配置文件定义
- ▪同样地,在VLAN传输区域,创建一个T1-dev-jump-extermal逻辑交换机(以后用,今天的分享暂时用不到)
- ▪重复上述操作,完成所有的逻辑交换机创建:
T1-dev-web-tier、T1-dev-app-tier、T1-dev-db-tier和T1-dev-jump-external
- ▪与标准交换机或者分布式交换机上的虚拟机端口组不同,N-VDS上的虚拟机端口组无法被VC管理,图标显示也不相同
- ▪迁移虚拟机上联网络
- ▪选择将web-01a和web-02a迁移到T1-dev-web-tier逻辑交换机
- ▪选择将app-01a迁移到T1-dev-app-tier逻辑交换机
- ▪访问web-01a的命令行,测试与同样在VMware环境的web-03a二层连通性,可以看到连接到同一个逻辑交换机后,web-01a和web-03a已经互联
- ▪由于web-01a和app-01a并非处于相同的网络,在没有配置逻辑路由器的情况下,三层互访不连通
- ▪在逻辑交换机清单页面,根据逻辑端口的开放数量,可以了解连接到该逻辑交换机的虚拟机数量信息
在端口清单页面,可以查看到这些虚拟机的详细信息
- ▪对于KVM的虚拟机,访问KVM命令行,查看该虚拟机连接到openvswitch交换机的interfaceid
# virsh list --all
# virsh dumpxml VMNAME | grep -i interfaceid
可以看到,该虚拟机的interfaceid是:0b3b294b-1116-4966-a3e2-3f214a073a36
- ▪通过添加逻辑端口的方式,将KVM上的虚拟机连接到对应的逻辑交换机
如:将web-02a连接到T1-dev-web-tier逻辑交换机
- ▪使用默认的交换配置文件
- ▪等待1分钟左右,在正常情况下,可以看到该虚拟机的管理状态和操作状态均为开启,说明已经连接到相应的逻辑交换机
- ▪在KVM主机上运行的web-02a底层,测试与vSphere主机上运行的web-01a和web-03a二层连通性
可以看到连接到T1-dev-web-tier的三台异构平台的虚拟机已经实现了二层互通
- ▪重复上述步骤,将db-01a连接到T1-dev-db-tier逻辑交换机
- ▪在交换机清单页面,可以看到端口数量增加了对应的数量
可以看到,借助于NSX-T,位于不同虚拟化Hypervisor平台的三台Web虚拟机实现了二层互通:
Web-01a,10.0.10.11/24,位于ESXi虚拟化主机
Web-02a,10.0.10.12/24,位于KVM虚拟化主机
Web-03a,10.0.10.13/24,位于ESXi虚拟化主机
对于VMware环境,由于计算管理器vCenter可以实现对清单中所有对象的集中管理,因此将虚拟机连接到逻辑网络的操作相对KVM主机要简单许多。
此外,如果各位按照我的分享,尝试将KVM上的虚拟机连接到某一台逻辑交换机,在默认情况下,可能会遇到一个问题,即通过# virsh dumpxml 虚拟机名 | grep -i interface 无法显示任何虚拟机上联接口的ID信息。
在浏览VMware官方社区想找出这个问题的解决办法过程中,我也注意到这可能不是一个偶发现象,大家普遍都遇到过这个问题;现在我将解决办法分享给大家。
造成这个现象的原因,是管理员在KVM环境创建的虚拟机,默认情况下并没有连接到openvswitch;
在开启电源后,通过virsh dumpxml命令无法查看到该虚拟机的interfaceid,需要有一些特殊的操作,解决办法如下:
- ▪通过可视化界面,完成虚拟机操作系统的安装
# virt-manager
- ▪完成虚拟机操作系统的安装,如安装VMware Photon OS
- ▪完成网络、iptables等网络设置
- ▪查看运行的虚拟机清单
# virsh list --all
- ▪默认情况下,看不到虚拟机的interfaceid接口ID
# virsh dumpxml 虚拟机 | grep -i interfaceid
- ▪通过命令,保存虚拟机配置文件到/home目录
# virsh dumpxml 虚拟机 > 虚拟机.xml
- ▪暂时关闭该虚拟机操作系统,并确认虚拟机已经正常关闭
# virsh shutdown 虚拟机
# virsh list --all
- ▪在对虚拟机配置文件做一个简单的备份后,编辑该虚拟机配置文件
# cp 虚拟机.xml 虚拟机.xml.backup
# vim 虚拟机.xml
- ▪完成编辑操作后,保存退出
修改如下字段:
< source bridge='nsx-managed'/> - ▪通过编辑后的虚拟机配置文件启动虚拟机
# virsh create web-02a.xml
- ▪记录虚拟机的interfaceid
# virsh dumpxml 虚拟机 | grep -i interfaceid
- ▪完成虚拟机关联逻辑交换机的配置
- ▪验证二层网络连通性
在NSX-V的场景中,逻辑网络的实现是借助于在Hypervisor内核中运行的vdl2模块实现的;在NSX-T的场景中,这一点没有任何变化。无论在ESXi,还是KVM主机内核中都运行着vdl2模块,实现了跨越不同虚拟化平台的逻辑网络二层连接。
可以想到的是,想要实现NSX-T的场景中,多个不同业务网络之间的三层互访,一定也要借助在Hypervisor内核中运行的vdrb模块实现。不过与NSX-V的场景大相径庭,NSX-T的逻辑路由更加灵活和复杂。在接下来的几篇分享中,我将演示如何实现一个最简单的数据中心逻辑网络拓扑,包括Tier-0和Tier-1两个不同的级别,Service Router和Distributed Router两个不同的角色,以及他们两两组合后实现的三层网络架构,敬请各位持续关注。