+86 135 410 16684Mon. - Fri. 10:00-22:00

AWS构建健壮的混合云网络

AWS构建健壮的混合云网络

AWS构建健壮的混合云网络

构建健壮的混合云网络——BJS DX篇

 

背景介绍:

近年来,随着公有云的普及,一方面,越来越多的用户选择利用公有云在弹性、灵活性等方面的优势,在云上部署新的应用系统,另一方面,大量的企业有很多现有的本地基础设施投资,所以企业上云的过程并不是一触而就的,期间势必存在云应用与本地数据中心应用并存的局面,为了更好的融合云与本地数据中心的应用环境,实现整体应用系统的稳定性和高可用性,构建一个健壮的混合云网络至关重要。

在AWS上,用来连接AWS与本地数据中心的方式主要有以下3种:

1.    纯VPN组网

2.    纯专线组网

3.    VPN与专线的混合组网

其中,对于AWS中国区来讲,由于AWS自身的VPN服务VGW目前尚未落地,客户急需要一个替代方案,能够达到类似于VGW的冗余及故障切换功能。

本篇主要讲述第二种组网方式,着眼点在于如何实现混合云网络的健壮性及故障自愈。

对于第一,第三种组网方式的高可用实现,请参考:

《构建健壮的混合云网络——BJS VPN篇》

《构建健壮的混合云网络——BJS DX+VPN篇》

对于如何实现对VPN流量的监控、故障告警及事件日志搜集,请参考:

《构建健壮的混合云网络——BJS DX+VPN篇》

拓扑图:

1124-1

AWS与本地站点之间建立两条专线,为了保证一条专线故障后,剩下的专线能够承载所有的业务流量,建议使用主备模式,考虑到高可用,建议两条专线分别终结在SINNET和CIDS两个DX Location,并且可以使用两家专线提供商的链路。

配置步骤:

1.    申请专线

小于500M的专线由AWS APN Partner提供,这里以APN Partner方案为例,大于1G的专线接入请参考如下文档:

https://www.amazonaws.cn/en/documentation/directconnect/

向APN Partner申请链路,根据要求提供相关信息,通常包括用户AWS账号,专线带宽等信息。

2.    接受连接并创建virtual interface

当APN Partner建立好专线后,登入management console,选择Direct Connect服务,将可以看到相关的连接,需要选择接受连接。

1124-2

创建Virtual Interface。

1124-3

选择创建Private Virtual Interface,设置接口名称并与相关VPC的VGW关联

1124-4

根据自己的需要设置互联地址及本地站点的AS号

1124-5

3.    下载本地站点端路由器的配置

1124-6

1124-7

4.    修改本地路由器端BGP配置,实现主备冗余

a.    AWS侧出向流量主备通过AS-PATH属性实现

b.    本地站点侧出向流量主备通过Local-Preference属性实现

下面是本地站点侧,备份链路路由器上的参考配置:

route-map LOCAL-PRE permit 10

 set local-preference 50

!

route-map PREPEND permit 10

 set as-path prepend 1111 1111

router bgp 1111

 network 0.0.0.0

 neighbor 169.254.10.2 remote-as 17493

 neighbor 169.254.10.2 route-map LOCAL-PRE in

 neighbor 169.254.10.2 route-map PREPEND out

5.    确认接口up

1124-8

6.    设置需要通过专线访问本地站点的路由表的下一跳为VGW

构建健壮的混合云网络——BJS DX+VPN篇

背景介绍:

近年来,随着公有云的普及,一方面,越来越多的用户选择利用公有云在弹性、灵活性等方面的优势,在云上部署新的应用系统,另一方面,大量的企业有很多现有的本地基础设施投资,所以企业上云的过程并不是一触而就的,期间势必存在云应用与本地数据中心应用并存的局面,为了更好的融合云与本地数据中心的应用环境,实现整体应用系统的稳定性和高可用性,构建一个健壮的混合云网络至关重要。

在AWS上,用来连接AWS与本地数据中心的方式主要有以下3种:

1.    纯VPN组网

2.    纯专线组网

