Fehler beim Herstellen einer Verbindung zu MongoDB Atlas über VPC-Peering vom GCP Kubernetes-Cluster

Fehler beim Herstellen einer Verbindung zu MongoDB Atlas über VPC-Peering vom GCP Kubernetes-Cluster

Ich verbinde eine Nodejs-App, die auf dem GCP Kubernetes-Cluster läuft. Vorher hat es problemlos funktioniert, wenn ich VPC Peering aktiviert und die Verbindungszeichenfolge (Privat) verwendet habe. Es wird auf dem Atlas-Dashboard empfohlen:

mongodb+srv://(Benutzername):(Passwort)@<Clustername>-pri.m6tkv.gcp.mongodb.net/<Datenbankname>?retryWrites=true&w=majority

Zur Einrichtung bin ich diesem Tutorial gefolgt:https://docs.atlas.mongodb.com/security-vpc-peering/

Ich kann das nicht verstehen, da meine App schon eine ganze Weile mit dieser Konfiguration läuft. Aber eines schönen Tages kann die App, die auf einem Pod in meinem GCP-Cluster läuft, keine Verbindung herstellen.

Das ist die Fehlermeldung:

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)    

Ich bin wieder auf die alte Verbindung (Standard) umgestiegen, meine App funktioniert wieder. Der Verbindungsstring:

mongodb+srv://(Benutzername):(Passwort)@<Clustername>.m6tkv.gcp.mongodb.net/<Datenbankname>?retryWrites=true&w=majority

Es besteht also ein Problem mit der Verbindung über VPC-Peering, ich konnte keine Ahnung davon finden.

Antwort1

Ich veröffentliche diese Antwort zur besseren Sichtbarkeit als Community-Wiki.

Ich habe dieses Problem gelöst, indem ich den Pod-Adressbereich in meinem Cluster zur IP-Whitelist auf Atlas hinzugefügt habe.

Die Lösung für dieses Problem bestand darin, den Pod-Adressbereich zur IP-Whitelist des Atlas-Servers hinzuzufügen.

Es wird auch in der offiziellen Dokumentation erwähnt:

Sie müssen Ihre VPC CIDR-Blockadresse (oder Teilmenge), die mit der Peer-VPC verknüpft ist, zumWhitelistbevor Ihr neuer VPC-Peer eine Verbindung zu Ihrem Atlas-Cluster herstellen kann. Weitere Informationen zu den von GCP verwendeten IP-Bereichen im Auto-Modus finden Sie unterIP-Bereiche im Automatikmodus.

Docs.atlas.mongodb.com: Sicherheit VPC Peering

Sie müssen dem folgenden Link mit einer Anleitung darin folgen:

verwandte Informationen