如何解决外部Node.js实例连接Cloud SQL时的[DEP0123]弃用警告?
解决Node.js连接Cloud SQL PostgreSQL时的TLS ServerName弃用警告
问题背景
我在Debian 9.9(stretch)环境下运行Node 12.7.0服务器,连接Cloud SQL PostgreSQL 11(beta)时,碰到了这条烦人的弃用警告:
(node:18101) [DEP0123] DeprecationWarning: Setting the TLS ServerName to an IP address is not permitted by RFC 6066. This will be ignored in a future version
根源在于Google Cloud SQL仅提供公网IP用于外部连接,而Node.js的TLS实现现在严格遵循RFC 6066规范,不允许将IP地址作为TLS握手的ServerName。
已验证的临时解决方案
我目前通过给Cloud SQL的公网IP绑定自定义子域名解决了这个问题:
- 在公司的DNS服务器上添加一条A记录,把一个子域名(比如
cloud-sql-db.example.com)指向Cloud SQL的公网IP - 修改Node.js代码里的数据库连接配置,用这个子域名代替IP地址
因为我的外部服务器只是短期使用,这个临时方案完全能满足需求,而且彻底消除了弃用警告。
关于更优方案的探讨
目前来看,由于Google Cloud SQL没有提供官方的服务器域名(仅给出IP),绑定自定义域名是最直接的可行方案。如果是长期运行的场景,可以考虑以下替代方向:
- 使用Cloud SQL内部连接:如果你的Node.js服务器也部署在Google Cloud的VPC网络内,可以通过VPC peering或者私有IP连接Cloud SQL,这种方式不需要公网IP,自然也不会触发TLS ServerName的问题
- 客户端配置优化:我曾调研过node-postgres客户端的配置选项,尝试绕过ServerName的强制设置,但目前客户端没有提供相关开关,相关需求也已经提交了Issue跟进
总结
如果是短期外部连接场景,给IP绑定自定义子域名是成本最低、见效最快的方案;长期场景优先考虑Cloud SQL的内部连接方式,从根源上避免公网IP带来的TLS规范问题。
内容的提问来源于stack exchange,提问作者Justin Kyryliuk
相关产品推荐
相关产品推荐

