0x01 前言
在某些情况下需要在机房中部署一套小集群,为尽可能降低费用,会尽可能缩减可用空间、动力系统及设备购买和运输的费用。
在这种情况下,3节点且带有vSAN服务的VMware集群是最优选择。既可以最大程度提升可靠性及冗余性,还可以依赖于这套底层部署NSX-V。此外,配合vCloud使用更佳。
0x02 限制
一般租用机柜有2种选择:整柜及半柜,半柜的电力在4kVA左右,一般带有一对冗余的6插孔PDU。此外还要计算设备购买、软件授权、运输及部署的费用,运输部分则要考虑出入口的情况,部署完成后还要考虑维护的成本。
在全新且带有IPMI的设备上部署VMware是不错的选择。交换机部分需要选择3层交换机,可以和其他数据中心使用动态路由建立连接,实现多条线路冗余的同时避免虚拟化环境故障时无法访问OOB网络。
还有就是动力系统及PDU插口的限制,3台服务器+2台交换机就已经占用5个插孔。所以这2台交换机需要支持千兆、万兆光纤接入及电缆接入,电缆部分可以使用光转电模块解决。其中万兆用于服务器之间的互联、千兆主要用于cross connect接入,电缆主要用于连结服务器的IPMI端口。
这2台交换机需要堆叠功能以提高可靠性。端口肯定有剩余,使用2~4个万兆口业务口搭配万兆多模光模块进行堆叠是个不错的选择。
0x03 基本架构
先上架构图:
首先要考虑远程维护的问题,针对OOB和Vmware MGMT的网段,我会选择写静态路由。在DC-DC之间是双线的情况,还会使用nqa与静态路由联动。其余网段全部用BGP协议进行收发,BGP的路由收发需要提前配置好路由策略,以求达到全自动的目的,避免重复配置设备路由表的工作。
接入到这套集群内的DIA及其他BGP服务供应商的线路只需在交换机打vlan tag,直接透传给Edge即可。
右侧从上到下有3个Edge,首先是vlan 403。有些供应商需要使用BGP协议接入,而且限制出口IP,也就是加白特定的IP,所以要在Edge上配置BGP,然后配置NAT。因为我的交换机不支持NAT这种高级功能,只能用Edge实现。使用Edge还有一个目的是:我需要使用它的防火墙功能,而不是交换机的ACL。默认路由指向交换机。
再往下是用于访问公网的DIA,直接access接入,在Edge上写入Z side公网IP并指定网关即可。内部网段可以使用OSPF传入Edge,也可以在Edge内手写静态路由。剩下的就是配置NAT及防火墙。默认路由指向DIA网关。
最后是这套集群内部的Edge,针对服务的不同,会创建多个Edge实现3层隔离。默认路由指向交换机。
所有Edge使用OSPF协议和交换机交换路由信息,但不同Edge有不同的路由策略:
- Ext BGP:
- 向BGP peer宣告特定网段,路由策略需要在Edge上做
- 接收BGP peer宣告的特定网段,路由策略需要在Edge上做
- 向OSPF宣告除默认路由外的所有网段,路由策略在交换机上做
- 不接收OSPF传入的所有网段,路由策略在交换机上做
- DIA:
- 接收OSPF传入的所有网段,路由策略在交换机上做
- 不向OSPF宣告网段,路由策略在交换机上做
- 内部Edge:
- 不接收OSPF传入的所有网段,路由策略在交换机上
- 向OSPF宣告子接口网段,路由策略在交换机上做
交换机侧需要配置路由策略,按需在OSPF及BGP间相互引入路由,要向peer宣告的时候也要做好策略,避免宣告敏感或不必要的网段。
0x04 Vmware
从上面的架构图中可以看出,需要将特定vlan id的流量牵引至edge,所以要根据实际情况建立DPG,并且在DPG中指定vlan id,然后在建立Edge的时候选择该DPG作为uplink即可:
0x04.1 NSX-V Edge BGP及OSPF
在使用Edge建立BGP session需要考虑内部互联的问题,在这个例子中的BGP是和外部服务供应商建立的,还需要和内部网络建立连接,要不然内部无法访问。为此,该Edge会有2个uplink:
而默认路由需要指向内部的网关,至于BGP的router ip建议选择本地的BGP peer ip:
在Edge WEB GUI中是无法看到OSPF及BGP连接及路由相关情况的,需要使用CLI进行查看。打开NSX-V Manager SSH功能并使用admin用户登入或使用vCenter的console,输入相关命令即可:
# 查看OSPF邻居 NSX-manager> show edge edge-x ip ospf neighbors haIndex: 0 NeighborID Pri Address DeadTime State Interface xxx.xxx.xxx.xxx 1 xxx.xxx.xxx.xxx 30 Full/DR/2w0d vNic_1 # 查看BGP邻居 NSX-manager> show edge edge-x ip bgp neighbors haIndex: 0 BGP neighbor is xxx.xxx.xxx.xxx, remote AS xxxxx, BGP state = Established, up Hold time is 9, Keep alive interval is 3 seconds Neighbor capabilities: Route refresh: advertised and received Address family IPv4 Unicast:advertised and received Graceful restart Capability:advertised and received Restart remain time: 0 Received 408823 messages, Sent 478305 messages Default minimum time between advertisement runs is 30 seconds For Address family IPv4 Unicast:advertised and received Index 1 Identifier 0xxxxxxxxx Route refresh request:received 0 sent 0 Prefixes received 2 sent 1 advertised 1 Connections established 1, dropped 1 Local host: xxx.xxx.xxx.xxx, Local port: 34738 Remote host: xxx.xxx.xxx.xxx, Remote port: 179 # 查看BGP路由 NSX-manager> show edge edge-8 ip route bgp haIndex: 0 Codes: O - OSPF derived, i - IS-IS derived, B - BGP derived, C - connected, S - static, L1 - IS-IS level-1, L2 - IS-IS level-2, IA - OSPF inter area, E1 - OSPF external type 1, E2 - OSPF external type 2, N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 B xxx.xxx.xxx.xxx/23 [20/0] via xxx.xxx.xxx.xxx B xxx.xxx.xxx.xxx/29 [20/0] via xxx.xxx.xxx.xxx # 查看OSPF路由 NSX-manager> show edge edge-8 ip route ospf haIndex: 0 No routes to display.
0x04.2 NAT及防火墙
NAT我这里分2种情况:
- SNAT出公网或其他服务供应商
- DNAT端口转发
NSX-V做1:1 NAT需要分别配置DNAT和SNAT,比较繁琐。另外NSX- V无法配置noSNAT或noDNAT,在某些情况有明显的局限性,可以转用NSXT。
然后在general防火墙页面中按需建立section及规则:
0x05 交换机
交换机部分就是常规配置,根据实际情况配置OSPF:
# OSPF配置 <switch>dis cu con ospf # ospf 1 router-id xxx.xxx.xxx.xxx area xxx.xxx.xxx.xxx network xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx # ospf 2 router-id xxx.xxx.xxx.xxx area xxx.xxx.xxx.xxx network xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx # return # BGP配置 <switch>dis cu con bgp # bgp xxxxx router-id xxx.xxx.xxx.xxx timer connect-retry 8 graceful-restart peer xxx.xxx.xxx.xxx as-number xxxxx peer xxx.xxx.xxx.xxx bfd min-tx-interval 300 min-rx-interval 300 detect-multiplier 4 peer xxx.xxx.xxx.xxx as-number xxxxx peer xxx.xxx.xxx.xxx bfd min-tx-interval 300 min-rx-interval 300 detect-multiplier 4 # ipv4-family unicast undo synchronization ext-community-change enable network xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx network xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx network xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx network xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx network xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx import-route ospf x route-policy ospf-import-to-bgp peer xxx.xxx.xxx.xxx enable peer xxx.xxx.xxx.xxx route-policy dc-dc-pri-imp import peer xxx.xxx.xxx.xxx route-policy dc-dc-pri-exp export peer xxx.xxx.xxx.xxx advertise-community peer xxx.xxx.xxx.xxx enable peer xxx.xxx.xxx.xxx route-policy dc-dc-sec-imp import peer xxx.xxx.xxx.xxx route-policy dc-dc-sec-exp export # return
BGP部分需要根据实际情况来决定是使用BFD还是NQA,比如在这个案例中,我使用BFD进行检测。
0x06 结语
使用Edge可以快速地扩容和实现三层隔离,它还有双机冗余的功能,可以实现毫秒级的故障转移,但只支持主备模式。使用NSX的防火墙可以实现细粒度的流量控制,这一切都依赖于分布式防火墙,而Edge的Gateway防火墙则实现南北向的流量控制。
在小型集群甚至大型集群中都可以使用,如果环境允许,建议使用NSX-T。如果虚拟化环境主要依赖VMware架构,还建议使用vcloud,可以更好地提升工作效率。