GCP Kubernetes 클러스터에서 VPC 피어링을 통해 MongoDB Atlas에 연결할 때 오류가 발생했습니다.

GCP Kubernetes 클러스터에서 VPC 피어링을 통해 MongoDB Atlas에 연결할 때 오류가 발생했습니다.

GCP Kubernetes 클러스터에서 실행되는 Nodejs 앱을 연결하고 있습니다. 이전에는 VPC 피어링을 활성화하고 연결 문자열(개인)을 사용하면 제대로 작동했습니다. 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 클러스터의 포드에서 실행 중인 앱이 연결할 수 없습니다.

오류 메시지는 다음과 같습니다.

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 피어링을 통한 연결에 문제가 있어서 어떤 단서도 찾을 수 없었습니다.

답변1

더 나은 가시성을 위해 이 답변을 커뮤니티 위키로 게시합니다.

내 클러스터의 포드 주소 범위를 Atlas의 IP 화이트리스트에 추가하여 이 문제를 해결했습니다.

이 문제에 대한 해결책은 Atlas 서버의 IP 화이트리스트에 Pod 주소 범위를 추가하는 것이었습니다.

공식 문서에도 언급되어 있습니다:

피어 VPC와 연결된 VPC CIDR 블록 주소(또는 하위 집합)를화이트리스트새 VPC 피어가 Atlas 클러스터에 연결되기 전에. GCP가 사용하는 자동 모드 IP 범위에 대해 알아보려면 다음을 참조하세요.자동 모드 IP 범위.

Docs.atlas.mongodb.com: 보안 VPC 피어링

내부 가이드가 포함된 아래 링크를 따라가야 합니다.

관련 정보