
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.
Sie müssen dem folgenden Link mit einer Anleitung darin folgen: