GCP Kubernetes クラスタから VPC ピアリング経由で MongoDB Atlas に接続する際にエラーが発生しました

GCP Kubernetes クラスタから VPC ピアリング経由で MongoDB Atlas に接続する際にエラーが発生しました

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範囲

Docs.atlas.mongodb.com: セキュリティ VPC ピアリング

ガイド付きの以下のリンクに従う必要があります:

関連情報