无法从EKS集群连接AWS RDS Postgres:pg_hba.conf无匹配条目
问题:EKS Pod连接RDS Postgres失败,提示无pg_hba.conf条目(未加密)
我正尝试从运行NestJS+TypeORM应用的EKS Kubernetes集群Pod连接AWS RDS Postgres数据库。EKS集群与RDS实例不在同一VPC,但RDS已设置为公开可用。RDS实例端点及其他凭证已作为环境变量配置到应用部署中,通过pgAdmin可正常连接,但Pod启动时出现以下错误:
[Nest] 1 - 08/11/2023, 10:29:43 PM ERROR [ExceptionHandler] no pg_hba.conf entry for host "18.193.43.189", user "postgres", database "development", no encryption error: no pg_hba.conf entry for host "18.193.43.189", user "postgres", database "development", no encryption
当前TypeORM配置如下:
TypeOrmModule.forRootAsync({ useFactory: (): TypeOrmModuleOptions => ({ type: process.env.DB_TYPE as any, host: process.env.DB_HOST, port: parseInt(process.env.DB_PORT), username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, entities: ['dist/**/*.entity{.ts,.js}'], migrations: ['dist/**/database/migration/**/*{.ts,.js}'], subscribers: ['dist/**/*.subscriber/{.ts,.js}'], migrationsRun: true, synchronize: true, uuidExtension: 'pgcrypto', schema: 'public', logging: process.env.DB_LOGGING === 'true', migrationsTableName: 'florence_migration', namingStrategy: new SnakeNamingStrategy(), ssl: false, options: { encrypt: false }, }), })
RDS Postgres配置及关联VPC入站安全组截图:
解决方法
错误核心是AWS RDS公开可用的Postgres默认强制加密连接,但你的TypeORM配置关闭了SSL/加密。
调整TypeORM的SSL配置
把配置里的ssl: false改为ssl: true,同时更新options参数适配pg驱动:ssl: true, options: { encrypt: true, rejectUnauthorized: false // 未配置自定义CA证书时临时关闭验证,生产环境建议添加RDS官方CA证书 }生产环境需使用AWS RDS CA证书,示例配置:
import * as fs from 'fs'; // ... ssl: { rejectUnauthorized: true, ca: fs.readFileSync('./rds-ca-2019-root.pem').toString() // 替换为实际CA证书路径 }, options: { encrypt: true } // ...确认RDS SSL强制设置
检查RDS实例的「SSL连接」配置,确保处于「强制SSL连接」状态(从截图看已开启,可再次确认)。验证安全组规则覆盖Pod出口IP
确保RDS安全组的入站规则允许EKS Pod的出口IP或EKS集群NAT网关IP访问5432端口。pgAdmin能连接说明你的本地IP已被允许,但Pod的出口IP可能不同,需补充对应规则。
内容的提问来源于stack exchange,提问作者Nikola Bozic
相关产品推荐
相关产品推荐



