如何排查使用 VPC 公有子网或私有子网连接 Amazon RDS 数据库实例时遇到的问题?

2 分钟阅读
0

我无法连接到我的 Amazon Relational Database Service(Amazon RDS)数据库实例。我该如何排查 Amazon Virtual Private Cloud(Amazon VPC)公有子网或私有子网中的连接问题?

简短描述

您可以在 VPC 的公有子网或私有子网中启动 Amazon RDS 数据库。但是,RDS 实例端的 VPC 配置不正确可能会导致连接问题。或者,您要连接的客户端上的配置或连接问题也可能引起连接问题。

要解决这些问题,请根据您的环境参阅以下解决方法。

解决方法

注意:如果您在运行 AWS Command Line Interface (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI

我的数据库实例在公有子网中,但我无法从本地计算机通过互联网连接它

此问题可能会在将数据库实例的可公开访问属性设为时发生。要查看数据库实例是否可公开访问,请执行以下操作:

打开 Amazon RDS console(Amazon RDS 控制台),从导航窗格中选择 Databases(数据库)并选择您的数据库实例。然后,查看您实例的 Connectivity & Security(连接和安全)部分。

-或者-

在 AWS CLI 中使用 describe-db-instances 命令。

若要将 Amazon RDS 实例的 Publicly Accessible(可公开访问)属性更改为 Yes(是),请按以下步骤操作:

1.    打开 Amazon RDS 控制台

2.    从导航窗格中选择 Databases(数据库),然后选择数据库实例。

3.    选择 Modify(修改)。

4.    在 Connectivity(连接)下,展开 Additional configuratio(其他配置)部分,然后选择 Publicly accessible(可公开访问)。

5.    选择 Continue(继续)。

6.    选择 Modify DB Instance(修改数据库实例)。

**注意:**即使您没有选择 Apply Immediately(立即应用)选项,此更改也会立即生效。只有当您通过此修改设置了待处理的维护操作(这需要停机),并且选择 Apply Immediately(立即应用)时,才会出现停机。

如果您将 Publicly Accessible(可公开访问)属性设置为 Yes(是),但仍无法连接到 RDS 实例,请查看以下详细信息:

我的数据库实例在私有子网中,但我无法从本地计算机连接它

您可以使用公有子网解决此问题。使用公有子网时,子网上的所有资源均可从互联网访问。如果此解决方案不满足您的安全性要求,请使用 AWS Site-to-Site VPN。借助 Site-to-Site VPN,您可以配置客户网关,以便您的 VPC 可以连接到远程网络。

解决此问题的另一种方法是使用 Amazon EC2 实例作为堡垒(跳转)主机。有关更多信息,请参阅如何将 Amazon EC2 实例用作堡垒主机以从本地计算机连接到私有 Amazon RDS 数据库实例?

若要切换到公有子网:

1.    打开 Amazon RDS 控制台

2.    从导航窗格中选择数据库,然后选择数据库实例。

3.    从连接与安全部分复制数据库实例的终端节点。

4.    从 VPC 中的 EC2 实例向数据库实例终端节点执行 nslookup 命令。请参阅以下示例输出:

nslookup myexampledb.xxxx.us-east-1.rds.amazonaws.com
Server: xx.xx.xx.xx
Address: xx.xx.xx.xx#53

Non-authoritative answer:
Name: myexampledb.xxxx.us-east-1.rds.amazonaws.com
Address: 172.31.xx.x

5.    获得 RDS 数据库实例的私有 IP 地址后,您可以将私有 IP 地址关联到 VPC 中的特定子网。该 VPC 子网基于子网 CIDR 范围和私有 IP 地址。

6.    打开 Amazon VPC 控制台,然后从导航窗格中选择子网

7.    选择与您在第 5 步中找到的数据库实例相关联的子网。

8.    在描述窗格中,选择路由表

9.    选择操作,然后选择编辑路由

10.    选择 Add route(添加路由)。对于 IPv4 和 IPv6 流量,请在 Destination(目的地)方框中输入外部或本地网络的路由。然后在 Target(目标)列表中,选择互联网网关 ID。

注意:请确保实例的入站安全组规则将流量限制到外部或本地网络的地址。    

11.    选择 Save(保存)。

**重要提示:**如果将子网更改为公有子网,则会导致子网中的其他数据库实例也可以通过互联网访问。如果数据库实例具有关联的公有地址,则可从互联网访问这些数据库实例。

如果在执行这些步骤后仍然无法访问数据库实例,请检查数据库实例是否是 Publicly Accessible(可公开访问)。为此,请按照我的数据库实例在私有子网中,但我无法从本地计算机连接它中的步骤操作。

其他 VPC 中的 Amazon EC2 实例无法访问我的数据库实例

在两个 VPC 之间建立 VPC 对等连接。VPC 对等连接允许两个 VPC 使用私有 IP 地址相互通信。

1.    建立并接受 VPC 对等连接

**重要提示:**如果多个 VPC 位于同一个 AWS 账户中,请确保 IPv4 CIDR 数据块并不重叠。有关更多信息,请参阅 VPC 对等连接限制

2.    更新两个路由表

3.    更新您的安全组以引用对等 VPC 组

4.    为您的 VPC 对等连接激活 DNS 解析支持

5.    在 Amazon Elastic Compute Cloud(Amazon EC2)实例上,使用联网实用工具测试 VPC 对等连接。请参阅以下示例:

nc -zv <hostname> <port>

如果连接正常,则输出将类似于如下内容:

$ nc -zv myexampledb.xxxx.us-east-1.rds.amazonaws.com 5439
found 0 associations
found 1 connections:
     1:    flags=82<CONNECTED,PREFERRED>
    outif en0
    src xx.xxx.xxx.xx port 53396
    dst xx.xxx.xxx.xxx port 5439
    rank info not available
    TCP aux info available

Connection to myexampledb.xxxx.us-east-1.rds.amazonaws.com port 5439 [tcp/*] succeeded!

相关信息

在 VPC 中访问数据库实例的方案

在 VPC 中使用数据库实例

相关视频

AWS 官方
AWS 官方已更新 1 年前