阿里云ECS无法连接阿里云数据库的一般原因-阿里云开发者社区

开发者社区> 阿里云支持与服务> 正文

阿里云ECS无法连接阿里云数据库的一般原因

简介: 更新rds的高安全白名单模式的说明: rds目前提供了高安全的白名单模式,如果是高安全白名单模式,经典网络白名单分组适用于经典网络以及外网主机访问,而专有网络白名单分组适用于专有网络的主机访问)

实为吾之愚见,望诸君酌之!闻过则喜,与君共勉

适用于:
1,跨地域/本地主机如何公网访问经典/vpc网络的rds?
2,经典网络的ecs如何内网和公网访问经典/vpc网络的rds?
3,vpc网络的ecs如何公网和内网访问经典/vpc网络下的rds?
4,经典/vpc网络的ecs如何内网访问经典/vpc网络的mongodb?
5,经典/vpc网络的ecs如何内网访问经典/vpc网络的redis?
6,经典/vpc网络的ecs如何内网访问经典/vpc网络的ocs(memcached)?

阿里云的数据库种类较多,但是网络连接问题出现以及排查和解决方式大部分是一样的,所以以下以RDS控制台为例子进行说明,控制台会与redis,mongodb,ocs等有差别,主要目的是为了举一反三

第一章  使用阿里云ECS和数据库前需要了解的相关概念

1.1地域和可用区

地域:地域是指物理的数据中心,类似下面的表格

地域名称

华北 1

华北 2

华北 3

华东 1

华东 2

华南 1

所在城市

青岛

北京

张家口

杭州

上海

深圳

RegionId

cn-qingdao

cn-beijing

cn-zhangjiakou

cn-hangzhou

cn-shanghai

cn-shenzhen

 

可用区:可用区是指在同一地域内,电力和网络互相独立的物理区域

详细说明看这里:

https://help.aliyun.com/document_detail/40654.html?spm=5176.doc51704.6.543.jd1ts9

1.2内网

同地域内的云资源互相访问地址,不同可用区也可以内网访问,但是不同地域正常是不可以内网访问的,不同地域需要公网访问

详细说明看这里:

https://help.aliyun.com/document_detail/25385.html?spm=5176.doc40654.6.557.68NSeb

1.3外网

跨地域之间云资源互相访问的地址,不可以内网访问,可以立即为满足公网访问的地址

1.4安全组

Ecs所特有可以理解为防火墙,区别于windows或者linux系统内部的防火墙,安全组和系统内部防火墙互不影响

详细说明看这里:

https://help.aliyun.com/document_detail/25387.html?spm=5176.doc25385.6.560.F1KUoi

 

1.5vpc(专有网络)

阿里云的内网隔离的私有网络,同一个vpc内,不同交换机默认是互通的,不同vpc下正常是无法联通的

详细说明看这里:

https://help.aliyun.com/document_detail/34217.html?spm=5176.doc55051.6.539.4PVhVn

1.6白名单

Rds所特有,ip地址写入白名单之后,主机才可以进行访问

https://help.aliyun.com/document_detail/26198.html?spm=5176.product26090.6.686.2Y3o4E

1.7网络类型

经典网络以及专有网络(vpc),经典网络区别于专有网络,经典网络中的云服务在网络上不进行隔离

区别的详细说明看这里:

https://help.aliyun.com/document_detail/26194.html?spm=5176.product26090.6.682.2mjTIX

1.8 访问模式

Rds特有分为高安全模式和标准模式

详细说明看这里:

https://help.aliyun.com/document_detail/26193.html?spm=5176.doc26194.6.681.iNVL3c

第二章  ECS连接RDS问题

以下是指同地域之间的的阿里云ecs访问rds的说明 ,皆为正常情况,排除了特殊配置的情况,以下四类情况同样适用于同地域ECS连接云MONGODB,ECS连接云REDIS,ECS连接云OCS(MEMCACHED),并且也适用于不同地域之间连接的问题排查,需要注意的是:

1,云MONGODB,云REDIS,云OCS正常只支持内网连接,所以跨地域公网访问时不支持的,本地主机通过公网访问也是不支持的

2,云REDIS,云OCS在切换到vpc后,是不支持再切换到经典网络的

3,RDS,云MONGODB(复制集版)是可以从经典网络切换到vpc并且也可以从vpc切换到经典网络的

4,云MONGODB(集群版)创建完成后不支持网络类型切换

2.1.1经典网络ECS访问经典网络RDS异常

情况描述:ECS是经典网络(公网和内网都有),RDS是经典网络(公网和内网都有),如下:

Ecs的网络配置:

 23d77e9886de1809f85bad518d94aa5a1f363b55

