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有不同的路由策略:

  1. Ext BGP:
    • 向BGP peer宣告特定网段,路由策略需要在Edge上做
    • 接收BGP peer宣告的特定网段,路由策略需要在Edge上做
    • 向OSPF宣告除默认路由外的所有网段,路由策略在交换机上做
    • 不接收OSPF传入的所有网段,路由策略在交换机上做
  2. DIA:
    • 接收OSPF传入的所有网段,路由策略在交换机上做
    • 不向OSPF宣告网段,路由策略在交换机上做
  3. 内部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:

建立OSPF连接的时候需要选择正确的vnic:

建立BGP连接的时候也一样:

最后按需配置路由重分发:

在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种情况:

  1. SNAT出公网或其他服务供应商
  2. DNAT端口转发

NSX-V做1:1 NAT需要分别配置DNAT和SNAT,比较繁琐。另外NSX- V无法配置noSNAT或noDNAT,在某些情况有明显的局限性,可以转用NSXT。

NAT比较简单,有WEB GUI,根据提示进行配置即可:

防火墙部分我建议Edge的默认规则设为deny:

然后在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,可以更好地提升工作效率。