Google Cloud Run 서비스를 Google Cloud SQL 데이터베이스에 연결

Oct 30 2020

2 개의 Google 클라우드 서비스가 있습니다.

  1. Google Cloud Run 서비스 (노드 Js / Strapi)
  2. Google Cloud SQL 서비스 (Mysql)

UI에서 Google Cloud Run 서비스에 대한 Cloud SQL 연결을 추가했으며 Google Cloud SQL 서비스에 대한 공개 IP가 있습니다. 또한 SQL 서비스의 인증 된 네트워크에 Run Service IP를 추가했습니다.

다른 서버 (구글 클라우드 외부)에서 연결을 시도하면 구글 클라우드 SQL 서비스에 쉽게 연결하여 쿼리를 실행할 수 있습니다. 하지만 정확히 동일한 설정 (Ip, database_name 등)으로 GCloud Run Service 내부에서 연결을 시도하면 연결이 중단되고 로그에 시간 초과 오류가 발생합니다.

Gcloud SQL이 GCloud RUN에서 연결을 수락하도록 올바르게 허용하는 방법은 무엇입니까?

여기에서 다른 답변을 찾았지만 모두 매우 오래된 것 같습니다 (2015 년경).

답변

3 guillaumeblaquiere Oct 30 2020 at 02:55

3 가지 모드를 사용하여 데이터베이스에 액세스 할 수 있습니다.

  • 내장 기능을 사용하십시오. 이 경우 IP 주소를 지정할 필요가 없습니다 . 문서에 설명 된대로 데이터베이스와 통신 할 수 있도록 열려있는 Linux 소켓입니다.
  • Cloud SQL 비공개 IP를 사용하세요. 이번에는 Cloud Run 서비스에서 연결을 구성 할 필요가 없습니다. Linux 소켓이 아닌 IP를 사용하기 때문에 사용하지 않습니다. 이 솔루션에는 두 가지가 필요했습니다.
    • 먼저 데이터베이스를 VPC에 연결 하고 프라이빗 IP를 제공합니다.
    • 그런 다음 VPC를 통해 Cloud Run의 비공개 IP 트래픽을 라우팅해야합니다. 이를 위해 서버리스 VPC 커넥터 인 Cloud RUn 서비스를 생성 한 다음 연결해야합니다.
  • CLoud SQL 공용 IP를 사용하십시오. 이번에도 Cloud Run 서비스에서 연결을 구성 할 필요가 없습니다. Linux 소켓이 아닌 IP를 사용하므로 연결을 사용하지 않습니다. 이를 달성하려면 더 많은 단계가 필요합니다 (보안 수준이 낮음).
    • VPC를 통해 Cloud Run의 모든 송신 트래픽을 라우팅해야합니다. 이를 위해 서버리스 VPC 커넥터 인 Cloud RUn 서비스를 생성 한 다음 연결해야합니다.
    • 서버리스 VPC 커넥터 및 송신 연결 매개 변수를 사용하여 "all"에 Cloud Run 서비스를 배포합니다.
    • 그런 다음 모든 VPC 커넥터 IP 범위 트래픽을 단일 IP (또는 IP 집합)로 라우팅 하는 Cloud NAT를 만듭니다 (링크는 Cloud Functions 문서이지만 동일한 방식으로 작동 함).
    • 마지막으로 Cloud SQL 승인 네트워크에서 Cloud NAT IP를 승인합니다.

귀하의 경우에는 Cloud Run IP를 허용 목록에 추가했지만 공유 IP (다른 서비스도 동일하게 사용할 수 있습니다 !!주의)이며 항상 동일하지는 않습니다. Google 클라우드에서 사용하는 IP 주소 풀이 있습니다.