我有一个 RDS 实例运行在一个没有 NAT 的子网上,还有一个 EC2 实例运行在另一个配置了 Internet 网关的子网上,它们都位于同一个 VPC 中。我已将 RDS 实例配置为不可公开访问。
我在远程 EC2(在第二个子网上运行)中使用以下命令连接到 RDS 实例:
mysql -h xxxx.eu-central-1.rds.amazonaws.com -P 3306 -u root -p
我输入了配置 RDS 时设置的正确密码,但出现以下错误:
错误 2003 (HY000):无法连接到“XXX.eu-central-1.rds.amazonaws.com”上的 MySQL 服务器 (110)
我检查过了,这不是名称解析问题。ec2 将端点转换为正确的内部 ip。
这是我的设置:
远程数据传送系统
私有云平台:与 EC2 相同
可用区域:eu-central-1b
子网:在 RDS 面板中,我可以看到所有子网,但我可以看到区域 b 的私有子网中可用 IP 少了一个
保安组:私有安全组(无出站规则,入站时使用 mysql 端口和公共安全组作为源的单条规则)
公开可得: 不
多可用区: 不
EC2
私有云平台:与 RDS 相同
可用区域:eu-central-1b
子网:区域 b 的公共子网
保安组:公共安全组(所有来源的端口作为入站规则,所有来源的ssh、http、https端口作为出站规则)
我可以使用 http 和 ssh 访问 EC2 实例。它按预期运行。
私有云平台
私有云平台:RDS 和 EC2 使用相同的
子网:每个可用区一个公有,一个私有,共 4 个
DHCP:默认值 ( domain-name = eu-central-1.compute.internal
domain-name-servers = AmazonProvidedDNS
)
路由表:对于公共子网,路由到local
(自动)和互联网网关,对于私有子网,仅路由到local
(自动)
ACL:public:allow all
在入站和出站中。private:仅在入站中。在两个 ACL 上,在入站和出站上都有一行带有allow all
id 的行,但我很确定它应该在那里,我无法删除它。*
deny all
我做错了什么?我遗漏了什么吗?
答案1
检查您的安全组,这可能是罪魁祸首。使用 DNS 名称的 VPC 内的主机将始终使用远程资源的私有 IP,因此 NAT / IG 部分并不重要。