
# 通过内网连接RDS for PostgreSQL实例（Linux方式）
RDS for PostgreSQL实例购买完成后，可以先登录到Linux弹性云服务器，在ECS上安装PostgreSQL客户端，然后执行psql命令行通过PostgreSQL内网IP连接到实例。
通过PostgreSQL客户端连接实例支持SSL连接方式，SSL连接具有加密功能，安全性更高。
创建RDS for PostgreSQL实例时默认开启SSL，实例创建完成后，不支持关闭。
开启SSL连接数据库实例后，数据库的只读、读写性能是未开启SSL连接数据库实例的80%左右。
#### 步骤1：购买ECS
1. [登录ECS管理控制台](https://console.huaweicloud.com/ecm/?locale=zh-cn#/ecs/manager/vmList)，查看是否有弹性云服务器。
   - 有Linux弹性云服务器，执行[3]。
   
   - 无Linux弹性云服务器，执行[2]。
   
   
   图1ECS实例   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002248780765.png "点击放大") 
2. 购买弹性云服务器时，选择Linux操作系统，例如CentOS。
   由于需要在ECS下载PostgreSQL客户端，因此需要为ECS绑定弹性公网IP（EIP），并且选择与RDS for PostgreSQL实例相同的区域、VPC和安全组，便于RDS for PostgreSQL和ECS网络互通。
   购买Linux弹性云服务器请参考《弹性云服务器用户指南》中"[购买弹性云服务器](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)"章节。
   
3. 在ECS实例基本信息页，查看ECS实例的区域和VPC。
   图2ECS基本信息   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002248780769.png "点击放大")
   
   
4. [登录RDS管理控制台](https://console.huaweicloud.com/rds/#/rds/management/list)。
5. 单击RDS for PostgreSQL实例名称，在实例"概览"页，查看RDS实例的区域和VPC。
   图3PostgreSQL概览   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002248940661.png "点击放大") 
6. 确认ECS实例与RDS for PostgreSQL实例是否处于同一区域、同一VPC内。
   - 是，执行[安装PostgreSQL客户端（15及以下版本）]。
   
   - 如果不在同一区域，请重新购买ECS实例。不同区域的云服务之间内网互不相通，无法访问实例。请就近选择靠近您业务的区域，可减少网络时延，提高访问速度。
   
   - 如果不在同一VPC，可以修改ECS的VPC，请参见[切换虚拟私有云](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0504.html)。
    
 
#### 步骤2：测试连通性并安装PostgreSQL客户端
- [安装PostgreSQL客户端（15及以下版本）]
  
  1. 登录ECS实例，请参见《弹性云服务器用户指南》中"[Linux弹性云服务器远程登录（VNC方式）](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0136.html)"。
  
  2. 在RDS"实例管理"页面，单击实例名称进入"概览"页面。
  
  3. 选择"连接管理"，在"连接信息"模块获取实例的内网地址和数据库端口。
     图4连接信息   
     ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213820692.png "点击放大") 
  
  4. 在ECS上测试是否可以正常连接到RDS for PostgreSQL实例内网地址的端口。
     ```
     curl -kv 192.168.0.7:5432
     ```
     - 如果回显信息中有"Connected to *ip* (*ip* ) port *port_number* "，说明网络正常，可以通信。
     
     - 否则，说明无法通信，请检查安全组规则。
       - 查看ECS的安全组的出方向规则，如果目的地址不为"0.0.0.0/0"且协议端口不为"全部"，需要将RDS实例的内网IP地址和端口添加到出方向规则。
         图5ECS的安全组   
         ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213820700.png "点击放大") 
       
       - 查看RDS的安全组的入方向规则，需要将ECS实例的私有IP地址和端口添加到入方向规则，具体操作请参见[设置安全组规则](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_11_0009.html)。
        
      
  
  5. 安装PostgreSQL客户端。 PostgreSQL社区提供了针对不同操作系统的[客户端安装方法](https://www.postgresql.org/download/)。通过操作系统的安装工具直接下载安装。此安装方式比较简单，但是对ECS操作系统有要求，只有PostgreSQL社区中支持的操作系统才可以使用该安装方式。
     使用操作系统默认安装，当前使用的Linux操作系统是CentOS 7，通过工具安装最高版本是15版本。
     图6获取安装工具   
     ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213660936.png "点击放大")
     执行[安装](https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm)命令：
     ```
     sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
     sudo yum install -y postgresql15-server
     ```
     查看是否安装成功：
     ```
     psql -V
     ```
     图7安装成功   
     ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213660912.png "点击放大") 
   
