【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(五) - 物理服务器路由方案及配置

5. 物理服务器路由方案及配置

5.1 本节目标

  1. 理解物理机的业务ip之间的通信过程;
  2. 了解如何在leaf交换机上配置业务ip的静态路由;
  3. 了解如何在物理机上配置业务ip及其他相关配置项;

5.2 拓扑结构

本节拓扑结构与上节相比没有变化,如下图:

 

5.3 物理机业务网络地址规划与配置

云平台各服务之间用于通信的ip地址称为业务ip地址,在spine leaf网络中,我们为服务器分配业务ip地址,并配置在br0接口上,本系列文章研究spine leaf网络。下面为四个物理机规划业务IP地址:

主机名 业务ip地址
devopsr01n01 10.10.10.21/32
devopsr01n02 10.10.10.22/32
devopsr02n01 10.10.10.23/32
devopsr02n02 10.10.10.24/32

按照上面的规划,给物理机配置业务ip,以devopsr01n01为例,进行如下配置:

brctl addbr br0
ip link set br0 up
ip address add 10.10.10.21/32 dev br0

其余物理机按例配置。

5.4 物理机业务地址路由方案与配置

5.4.1 在leaf交换机上配置路由

在leaf交换机上采用静态路由协议,路由方案的思路如下:

  1. 对于每个物理机业务ip地址,在一对leaf上配置静态路由;
  2. 通过检测路由下一跳ip的可达性,确定路由条目的有效性;

本文采用的是arista交换机来进行实验,因此提供arista交换机的配置方式,需要用到扩容模块PingCheck,点击查看安装方法,扩展模块安装完成后,进行下面的配置:

# 在leaf01上配置devopsr01n01的路由
ip route 10.10.10.21/32 Ethernet3 169.254.0.2								# 配置devopsr01n01的静态路由

daemon PingCheck3															# 此处因为devopsr01n01接在e3口,所以为了方便,这里名称写PingCheck3
   exec /usr/local/bin/PingCheck 
   option CHECKINTERVAL value 1												# Ping间隔时间1s
   option CONF_FAIL value /mnt/flash/pingcheck/failed_3.conf				# Ping失败时执行的操作,内容填“no ip route 10.10.10.21/32 Ethernet3 169.254.0.2”, 即删除到devopsr01n01的静态路由条目
   option CONF_RECOVER value /mnt/flash/pingcheck/recover_3.conf			# Ping恢复时执行的操作,内容填“ip route 10.10.10.21/32 Ethernet3 169.254.0.2”,即添加到devopsr01n01的静态路由条目
   option HOLDDOWN value 1
   option HOLDUP value 1
   option IPv4 value 169.254.0.2											# Ping的目标地址,即到devopsr01n01的静态路由的下一跳地址,也就是devopsr01n01上与leaf01互联的网口的ip地址
   option PINGCOUNT value 2
   option PINGTIMEOUT value 2
   option SOURCE value et3													# 指定Ping的出接口,即leaf01上与devopsr01n01互联的网口
   no shutdown																# 开始运行PingCheck

# 在leaf02上配置devopsr01n01的路由
ip route 10.10.10.21/32 Ethernet3 169.254.1.2								# 配置devopsr01n01的静态路由

daemon PingCheck3															# 此处因为devopsr01n01接在e3口,所以为了方便,这里名称写PingCheck3
   exec /usr/local/bin/PingCheck 
   option CHECKINTERVAL value 1												# Ping间隔时间1s
   option CONF_FAIL value /mnt/flash/pingcheck/failed_3.conf				# Ping失败时执行的操作,内容填“no ip route 10.10.10.21/32 Ethernet3 169.254.0.2”, 即删除到devopsr01n01的静态路由条目
   option CONF_RECOVER value /mnt/flash/pingcheck/recover_3.conf			# Ping恢复时执行的操作,内容填“ip route 10.10.10.21/32 Ethernet3 169.254.0.2”,即添加到devopsr01n01的静态路由条目
   option HOLDDOWN value 1
   option HOLDUP value 1
   option IPv4 value 169.254.1.2											# Ping的目标地址,即到devopsr01n01的静态路由的下一跳地址,也就是devopsr01n01上与leaf01互联的网口的ip地址
   option PINGCOUNT value 2
   option PINGTIMEOUT value 2
   option SOURCE value et3													# 指定Ping的出接口,即leaf01上与devopsr01n01互联的网口
   no shutdown																# 开始运行PingCheck

