daz*_*per 13 mysql amazon-web-services amazon-rds amazon-vpc
我创建了一个 VPC,并在其中创建了一个 RDS 实例。RDS实例是可公开访问的,其设置如下:
附加到 RDS 实例的安全组接受所有流量:
我所有的网络 ACL 都接受所有流量。但是,我无法从 VPC 之外的机器访问我的实例。我收到以下错误:
root@vps151014:~# mysql -h mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com -P 3306 -u skullberry -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com' (110)
Run Code Online (Sandbox Code Playgroud)
如果我从 VPC 内的 EC2 运行相同的命令,则可以连接。我试过从几台机器连接,所有机器都没有防火墙(即端口 3306 打开)。
我显然错过了一些东西,但一切似乎都配置正确。可能是什么问题?
Mic*_*bot 23
要使 VPC 中的 RDS 实例可以“公开”(Internet)访问,它所连接的所有子网都必须是“公共”——而不是“私有”——VPC 的子网。
公共子网本质上定义为将 Internet 网关对象 (igw-xxxxxxxx) 作为其到“Internet”或至少到您需要访问的任何 Internet 目的地的路由的子网。通常,这是 的目标地址0.0.0.0/0
。公共子网必须用于具有关联公共 IP 地址的实例(包括 RDS),不应用于没有公共 IP 地址的实例,因为私有地址在没有转换的情况下无法在 Internet 上工作。
相比之下,私有子网的路由表配置为通过另一个 EC2 实例(通常是 NAT 实例)到达 Internet 目的地。这在与该子网关联的 VPC 路由表中显示为 i-xxxxxxxx,而不是“igw”。那台机器(它本身实际上将位于与其作为路由目的地的那些不同的子网上)充当转换器,允许私有 IP-only 实例使用 NAT 机器的公共网络透明地发出出站 Internet 请求IP 满足他们的互联网需求。如果连接到私有子网,具有公共 IP 地址的实例将无法与 Internet 正确交互。
在此特定情况下,与 RDS 实例关联的子网并未真正配置为可以简单地归类为私有子网或公共子网的东西,因为该子网根本没有默认路由。通过“igw”对象添加默认路由,或者像 OP 一样,将静态路由添加到需要连接的 Internet IP 地址,到子网的 VPC 路由表中修复了连接问题。
但是...如果您遇到类似的问题,您不能简单地更改路由表或构建新的路由表并将子网与它们关联,除非您在子网上没有其他任何东西已经正常工作,因为更改可能是合理的预计会打破现有的连接。在这种情况下,正确的做法是使用正确的路由表条目在不同的子网上配置实例。
设置 VPC 时,最好明确定义子网角色,然后在首次调试 VPC 时完全配置必要的路由。同样重要的是要记住,整个 VPC“LAN”是一个软件定义的网络。与在物理网络中路由器可能成为瓶颈不同,将流量较大的机器放在同一子网中通常是明智的……跨子网的流量在 VPC 上没有性能劣势。机器应该放置在适合机器 IP 寻址需求的子网上——公共地址、公共子网;没有公共地址,私有子网。
关于 VPC 中私有/公共子网逻辑的更多讨论可以在为什么我们需要 VPC 中的私有子网(在 Stack Overflow)中找到。
归档时间: |
|
查看次数: |
16181 次 |
最近记录: |