- [安装PostgreSQL客户端（对版本没有限制）]
  1. 登录ECS实例，请参见《弹性云服务器用户指南》中"[Linux弹性云服务器远程登录（VNC方式）](https://support.huaweicloud.com/usermanual-ecs/ecs_03_0136.html)"。
  
  2. 在RDS"实例管理"页面，单击实例名称进入"概览"页面。
  
  3. 选择"连接管理"，在"连接信息"模块获取实例的内网地址和数据库端口。
     图8连接信息   
     ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002248780761.png "点击放大") 
  
  4. 在ECS上测试是否可以正常连接到RDS for PostgreSQL实例内网地址的端口。
     ```
     curl -kv 192.168.0.7:5432
     ```
     - 如果回显信息中有"Connected to *ip* (*ip* ) port *port_number* "，说明网络正常，可以通信。
     
     - 否则，说明无法通信，请检查安全组规则。
       - 查看ECS的安全组的出方向规则，如果目的地址不为"0.0.0.0/0"且协议端口不为"全部"，需要将RDS实例的内网IP地址和端口添加到出方向规则。
         图9ECS的安全组   
         ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002248940637.png "点击放大") 
       
       - 查看RDS的安全组的入方向规则，需要将ECS实例的私有IP地址和端口添加到入方向规则，具体操作请参见[设置安全组规则](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_11_0009.html)。
        
      
  
  5. 安装PostgreSQL客户端。
     [源码安装方式](https://www.postgresql.org/docs/16/installation.html)，该安装方式对RDS for PostgreSQL实例的版本以及ECS的操作系统没有限制。
     下面以Huawei Cloud EulerOS 2.0镜像的ECS为例，安装PostgreSQL 16.4版本客户端。
     图10查看ECS镜像   
     ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213660932.png "点击放大")
     1. 要支持SSL，需要在ECS上提前下载openssl。
        ```
        sudo yum install -y openssl-devel
        ```
        
     
     2. 在[官网](https://www.postgresql.org/ftp/source/)获取代码下载链接，使用wget直接下载安装包或者[下载到本地](https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz)后上传到ECS上。
        ```
        wget https://ftp.postgresql.org/pub/source/v16.4/postgresql-16.4.tar.gz
        ```
        
     
     3. 解压安装包。
        ```
        tar xf postgresql-16.4.tar.gz
        ```
        
     
     4. 编译安装。
        ```
        cd postgresql-16.4
        ./configure --without-icu --without-readline --without-zlib --with-openssl
        make -j 8 && make install
        ```
        ![](https://support.huaweicloud.com/usermanual-rds-pg/public_sys-resources/note_3.0-zh-cn.png)
        不指定--prefix，表示默认路径为"/usr/local/pgsql"，因为只安装客户端采用最简安装。
        图11编译安装   
        ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002248940665.png "点击放大") 
     
     5. 配置环境变量，在"/etc/profile"文件中添加以下内容。
        ```
        export PATH=/usr/local/pgsql/bin:$PATH
        export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
        source /etc/profile
        ```
        
     
     6. 测试psql是否可使用。
        ```
        psql -V
        ```
        图12测试psql可用   
        ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002248780789.png "点击放大") 
      
   
