上期本文对IPv6化改造思路以及CDN的IPv6化改造进行了介绍,本期将对ECS及业务应用的IPv6化改造进行介绍。
ECS及业务应用IPv6化改造方法
这部分的改造我们可以根据具体情况使用两种方法:
- 使用IPv6转换服务:通过阿里云的IPv6转换服务进行旁路转换,不改造应用架构,但类似反向代理有一定的局限性,可以作为短期过渡使用。
- ECS配置IPv6网关:VPC中开启IPv6网关,在每一台ECS中配置IPv6 Interface,并手工配置应用服务使之开启IPv6的服务监听,这种方法会进行一些配置变更和应用变更,虽然操作技术门槛略高一些,但是长期可行的方式。
使用IPv6转换服务
从客户业务应用的角度出发,如果客户对其应用层面并不非常熟悉,对现有业务的不间断运行要求非常高,同时和外部数据交换并不是那么频繁,那么采用“IPv6转换服务”是个不错的选择,具体操作起来也很容易,具体分为三步:
(1)获取应用服务IP和服务端口:这里的IP和服务端口可以是SLB的,也可以是ECS的,主要看现有IPv4应用对外发布时所暴露的IP和服务端口;
(2)评估应用的CPS(Connection Per Second,每秒新建连接数)和带宽:根据现有IPv4应用访问情况和客户规划情况确定IPv6转换服务的实例规格和带宽;
(3)配置IPv6转换服务:根据CPS、带宽、服务IP、服务端口就可以进行IPv6转换服务的配置了,配置对应的映射条目。
下图是为1xx.xx.xx9.129的TCP80进行IPv6转换映射:
图1:添加IPv6转换映射条目
配置好后会获得一个IPv6地址,使用这个IPv6地址即可访问ECS或业务应用了。如上图的配置,我们的IPv6访问地址就为:http://[2::*::2bf]:80。
图2:访问IPv6地址示例
ECS配置IPv6网关
如果客户对自身的业务应用非常熟悉,且动手能力很强,那么通过支持客户对ECS和应用进行IPv6的改造,使其达到“IPv6+IPv4双栈”模式,是一个一劳永逸的方法,这种方法在变更前要对客户应用架构和具体使用的服务程序很了解,同时变更过程中可能会出现业务闪断,需要格外注意方案的有效性,可以通过灰度的方式分模块进行变更和验证,具体改造需要下面几步。
配置VPC的IPv6功能
这一步需要提前让客户申请“IPv4/IPv6双栈VPC公测资格”,审核通过后点击“开通IPv6”,使VPC和其下的vSwitch支持IPv6。
图3:VPC开通IPv6功能示意图
配置成功后如下图所示:
图4:VPC的IPv6配置成功
创建并配置IPv6网关
这一步需要配置IPv6网关的规格和IPv6公网带宽,需要根据客户应用的公网转发吞吐和业务带宽进行规划。
图5:IPv6网关设置
为ECS申请IPv6地址
在ECS控制台中,为需要进行IPv6改造的ECS申请“辅助IP”,使其获得公网IPv6地址。
图6:ECS申请“辅助IP”
这一步只是在阿里云的管控层面为所选ECS申请到了对应的IPv6地址,还需要在ECS层面配置才能使ECS中的操作系统获取这个IPv6地址(详见3.5)。同时,需要在“IPv6网关”的“IPv6网关带宽”中为对应的IPv6地址分配带宽,否则此IPv6地址无法对外网提供服务。
图7:为IPv6地址分配带宽
配置安全组
这一步非常重要,很多客户在做了IPv6化后发现依然无法通过IPv6进行通讯,客户在安全组中常常会设置“0.0.0.0/0”这种规则,以为是代表所有,其实0.0.0.0/0”仅是IPv4的“ALL对象“,需要客户再创建对应的IPv6安全组规则,授权对象写成“::/0”即可。
配置ECS内的系统参数
这一步也非常关键,通过修改ECS内sysctl的参数使其Interface支持IPv6协议,并获取3.3中获取的IPv6地址,动手能力强的客户可以通过手工修改sysctl中的net.ipv6.conf.all.disable_ipv6、net.ipv6.conf.default.disable_ipv6、net.ipv6.conf.lo.disable_ipv6三个参数,使其全部为“0”来使能IPv6 Mod,也可通过这里的指引执行自动化脚本开启IPv6 Mod。开启成功后,通过执行:ip a | grep “inet6”即可看到操作系统已经获取到对应的公网IPv6地址:
图8:查看ECS操作系统获取到的公网IPv6地址
验证ECS内操作系统的IPv6连通性
进行过如上五步后,可以在改造后的ECS中执行:ping6 aliyun.com或ping6 ipv6.baidu.com来测试IPv6协议栈和网络是否有效。
图9:验证ECS内操作系统的IPv6连通性
应用IPv6服务监听开启
这一步需要对客户业务应用有很深的理解,并根据具体的应用服务软件特性进行IPv6开启。例如某ERP开发公司的某业务应用依赖nginx系的Web服务程序提供服务,对外服务端口为8080,则我们需要在nginx.conf中添加对应的IPv6监听:
server {
listen 80;
listen [::]:80;
……
}
然后执行nginx -t测试配置是否正确,确认无误后和客户进行灰度发布(systemctl restart nginx);
然后执行netstat -tunlp看是否出现如下监听服务:
tcp6 0 0 :::80 :::* LISTEN 1053/nginx
如出现以上情况,说明变更成功,同时不必紧张为何没有显示IPv4的80监听,这是正常情况,IPv4和IPv6都可访问。
无论nginx还是tomcat,还是其他C/S或B/S服务,开启IPv6服务监听的方法均大同小异,搜索对应的应用官网或服务商的文档即可获取具体配置方法,这里不再赘述。
下期本文将从“SLB、DNS”几个层面具体讲解IPv6化改造的方法,敬请期待!
作者:成俞晟阿里云智能GTS-SRE团队技术服务经理
曾就职于联想集团、华为、中化集团,有着丰富的数据中心及云计算经验,现就职于阿里云智能GTS-SRE团队,任北方区SRE架构师。
我们是阿里云智能全球技术服务-SRE团队,我们致力成为一个以技术为基础、面向服务、保障业务系统高可用的工程师团队;提供专业、体系化的SRE服务,帮助广大客户更好地使用云、基于云构建更加稳定可靠的业务系统,提升业务稳定性。我们期望能够分享更多帮助企业客户上云、用好云,让客户云上业务运行更加稳定可靠的技术,您可用钉钉扫描下方二维码,加入阿里云SRE技术学院钉钉圈子,和更多云上人交流关于云平台的那些事。