가상 사설망에서 Node.js 애플리케이션 개발

분산 응용 프로그램은 가상 사설 클라우드(VPCs)를 사용하여 보안을 강화하고 대기 시간을 줄입니다. 트래픽은 퍼블릭 인터넷이 아닌 VPC를 통해 라우팅되므로 도중에 네트워크 홉이 필요하지 않습니다.

를 지속적으로 개발하면서 Google Cloud VPC 내부에 응용 프로그램 인스턴스를 배포하도록 선택했습니다.

개발 및 프로덕션 환경 모두에서 클라우드의 이러한 리소스에 액세스하려면 여러 가지 고려 사항이 있습니다. 내YugabyteDB 클러스터에 어떻게 연결합니까? 그리고 내 로컬 시스템에서 VPC의 원격 리소스에 어떻게 연결합니까?

다음은 이러한 문제에 대한 나의 해결책을 요약한 것입니다.

VPC에서 YugabyteDB 배포



YugabyteDB ManagedVPC Peering에 의존하여 클라우드 공급자의 네트워크 내에서 네트워크 트래픽을 유지하고 다른 클라우드 지역의 노드 간에 연결을 설정합니다.

이는 단일 지역 클러스터의 선택적 구성이지만 다중 지역 배포의 경우 필수입니다. 이 애플리케이션에 대해 두 개의 다중 지역 클러스터를 구성했으므로 VPC 피어링이 필요합니다.



이것이 작동하려면 Google Cloud에서 VPC network peering도 설정해야 합니다.



그것은 쉽다!

이제 애플리케이션 노드와 데이터베이스 노드는 Google Cloud 내부에서 피어링된 네트워크 연결을 갖습니다. 이는 또한 모든 데이터베이스 연결이 이 네트워크 내부의 시스템에서 나와야 함을 의미합니다.

이것이 지역 발전에 의미하는 바는 무엇입니까?

SSH 터널링 설정



이것은 나에게 미지의 영역이었습니다. 빠르게 반복하기 위해 개발 시스템에서 다양한 다중 노드 클러스터에 대한 데이터베이스 연결을 설정하는 방법을 찾아야 했습니다.

처음에는 Visual Studio Code에서 remote SSH을 사용하여 VM에서 직접 애플리케이션 코드를 작성하는 것에 대해 생각했습니다. 다른 모든 애플리케이션 인스턴스에서 코드를 푸시하고 업데이트해야 한다는 점에서 문제가 있었습니다. 테스트를 위해 VPC 내의 원격 서버에 코드를 지속적으로 배포할 필요가 없는 솔루션이 필요했습니다.

여기에서 SSH tunneling(포트 포워딩이라고도 함)의 힘을 발견했습니다. VPC의 서버를 통해 내 로컬 컴퓨터에서 연결을 터널링함으로써 이 피어링된 VPC 연결에 의존하는 각각의 모든 데이터베이스 노드에 대한 데이터베이스 연결을 설정할 수 있습니다.

예를 들면 다음과 같습니다.

# development machine command line
ssh -N -i /path/to/gcp/ssh/key -L 5000:fake-database-node-url.gcp.ybdb.io:5433 vm_username@[VM_IP_ADDRESS]


이 명령은 SSH 연결을 설정할 수 있는 VPC 내부의 VM을 통해 localhost:5000fake-database-node-url.gcp.ybdb.io:5433로 전달합니다.

설정이 놀라울 정도로 간단함에도 불구하고 이 발견은 제 개발 여정에 중요한 역할을 했습니다. 포트 포워딩을 활용하여 Node.js 애플리케이션 개발 환경은 변경되지 않았습니다.
NODE_ENV 환경 변수가 development 로 설정되면 앱은 각 데이터베이스 노드에 대한 특정 로컬 포트를 통해 연결을 설정하는 것을 알고 있습니다. 환경 변수가 production 로 설정된 경우 애플리케이션은 요청이 데이터베이스 URL에 직접 작성되어야 함을 인식합니다. 그냥 작동하고 안전하게 작동합니다.



마찬가지로 데이터베이스 클라이언트 내에서 SSH 터널링을 사용할 수 있습니다. 이것이 제가 선택한 클라이언트(DBeaver)[ https://dbeaver.io/ ] 내부에서 보이는 모습입니다.



마무리



IT 관리자, 데브옵스 또는 네트워크 엔지니어 등으로 일하는 사람들에게 이것은 기초적인 발견처럼 보일 수 있습니다!

SSH 터널링에는 다양한 사용 사례가 있으며 이제 막 시작했다고 확신합니다. 그러나 이전에 직면한 적이 없는 차단 문제에 대해 간단하고 원활한 솔루션을 찾는 것보다 기분 좋은 것은 없습니다.

SSH 터널링이 없었기 때문에 유효성을 테스트하기 위해 VPC 내의 인스턴스에 내 코드를 배포하는 수밖에 없었습니다. 나는 지금 내 흥분에 대해 사과하지 않을 것입니다. 😎

결승선이 다가오고 있습니다. 계속 지켜봐 주세요!

좋은 웹페이지 즐겨찾기