3.    VPN与专线的混合组网

其中,对于AWS中国区来讲,由于AWS自身的VPN服务VGW目前尚未落地,客户急需要一个替代方案,能够达到类似于VGW的冗余及故障切换功能。

本篇主要讲述第三种组网方式,着眼点在于如何实现混合云网络的健壮性及故障自愈。

此外笔者始终认为“Network is not just ping success”,尤其对于大型企业来说,网络流量的监控,故障事件的告警,日志的搜集检索等功能并非可选项,所以本篇也会顺带介绍如何在AWS云上实现这些功能。

对于第一,第二种组网方式的高可用实现,请参考:

《构建健壮的混合云网络——BJS VPN篇》

《构建健壮的混合云网络——BJS DX篇》

注意:本篇以AWS中国区VGW尚未落地为前提,VPN部分以开源软件实现,但应用场景并不仅限于AWS中国区,如何客户需要一些VGW暂时无法满足的功能,同样可以在AWS Global利用本篇搭建符合自身需求的解决方案,具体可能的需求包括但不限于:

1.    需要使用VGW暂时不支持的加解密算法

2.    需要使用VGW暂时不支持的hash算法

3.    需要使用证书认证

4.    All in one解决方案,VPN设备除了提供VPN功能外,还需要提供防火墙,NAT等功能

拓扑图:

1125-1

对于DX与VPN互备的场景,有如下几种情况:

1.    1条DX+1条VPN

2.    2条DX+1条VPN

3.    1条DX+2条VPN

4.    2条DX+2条VPN

对于1,2两种场景下,可以简单地通过调整Private-1,Private-2的路由表实现AWS侧的主备,即:流量优先选择DX专线,在专线故障时切换到VPN链路。

启用路由传递,路由表中会出现一条10.10.0.0/16,target为VGW的路由

1125-2

设置一条静态路由10.0.0.0/8,target为VPN设备的eni

1125-3

由于路由最长匹配的原则,默认去往本地站点10.10.0.0/16的流量会通过VGW走专线,当专线发生故障的时候,10.10.0.0/16的路由不会传递进入路由表,此时10.0.0.0/8的路由生效,流量切换到VPN链路。

对于3,4两种场景下,无法通过上述方式在两条VPN链路之间切换,需要部署拓扑图中的monitor设备来监控DX和VPN链路及VPN设备的健康状态并实现链路切换。

本例主要介绍monitor及Strongswan设备上的脚本功能,及如何与监控,告警相结合。

VPC基本配置,DX基本配置,Strongswan配置及本地站点切换方式请参考:

《构建健壮的混合云网络——BJS VPN篇》

《构建健壮的混合云网络——BJS DX篇》

1.    链路切换逻辑:

1125-4

当专线链路正常时,设置服务器的路由指向VGW,流量通过专线传输,当监测到专线故障时,将服务器路由指向相同AZ中的Strongswan,并且开始监测Strongswan实例及VPN链路的健康状态,当一条VPN链路发生故障时,切换相应流量跨AZ传输给另一个AZ中的Strongswan,当其中一个AZ的Strongswan发送故障时,切换流量的同时,通过stop/start该Strongswan恢复实例。

2.    除了链路切换功能外,通过monitor及Strongswan上运行脚本能实现故障告警,VPN流量统计及事件日志收集检索功能:

1125-5

SNS邮件及短信告警:

1125-6

1125-7

CloudWatch针对VPN流量监控:

1125-8

Elasticsearch & Kibana做事件日志收集及检索:

1125-9

可以针对site,dx,vpn做检索:

1125-10

1125-11

1125-12

所有脚本可以从如下的github上下载得到:

1125-13

3.    脚本功能说明:

3.1 monitor实例上运行的脚本:

monitor.sh:

 

1.    实现DX链路,VPN链路及VPN设备的健康检测并修改服务器路由切换流量

2.    发现故障后,产生告警通知,通过SNS服务邮件及短信通知相关运维人员

3.    本地产生故障日志,通过logstash输出到Elasticsearch服务存储