按例在leaf02上配置devopsr01n02的路由,在leaf03/04上配置devopsr02n01、devopsr02n02的路由。完成配置后,让我们来测试一下,是否达到了预期的效果:

  1. 在devopsr01n01的所有链路正常时,在leaf01, leaf02, spine01上观察到devopsr01n01的路由条目:

    # 在spine01上观察路由, 有两条等价路由,下一跳分别是leaf01和leaf02
    spine01#sh ip route 10.10.10.21
     B E      10.10.10.21/32 [200/0] via 169.254.0.249, Ethernet1
                                     via 169.254.1.249, Ethernet2
    
    # 在leaf01上观察路由,有一条静态路由,可从e3下联接口到达
    leaf01#sh ip route 10.10.10.21
     S        10.10.10.21/32 [1/0] via 169.254.0.2, Ethernet3
    
    # 在leaf02上观察路由,有一条静态路由,可从e3下联接口到达
    leaf02#sh ip route 10.10.10.21
     S        10.10.10.21/32 [1/0] via 169.254.1.2, Ethernet3

     

  2. 在h11链路故障时(可通过关闭服务器网卡模拟),观察在leaf01, leaf02, spine01上观察到devopsr01n01的路由条目:

    # 在devopsr01n01上关闭eth1
    ifconfig eth1 down
    
    # 在spine上观察路由, 发现只剩一条路径可用,下一跳为leaf02
    spine01#sh ip route 10.10.10.21
     B E      10.10.10.21/32 [200/0] via 169.254.1.249, Ethernet2
    
    # 在leaf01上观察路由, 发现此时从leaf01无法从下联接口到达目标,从而选择从spine学到的bgp路由,经由spine到达目标
    leaf01#sh ip route 10.10.10.21
     B E      10.10.10.21/32 [200/0] via 169.254.0.250, Ethernet1
                                     via 169.254.0.254, Ethernet2
    
    # 在leaf02上观察路由,有一条静态路由,可从e3下联接口到达
    leaf02#sh ip route 10.10.10.21
     S        10.10.10.21/32 [1/0] via 169.254.1.2, Ethernet3

     

  3. 请模拟在h12链路故障时的情况,观察路由变化。

5.4.2 在物理机上配置路由

业务ip配置在br0上,而非物理网卡上,因此需开启内核转发功能:

sysctl -w net.ipv4.ip_forward=1

以devopsr01n01为例,流量经由eth0和eth1两个网口收发,可以达到提高带宽,链路冗余的作用,因此在服务器上的路由配置如下:

# 两个下一跳地址分别为物理机和对应的两个leaf相连的网口互联ip地址
ip route replace default src 10.10.10.21 nexthop via 169.254.0.1 nexthop via 169.254.1.1

配置完上述路由后,与在交换机上的PingCheck一样,服务器也需要某种机制来判断下一跳是否有效:

# 对eth0 eth1启用链路检测,当链路down时,使相应的路由失效,否则物理机可能将流量发往down的链路,从而发生网络故障
sysctl -w net.ipv4.conf.eth0.ignore_routes_with_linkdown=1
sysctl -w net.ipv4.conf.eth1.ignore_routes_with_linkdown=1

# 配置完这一条后可做如下测试,先查看本机路由条目, 发现默认路由有两条等价路由
root@devopsr01n01:~# ip r
default  src 10.10.10.21
	nexthop via 169.254.0.1  dev eth1 weight 1
	nexthop via 169.254.1.1  dev eth0 weight 1
169.254.1.0/30 dev eth0  proto kernel  scope link  src 169.254.1.2

# 然后关闭eth1接口
ifconfig eth1 down

# 然后再查看路由,发现eth1对应的路由条目失效
root@devopsr01n01:~# ip r
default  src 10.10.10.21
	nexthop via 169.254.0.1  dev eth1 weight 1 dead linkdown
	nexthop via 169.254.1.1  dev eth0 weight 1
