关于分配给我的 Amazon RDS 数据库实例的 IP 地址,我需要了解什么?

上次更新日期:2021 年 11 月 9 日

我正在寻找与分配给我的 Amazon Relational Database Service(Amazon RDS)实例的 IP 地址相关的信息。

解决方法

当 Amazon RDS 在 Virtual Private Cloud(VPC)中创建数据库实例时,系统会使用数据库子网组中的 IP 地址为您的数据库实例分配一个网络接口。根据实例的配置,为您的实例分配的 IP 地址有两种不同类型。

  • 私有 IP 地址:当您在 VPC 内启动数据库实例时,该数据库实例具有用于 VPC 内部流量的私有 IP 地址。无法从互联网访问此 IP 地址。此 IP 地址用于从同一 VPC 内的资源连接到实例。默认情况下,每个 Amazon RDS 数据库实例都有一个私有 IP 地址。此 IP 地址是根据您在数据库子网组中定义的范围分配的。
  • 公有 IP 地址:公有 IP 地址可以从互联网访问。此 IP 地址用于从 VPC 外部的资源或互联网连接到实例。只有在为数据库实例选择了 Publicly accessible(可公开访问)的配置设置时,才会为数据库实例分配公有 IP 地址。

我已经为我的 RDS 实例选择了 Publicly accessible(可公开访问)设置,但是没有为实例分配公有 IP 地址

当数据库子网组中的子网是私有子网时,通常会发生这种情况。

要解决此问题,请执行以下操作:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择 Subnet groups(子网组)。
  3. 选择与数据库实例关联的子网组。
    您可以使用 VPC ID 和关联子网的子网 ID 查看子网组。
  4. 打开 Amazon VPC 控制台
  5. 在导航窗格中,选择 Internet Gateways(互联网网关)。
  6. 检查您的 VPC 是否已连接到互联网网关。
    如果您的 VPC 未连接到互联网网关,请创建互联网网关并将其附加到您的 VPC。
  7. 从导航窗格中,选择 Route tables(路由表)。
  8. 检查与您的子网关联的路由表。
  9. 选择 Subnet associations(子网关联)选项卡。然后,验证数据库子网组中的所有子网是否都已附加到路由表
    如果子网未与路由表关联,请选择 Edit subnet associations(编辑子网关联)。然后,选择要与路由表关联的子网。有关更多信息,请参阅将子网与路由表关联
  10. 选择 Routes(路由)选项卡。然后,验证数据库子网组中的所有子网在 Destination(目的地)字段中是否具有 0.0.0.0/0,在 Target(目标)字段中是否具有互联网网关 ID。
    如果子网的 Destination(目的地)和 Target(目标)字段具有其他值,请编辑路径以包含上述值。有关更多信息,请参阅在路由表中添加和删除路由
  11. 打开 Amazon RDS 控制台
  12. 在导航窗格中,选择 Databases(数据库)。
  13. 选择要修改的数据库实例,然后选择 Modify(修改)。
  14. Connectivity(连接)下,展开 Additional configuratio(其他配置)部分,然后选择 Publicly accessible(可公开访问)。
  15. 选择 Continue(继续)。
  16. 选择 Modify DB instance(修改数据库实例)。

注意:请确保您的子网组不包含公有子网和私有子网的组合。这种组合可能会导致一些情况,例如主实例在公有子网中运行,而辅助实例在多可用区配置的私有子网中运行。这些情况会导致故障转移后出现连接问题。

我想查找我的 Amazon RDS 数据库实例的私有和公有 IP 地址

在 Amazon RDS 中,IP 地址是动态的,而端点是静态的。因此,最佳实践是使用端点连接到您的实例。每个 Amazon RDS 实例都有一个端点。要查找实例的端点(也称为 DNS 名称),请执行以下操作:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择 Databases(数据库)。
  3. 选择要查找其 IP 地址的数据库实例。
  4. 选择 Connectivity & security(连接与安全)选项卡。

您可以在 Endpoint & port(端点和端口)部分查看端点信息。

当您尝试从同一 VPC 中的资源连接到数据库实例时,RDS 端点会自动解析为私有 IP 地址。当您从 VPC 外部或互联网连接到数据库实例时,端点将解析为公有 IP 地址。

您还可以通过运行以下任一命令来查找 RDS 实例的 IP 地址:

nslookup example-rds-endpoint

– 或者 –

dig example-rds-endpoint

为 RDS 数据库实例运行 nslookup 命令时,您可能会看到类似于以下内容的输出:

  • 来自同一 VPC 中的 Amazon Elastic Compute Cloud(Amazon EC2)实例的输出将解析为私有 IP 地址:
[ec2-user@ip-172-xx-xx-xx ~]$ nslookup myoracledb.xxxxx.us-east-1.rds.amazonaws.com
Server: xxx.xxx.xxx.xxx
Address: xxx.xxx.xxx.xxx#53
Non-authoritative answer: myoracledb.xxxxx.us-east-1.rds.amazonaws.com canonical name = ec2-3-232-189-42.compute-1.amazonaws.com.
Name: ec2-3-232-189-42.compute-1.amazonaws.com
Address: 172.31.8.27
  • 来自不同 VPC 中的 Amazon EC2 实例的输出将解析为公有 IP 地址:
[ec2-user@ip-172-xx-xx-xx ~]$ nslookup myoracledb.xxxxx.us-east-1.rds.amazonaws.com
Server: xxx.xxx.xxx.xxx
Address: xxx.xxx.xxx.xxx#53
Non-authoritative answer: myoracledb.xxxxx.us-east-1.rds.amazonaws.com canonical name = ec2-3-232-189-42.compute-1.amazonaws.com.
Name: ec2-3-232-189-42.compute-1.amazonaws.com
Address: 3.232.189.42

数据库实例的 IP 地址不一致

由于实例的 IP 地址是动态的,因此您无法为实例分配静态 IP 地址或弹性 IP 地址。分配给 RDS 数据库实例的 IP 地址在以下一种或多种情况下会发生变化:

  • 实例已停止并重新启动。
    注意:重启实例时,IP 地址不会发生变化。
  • 由于实例故障和数据库实例类更新等情况,底层主机被替换。
  • 实例上进行了硬件维护。
  • 实例位于多可用区环境中,并且发生了故障转移。
  • 数据库实例的操作系统进行软件修补。
  • 数据库实例的手动故障转移由使用带故障转移的重启操作启动。
  • 数据库引擎进行主要或次要版本升级。
  • 实例的可用区中断。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?