从 GCP Kubernetes 集群通过 VPC Peering 连接到 MongoDB Atlas 时出错

从 GCP Kubernetes 集群通过 VPC Peering 连接到 MongoDB Atlas 时出错

我正在连接在 GCP Kubernetes 集群上运行的 Nodejs 应用程序。以前,当我启用 VPC Peering 并使用连接字符串 (Private) 时,它运行良好。在 Atlas 仪表板上建议:

mongodb+srv://(用户名):(密码)@<cluster_name>-pri.m6tkv.gcp.mongodb.net/<database_name>?retryWrites=true&w=majority

我按照本教程进行设置:https://docs.atlas.mongodb.com/security-vpc-peering/

我无法理解,因为我的应用程序已经使用此配置运行了一段时间。但有一天,在我的 GCP 集群中的 pod 上运行的应用程序无法连接。

这是错误信息:

Connected mongodb failed MongoNetworkError: failed to connect to server [<cluster_name>-00-00-pri.m6tkv.gcp.mongodb.net:27017] on first connect [MongoNetworkError: connection timed out  
at connectionFailureError (/app/node_modules/mongoose/node_modules/mongodb/lib/core/connection/connect.js:406:14)                                                                  
at TLSSocket.<anonymous> (/app/node_modules/mongoose/node_modules/mongodb/lib/core/connection/connect.js:294:16)                                                                   
at Object.onceWrapper (events.js:299:28)                                                                                                                                           
at TLSSocket.emit (events.js:210:5)                                                                                                                                                
at TLSSocket.Socket._onTimeout (net.js:469:8)                                                                                                                                      
at listOnTimeout (internal/timers.js:531:17)                                                                                                                                       
at processTimers (internal/timers.js:475:7) {name: 'MongoNetworkError'                                                                                                                                                           }]                                                                                                                                                                                    at Pool.<anonymous> (/app/node_modules/mongoose/node_modules/mongodb/lib/core/topologies/server.js:438:11)                                                                         
at Pool.emit (events.js:210:5)                                                                                                                                                     
at /app/node_modules/mongoose/node_modules/mongodb/lib/core/connection/pool.js:562:14                                                                                              
at /app/node_modules/mongoose/node_modules/mongodb/lib/core/connection/pool.js:1009:9                                                                                              
at /app/node_modules/mongoose/node_modules/mongodb/lib/core/connection/connect.js:31:7                                                                                             
at callback (/app/node_modules/mongoose/node_modules/mongodb/lib/core/connection/connect.js:264:5)                                                                                 
at TLSSocket.<anonymous> (/app/node_modules/mongoose/node_modules/mongodb/lib/core/connection/connect.js:294:7)                                                                    
at Object.onceWrapper (events.js:299:28)                                                                                                                                           
at TLSSocket.emit (events.js:210:5)                                                                                                                                                
at TLSSocket.Socket._onTimeout (net.js:469:8)                                                                                                                                      
at listOnTimeout (internal/timers.js:531:17)                                                                                                                                       
at processTimers (internal/timers.js:475:7)    

我切换回旧连接(标准),我的应用程序又可以正常工作了。连接字符串:

mongodb+srv://(用户名):(密码)@<cluster_name>.m6tkv.gcp.mongodb.net/<database_name>?retryWrites=true&w=majority

因此通过 VPC Peering 的连接出现了一些问题,我找不到任何线索。

答案1

将此答案发布为社区维基,以提高可见性。

我通过将集群中的 pod 地址范围添加到 Atlas 上的 IP 白名单中解决了这个问题。

解决该问题的方法是将 pod 地址范围添加到 Atlas 服务器的 IP 白名单中。

官方文档里也有提到:

您必须将与对等 VPC 关联的 VPC CIDR 块地址(或子集)添加到白名单您的新 VPC 对等体才能连接到 Atlas 集群。要了解 GCP 使用的自动模式 IP 范围,请参阅自动模式 IP 范围

Docs.atlas.mongodb.com:安全 VPC 对等连接

您需要按照以下链接中的指南进行操作:

相关内容