169.254.1.0/30 dev eth0  proto kernel  scope link  src 169.254.1.2

(Optional)上述步骤完成后,物理机上的路由就算完成了,当然,还可以加上以下的参数,让系统根据ip地址和端口来计算hash,作为选择路由的依据:

sysctl -w net.ipv4.fib_multipath_hash_policy=1

请按照上面的步骤,为其余几台物理机也完成路由配置。

5.5 测试配置结果

从devopsr01n01上ping devopsr01n02, 能够连通,说明配置成功, 其他节点测试方法相同。

root@devopsr01n01:~# ping 10.10.10.22 -c 1
PING 10.10.10.22 (10.10.10.22) 56(84) bytes of data.
64 bytes from 10.10.10.22: icmp_seq=1 ttl=63 time=721 ms

--- 10.10.10.22 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 721.175/721.175/721.175/0.000 ms

5.6 小结

本节主要讲解了在交换机和服务器上如何为业务ip配置等价多路径(ECMP)路由条目,以及判断路由条目有效性的机制,这很重要,因为这样的机制才使得各个设备总是能选择到正确的路由。接下来的章节,将介绍在spine leaf网络中,虚拟机的路由机制。

 

附 :其他品牌交换机上的路由检测机制

本节中arista交换机使用了PingCheck这个扩展模块来实现路由检测,以判断路由条目的有效性,其他厂商的网络设备大都有内置的命令可以实现这一功能,下面用一组配置范例来对比说明arista和Cisco Nexus 9K的配置。

如下配置为本节中leaf01上检测devopsr01n01业务ip路由有效性的一组配置

ip route 10.10.10.21/32 Ethernet3 169.254.0.2								# 配置devopsr01n01的静态路由

daemon PingCheck3															# 此处因为devopsr01n01接在e3口,所以为了方便,这里名称写PingCheck3
   exec /usr/local/bin/PingCheck 
   option CHECKINTERVAL value 1												# Ping间隔时间1s
   option CONF_FAIL value /mnt/flash/pingcheck/failed_3.conf				# Ping失败时执行的操作,内容填“no ip route 10.10.10.21/32 Ethernet3 169.254.0.2”, 即删除到devopsr01n01的静态路由条目
   option CONF_RECOVER value /mnt/flash/pingcheck/recover_3.conf			# Ping恢复时执行的操作,内容填“ip route 10.10.10.21/32 Ethernet3 169.254.0.2”,即添加到devopsr01n01的静态路由条目
   option HOLDDOWN value 1
   option HOLDUP value 1
   option IPv4 value 169.254.0.2											# Ping的目标地址,即到devopsr01n01的静态路由的下一跳地址,也就是devopsr01n01上与leaf01互联的网口的ip地址
   option PINGCOUNT value 2
   option PINGTIMEOUT value 2
   option SOURCE value et3													# 指定Ping的出接口,即leaf01上与devopsr01n01互联的网口
   no shutdown																# 开始运行PingCheck

在Cisco Nexus 9K上,对应上面配置的功能,应该作出如下一组配置

feature sla sender															# 开启sla功能
ip sla 3																	# 此处因为devopsr01n01接在e1/3口,所以为了方便,这里名称写sla 3
  icmp-echo 169.254.0.2 source-interface ethernet 1/3 # Ping的目标地址,即到devopsr01n01的静态路由的下一跳地址,也就是devopsr01n01上与leaf01互联的网口的ip地址,以及指定Ping的出接口,即leaf01上与devopsr01n01互联的网口
  threshold 500																# 阈值 500ms, 小于等于超时时间timeout值即可
  timeout 500																# 超时时间500ms
  frequency 1																# ping的频率,单位秒
ip sla schedule 3 life forever start-time now								# 开始序号为3的sla检测,一直运行,立即开始
track 3 ip sla 3															# 配置track 3, 跟踪sla 3的状态
ip route 10.10.10.21 255.255.255.255 ethernet 1/3 169.254.0.2 track 3		# 配置到devopsr01n01业务ip的路由,以track 3的状态决定改路由的有效性

 

上一节: 叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(四) - 物理服务器互联
下一节: 叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(六) - 虚拟机路由方案及配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章