注:SNS短信通知目前BJS暂不支持,Elasticsearch & Kibana服务在BJS需要自己搭建

monitor实例需要对路由表做操作,并与SNS服务交互,所以需要赋予相关的角色

1125-14

其中,monitor policy的配置如下:

{

    "Version": "2012-10-17",

    "Statement": [

        {

            "Action": [

                "ec2:DescribeInstances",

                "ec2:CreateRoute",

                "ec2:ReplaceRoute",

                "ec2:StartInstances",

                "ec2:StopInstances"

            ],

            "Effect": "Allow",

            "Resource": "*"

        }

    ]

}

3.2 Strongswan实例上运行的脚本:

tunnel_init.sh:创建tunnel接口及路由相关流量到tunnel口

traffic_monitor.sh:收集进出tunnel口的VPN流量统计信息,通过自定义metric发送到CloudWatch中,实现VPN流量的监控

ipsec.conf/ipsec.secrets配置文件:Strongswan配置文件,建立ipsec vpn隧道

Strongswan实例需要收集VPN流量信息并与CloudWatch交互,所以需要赋予相关的角色

1125-141

4.    脚本使用方法:

monitor.sh:运行在monitor实例上,monitor实例需要拥有操控路由表,SNS等

monitor.sh的如下脚本语句需要做相应的修改

VPN_ID1="i-0e1466e8a5dd4892c"

VPN_ID2="i-0430fe110cdec5835"

VGW_ID="vgw-078bcc55"

VPN_RT_ID1="rtb-468f5222"

VPN_RT_ID2="rtb-4b8f522f"

DX_IP="10.10.3.100"

Remote_IP1="169.254.100.1"

Remote_IP2="169.254.200.1"

logstash_site="Singapore"

litterbin=$(aws sns publish --region ap-southeast-1 --topic-arn "arn:aws:sns:ap-southeast-1:93870664XXXX:DCI-Status" --subject "Status of DCI between Singapore and Ireland Changed!" --message file://logfile)

litterbin=$(aws sns publish --region ap-southeast-1 --phone-number "+861860135XXXX" --message file://logfile)

其中VPN_ID1,VPN_ID2分别为Strongswan-1,Strongswan-2的instance id,VGW_ID为VGW的id,VPN_RT_ID1,VPN_RT_ID2分别为Private-1,Private-2关联的路由表id,DX_IP为DX链路的检测ip,通常为专线提供商MPLS VPN网络的PE设备或者是本地站点的出口路由器公网ip,Remote_IP1,Remote_IP2分别为本地站点两条VPN的隧道口ip,logstash_site为AWS站点标示,该值会体现在告警及日志中,用于区分多个AWS站点。

–region,–topic-arn,–phone-number根据需要修改,其中SNS的topic需要事先创建并且通过相关邮箱订阅来接收消息。

所有事件日志会先写入本地/tmp/logstash.txt文件中,通过logstash上传给elasticsearch。

 

修改/etc/logstash/conf.d/logstash.conf

input {

file {

         path => "/tmp/logstash.txt"

         codec => json

}

}

 

output {

elasticsearch {

         hosts => "http://search-test-cfwkwatg5unnpsgvbd5lyruquy.ap-southeast-1.es.amazonaws.com"

         index => "XXXX"

}

}

可以设置/etc/rc.d/rc.local文件,使monitor实例开机运行monitor.sh脚本

 

vpn_monitor.sh:运行在Strongswan实例上,创建VPN隧道接口及相关路由

traffic_monitor.sh:运行在Strongswan实例上,收集隧道接口的流量信息并以自定义metric的方式传输给CloudWatch服务

可以设置/etc/rc.d/rc.local文件,使Strongswan实例开机运行vpn_monitor.sh和traffic_monitor脚本

北京 上海 天津 重庆 河北 山东 辽宁 黑龙江 吉林 甘肃 青海 河南 江苏 湖北 湖南 江西 浙江 广东 云南 福建 海南 山西 四川 陕西 贵州 安徽 广西 内蒙古 西藏 新疆 宁夏 澳门 香港 台湾