#### 步骤3：使用命令行连接实例（SSL加密）
1. 在RDS"实例管理"页面，单击实例名称进入"概览"页面。
2. 选择"连接管理"。
3. 在"连接信息"模块，单击"SSL"处的![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213820704.png)，下载"Certificate Download"压缩包，解压后获取根证书（ca.pem）和捆绑包（ca-bundle.pem）。
   图13下载证书   
   ![](https://support.huaweicloud.com/usermanual-rds-pg/zh-cn_image_0000002213820696.png "点击放大") 
4. 将根证书（ca.pem）上传到ECS。
   ![](https://support.huaweicloud.com/usermanual-rds-pg/public_sys-resources/note_3.0-zh-cn.png)
   - 推荐使用TLS v1.2及以上协议，低于该版本可能存在安全风险。
   
   - 协议算法推荐使用EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EDH+aRSA+AESGCM:EDH+aDSS+AESGCM:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!SRP:!RC4，使用其他选项可能存在安全风险。
   
   - 根证书捆绑包（ca-bundle.pem）包含2017年4月之后的新根证书和原有根证书。
   
   - ca.pem和ca-bundle.pem都可以实现SSL连接，ca-bundle.pem文件包含ca.pem，使用ca.pem即可。
     
5. 在ECS上执行以下命令连接RDS for PostgreSQL实例。
   - sslmode：verify-ca
     ```
     psql --no-readline -h <host> -p <port> "dbname=<database> user=<user> sslmode=verify-ca sslrootcert=<ca-file-directory>"
     ```
     示例：
     ```
     psql --no-readline -h 192.168.0.7 -p 5432 "dbname=postgres user=root sslmode=verify-ca sslrootcert=/root/ca.pem"
     ```
     
   
   - sslmode：verify-full
     ```
     psql --no-readline -h <host> -p <port> "dbname=<database> user=<user> sslmode=verify-full sslcert=/CA/server.pem sslkey=/CA/server.key sslrootcert=<ca-file-directory>"
     ```
     内网IP认证示例：
     ```
     psql --no-readline -h 192.168.0.44 -p 5432 "dbname=postgres user=root sslmode=verify-full sslcert=/CA/server.pem sslkey=/CA/server.key  sslrootcert=/root/ca.pem"
     ```
     对于2026年8月开始新购买的实例，支持内网域名认证：
     ```
     psql --no-readline -p 5432 "host=instanceId.internal.xxxx.postgresql.rds.myhuaweicloud.com  dbname=postgres user=root sslmode=verify-full sslcert=/CA/server.pem sslkey=/CA/server.key  sslrootcert=/root/ca.pem"
     ```
     
   
   
   表1参数说明 
   | 参数                      | 说明                                                                                                                                                                                 |
   |:---|:---|
   | *\<host\>*              | 在[3]中获取的内网地址。 如果使用内网域名认证方式，该值为内网域名，可单击实例名称，在"连接管理"页面的"内网域名"处获取。                  |
   | *\<port\>*              | 在[3]中获取的数据库端口，默认5432。                                                                                                 |
   | *\<database\>*          | 需要连接的数据库名，默认的管理数据库是postgres。                                                                                                                                                       |
   | *\<user\>*              | 管理员账号root。                                                                                                                                                                         |
   | *\<ca-file-directory\>* | SSL连接CA证书路径，该文件需放在执行该命令的路径下。                                                                                                                                                       |
   | sslmode                 | SSL连接模式，设置为"verify-ca"，通过检查证书链（Certificate Chain）来验证服务是否可信任。 设置为"verify-full"，为全量验证（Full Verification）模式，不仅验证证书的有效性，还要验证证书的完整性、链条的完整性以及身份的真实性。 |
   | sslcert                 | 服务端证书，适用于"verify-full"模式连接使用，双端认证，值为数据库参数ssl_cert_file的值：/CA/server.pem                                                                                                            |
   | sslkey                  | 服务端密钥，适用于"verify-full"模式连接使用，双端认证，值为数据库参数ssl_key_file的值：/CA/server.key                                                                                                             |
      
   
6. 出现如下提示时，输入数据库账号对应的密码。
   ```
   Password:
   ```
   出现如下信息，表示连接成功。
   ```
   SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
   ```
   
 
#### 常见问题
#### 如果密码忘记了怎么办？
在"实例管理"页面，选择指定的实例，选择"更多 \> 重置密码"，输入新密码。
#### 后续操作
登录实例后，您可以创建数据库，进行数据迁移等操作，具体请参见：
- [通过界面可视化创建PostgreSQL数据库](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_05_0019.html)
- [通过调用API创建PostgreSQL数据库](https://support.huaweicloud.com/api-rds/rds_11_0002.html)
- [通过DAS管理PostgreSQL数据库](https://support.huaweicloud.com/usermanual-das/das_11_0028.html)
- [将数据迁移到云上RDS for PostgreSQL](https://support.huaweicloud.com/usermanual-rds-pg/rds_pg_05_0001_03.html)
 