Rds的网络配置:

07e363d81bcb5c1be92bc5db6219cbc7fb3fa8d6

693c5f7b009dde8cdcade9d58a32f2c236646c0f

通过ECS和RDS的配置,它们网络类型相同,又都存在公网和内网地址,所以理论上公网和内网的访问都是没问题的,测试如下:

1d7e97934869c582fe1c97fcda4dd6c0f6c3a7a1

下面模拟一个不可以正常连接的例子进行连通性测试:

Ecs连接rds内网:

5509a9400d488a4c940def2855b6e43449fdd0a0

通过ping内网地址和telnet内网地址,获取了如上的信息,上面说明了如下两点:

1,该rds目前的内网地址是10.50.144.213

2,通过3306端口连接10.50.144.213无法连接

网络类型相同,而无法连接,此类问题一般是ECS的内部的防火墙(或者其他安全软件)或者ECS的安全组设置以及RDS的白名单设置的问题,按照这个思路,往下查:

自带防火墙:

dd690ea1942f8450f0c7443834c1909224719931

结果:状态关闭

Ecs的安全组设置:

1d4722befae191ac283bbd07edcbdab88928d61a

通过安全组可以看到,内网出方向的规则中有一条规则如上,该规则会拒绝发往发往10.50.144.213且目的端口是3306的数据包,所以从ECS发出来的数据包就不可达了

RDS的白名单配置(rds目前提供了高安全的白名单模式,如果是高安全白名单模式,经典网络白名单分组适用于经典网络以及外网主机访问,而专有网络白名单分组适用于专有网络的主机访问):

e29459966613ab5af3423550427be815163faad3

通过白名单可以看到,rds的白名单设置只允许来着127.0.0.0的访问,其他的地址是不允许的

通过上面的查看,一方面是ecs的安全组设置有问题,一方面是rds的白名单设置有问题,先更改ecs的安全组,删除之前的规则(保持rds的白名单不改动),进行测试:

cdd2a70207b9e169cfa97fd790a2f2528ddf7452

红框中的提示是:#28000ip not in whitelist,再结合之前查到的rds的白名单问题,可以判断这是rds的白名单阻止了该ECS的访问,下面修改RDS的白名单,将ecs的内网ip地址10.132.35.143加入:

31bae6998effcfbb02a117a5328a1af9643513b8

再次测试:

ddaeb206f15f7f2e3fef1ddcc28b8324b76ce102

测试正常了,同网络类型的公网访问问题排查方法同上,同地域网络类型相同而无法连接的问题一般是源端或者目标端的安全限制导致的

2.1.2经典网络ECS访问专有网络RDS异常

情况描述:ECS是经典网络(公网和内网都有),RDS是专有网络(公网和内网都有),如下:

ECS网络配置:

23d77e9886de1809f85bad518d94aa5a1f363b55

RDS网络配置:

a050afac721a58414e4e10647b11b34b91bb0523

aabfd465d513ef6187ff1138c307b31cb81339d5

通过上面的信息可以看到,ECS与RDS的网络类型是不同的,ecs是经典网络,rds是专有网络(vpc),这样的话正常内网是无法访问的,只有公网才可以正常访问,测试如下:

c55d159b8505da88baf95ec1438a87022cd2d4f5

376852471846065661bc769c2520397bc9f5bc11

此类情况的解决办法:

1,使用rds的公网地址进行访问

2,如果想使用内网访问,必须是相同网络类型才可以,因为ecs无法直接切换网络类型,则比较好的解决办法就是把rds切换为与ecs相同的网络类型(经典网络),并设置好安全组防火墙已经白名单,具体操作方法如下:

7d8d1b72436c6d739a1b28e1443ae04cf7d4e5a6

71063df3f343072a9719aa0ce2711237c0591631

3710da72521eb698fd3a49a4897977473941f908

再次测试:

e89741c96c4680f619d3f96fd9990bba8e39703c

2.1.3专有网络ECS内网访问经典网络RDS异常

情况描述:ECS是专有网络(只有内网,没有eip),RDS是经典网络(公网和内网都有),如下:

ECS网络配置:

5996a1aaa8e41eaa0dbcbee101fe1d935d4624da

Rds网络配置:

07e363d81bcb5c1be92bc5db6219cbc7fb3fa8d6

693c5f7b009dde8cdcade9d58a32f2c236646c0f

通过上面的信息可以看到,ECS与RDS的网络类型是不同的,ecs是专有网络,rds是经典网络,这样的话与2.1.2相同,也是正常内网是无法访问的,又因为ecs没有eip,所以rds的公网也是无法访问的。

解决办法:

1,配置ECSeip(取决于购买时的配置,此处我购买时选择的不分配公网地址),使用rds的公网访问RDS,操作如下:

