
GCP Kubernetes クラスターで実行されている Nodejs アプリに接続しています。以前は、VPC ピアリングを有効にして接続文字列 (プライベート) を使用していたときは正常に動作していました。Atlas ダッシュボードでは次のように推奨されています。
mongodb+srv://(ユーザー名):(パスワード)@<クラスター名>-pri.m6tkv.gcp.mongodb.net/<データベース名>?retryWrites=true&w=majority
セットアップにはこのチュートリアルに従いました:https://docs.atlas.mongodb.com/security-vpc-peering/
私のアプリはこの構成でかなり長い間実行されていたので、理解できません。しかしある日、GCP クラスターのポッドで実行されているアプリが接続できなくなりました。
エラーメッセージは次のとおりです:
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://(ユーザー名):(パスワード)@<クラスター名>.m6tkv.gcp.mongodb.net/<データベース名>?retryWrites=true&w=majority
そのため、VPC ピアリング経由の接続に何らかの問題が発生していますが、手がかりが見つかりません。
答え1
可視性を高めるために、この回答をコミュニティ ウィキとして投稿します。
この問題は、クラスター内のポッド アドレス範囲を Atlas の IP ホワイトリストに追加することで解決しました。
この問題の解決策は、ポッド アドレス範囲を Atlas サーバーの IP ホワイトリストに追加することでした。
公式ドキュメントにも記載されています:
ピアVPCに関連付けられたVPC CIDRブロックアドレス(またはサブセット)をホワイトリスト新しいVPCピアがAtlasクラスタに接続できるようになる前に、GCPが使用する自動モードのIP範囲について詳しくは、自動モードのIP範囲。
ガイド付きの以下のリンクに従う必要があります: