從同一 VPC 上的 EC2 連接到 RDS
我有一個在沒有 NAT 的子網上執行的 RDS 實例,以及在另一個配置了 Internet 網關的子網上執行的 EC2 實例,兩者都位於同一個 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。
這是我的設置:
RDS
VPC : 與 EC2 相同
可用區:
eu-central-1b
SUBNET:在 RDS 面板中,我可以看到所有子網,但我可以看到區域 b 的私有子網中的可用 ip 少一個
SECURITY GROUP:私有安全組(無出站規則,入站單條規則,以mysql埠和公共安全組為源)
可公開訪問:否
多可用區:沒有
EC2
VPC:與 RDS 相同
可用區:
eu-central-1b
SUBNET : 區域 b 的公共子網
SECURITY GROUP:公共安全組(任意來源的所有埠為入站規則,任意來源的ssh、http、https埠為出站規則)
我可以使用 http 和 ssh 訪問 EC2 實例。它按預期工作。
專有網路
VPC:RDS 和 EC2 使用相同
SUBNETS : 每個 AZ 一個公有一個私有,總共 4 個
DHCP : 預設 (
domain-name = eu-central-1.compute.internal
domain-name-servers = AmazonProvidedDNS
)路由表:對於公共子網,路由到
local
(自動)和網際網路度假,對於私有,只有local
(自動)ACL:公共:
allow all
入站和出站。私人:allow all
僅在入站。在入站和出站的兩個 ACL 上,還有一條帶有 id 的行*
,deny all
但我很確定它應該在那裡,我無法刪除它。我究竟做錯了什麼?我錯過了什麼嗎?
檢查您的安全組,這可能是罪魁禍首。VPC 內使用 DNS 名稱的主機將始終使用遠端資源的私有 IP,因此 NAT / IG 部分並不重要。
您需要確保您的 VPC/EC2 安全組和 NACL 允許適當的訪問。
我有一個涵蓋 EC2/RDS 安全組設置的教程,您可能會發現它很有用。
您還應該在 SO 上查看此答案。