为了使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实例使用NAT机器的公共网络透明地发出出站Internet请求IP满足其Internet需求。如果具有公共IP地址的实例连接到专用子网,则无法与Internet正确交互。
在特定情况下,此处与RDS实例关联的子网并未真正配置为可以简单地归类为私有或公共子网的东西,因为该子网根本没有默认路由。通过“ igw”对象添加默认路由,或者像OP那样,将静态路由添加到需要连接的Internet IP地址,到子网的VPC路由表中,可以解决连接问题。
但是...如果遇到类似的问题,则不能简单地更改路由表或构建新的路由表并将子网与它们相关联,除非您在子网上没有其他可用的方法,因为更改可能是合理的。预期会破坏现有的连接。在这种情况下,正确的做法是为不同子网中的实例提供正确的路由表条目。
设置VPC时,最好明确定义子网角色,并在首次调试VPC时完全配置必要的路由。同样重要的是要记住,整个VPC“ LAN”是一个软件定义的网络。与物理网络不同,在物理网络中,路由器可能会成为瓶颈,并且将具有高流量的机器放置在同一子网中通常是明智的……跨子网的流量在VPC上没有性能上的劣势。机器应放置在适合其IP地址需求的子网中-公共地址,公共子网;没有公共地址,私有子网。
有关VPC中专用/公用子网的物流的更多讨论,请参见“ 为什么我们需要VPC中的专用子网(在堆栈溢出处)”。
(110)
错误消息的意思是“连接超时”,所以肯定这是一个IP连接问题。您的RDS实例显示与两个子网相关联。在VPC控制台中,这两个子网的默认路由是什么?是“ igw-xxxxxxxx”还是“ i-xxxxxxxx”?