1baa79190e235892e0b023dc57510eb973015690

362d574ab4bc446ec0dbe8b810f2cc0ac4782085

92a2d9540f1d53c73ee1f76c503d44145fb0a0d8

测试如下:

67b30d19fce5cea3ee50248951f5739a5f43c5f7

2,如果需要内网的话,需要将rds切换到与ecs相同的vpc下才可以(交换机可以不同,但是交换机必须在同一个vpc下),具体操作如下:

Ecs所在vpc以及交换机:

1c94419ecdb6b45d5f12ee71b7504e240e90383f

相应的vpc以及交换机信息

c1e3e48967469b44df13018ab45316219628f12d

8cf53e1242d1ef482b422c4b2dd0b3bacaacee32

Rds进行网络类型切换:

2f6f0fa9033f8dd8b8fd252fe474d40639fd5f6c

26cea46d3b7bbb781ed1f02a6249f53a711e2dcc

a0ff27905e17a49af5a985c11b8cfd5e812932c1

测试内网如下:

120ab48baffa7bb9e5de29b46e40c523dec6fc45

2.1.4专有网络ECS内网访问专有网络RDS异常

情况描述:ECS是专有网络(只有内网,没有eip),RDS是专有网络(公网和内网都有),如下:

Ecs的网络配置:

3756a6d5b18da4fcf2d4b9c7ee898e07977574f1

0db5dc31a152babf3051dc0d966adb0bfe993e66

RDS网络配置:

13765986cc0aa8ac00cf023358ab756976871fee

92bdb3a17f2fc8592129a962add03c101fe7585c

通过上面的信息,可以看到ECS和RDS都是同一个vpc下的,但是他们内网可以连接吗?外网可以吗?做个测试(测试公网需要申请eip):

绑定eip:

3f4fca6d50c3e787782fc7c4dbabe54fd84438fa

43ab14ae3a1210f2f4a77e462cc2cdb2dc368556

0505624cd45228cc7abc2b7caaa7ea5b95fe4c82

45cc69c9a3f281fe73137cf7118685175395a8e3


内网测试:

7bfa7bc24828dab7f13e757320959de5eee08d3c

结果:内网测试不通

外网测试:

0e9fe0cb27237df44f57ccbf13159d05c89052c5

结果:外网测试可以联通,只是提示白名单问题

内网无法连通原因:通过上面的ecs的rds的网络类型,可以看到RDS和ECS的vpc是不同的,所以他们处在两个不同的vpc下,所以他们无法连通

下面将RDS切换到与ecs相同的vpc下再测试(ecs无法直接切换vpc):

639887b3f8474a39c86ce1d0a6ed599b3acd2fce

再次内网测试:

f522c08c421bdae7b377add6e9715de2933e4b9c

结果:内网测试可以联通,只是提示白名单问题

 

第三章  问题延伸

通过第二章的测试和验证,当选择ECS和RDS时,如果需要内网正常连接,可能需要满足(以下均不包括特殊情况):

1,同地域如果需要内网连接,则网络类型要相同,如果是经典网络ecs和rds都为经典网络才可以内网连接,如果是vpc网络,ecs和rds必须是在同一个vpc下才可以内网连接

2,不同地域时,经典网络以及VPC网络的ecs和rds一般需要公网地址进行连接,不同地域无法内网连接

3,云mongodb,云redis,云ocs此类只允许内网连接,一般无法通过公网来连接,所以ecs需要与其在同一地域下,

4,当遇到某个ECS连接数据库出现问题时,可以尝试使用如下方法进行分析:

1)“ping  实例地址”:解析出ip地址即可,如下

5e3df02179222adcdaaf1844d82af1fd4551d1fc

2)“telnet  实例地址  端口” 或者”telnet  ip 端口”

5e81b7cf47e0ec4aa1ab0a635ac934c0389278d1

Ps: 28000ip not in whitelist是因为白名单未设置,可以看另一篇:

https://yq.aliyun.com/articles/158321?spm=5176.100240.searchblog.8.XNCQSl

3)如果telnet失败(失败如下,表现为长时间无反应或者超时):

6f0647dde629bdda32cdde4c9dca3e73ac40349d

可以执行route -n检查下路由信息

21af4cd026e35b112fae12e37c6473890d9a391e

如果路由信息也没问题,可以考虑检查下网络类型以及安全限制方面是否符合,如果网络类型和安全限制也没有问题的话,需要检查系统是否有其他的特殊配置,尤其是网络方面的特殊配置(回忆下我在这台主机上做过什么?)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

分享阿里云支持与服务团队最佳实践、经典案例与故障排查。

官方博客
文档