CloudSQL 프록시 없이 GKE에서 CloudSQL에 연결할 수 없음 - SQLSTATE[HY000] [2002] 작업 시간 초과

CloudSQL 프록시 없이 GKE에서 CloudSQL에 연결할 수 없음 - SQLSTATE[HY000] [2002] 작업 시간 초과

다음 명령어를 사용하여 GKE 클러스터를 만들었습니다.

gcloud container clusters create stage1 \
--enable-ip-alias \
--release-channel stable \
--zone us-central1 \
--node-locations us-central1-a,us-central1-b

이제 PHP 애플리케이션을 Cloud SQL에 연결하고 싶었습니다. 포드에서 실행 중인 PHP 애플리케이션에서 클라우드 SQL에 대한 액세스를 승인하기 위해 다음 단계를 수행했습니다.

  • 비밀글을 만들었습니다
    kubectl create secret generic stage-cloudsql-secret \
      --from-literal=db_host=<YOUR-PRIVATE-IP-ADDRESS>
  • 컨테이너 섹션의 이 비밀 내 포드를 다음과 같이 업데이트했습니다.
    env:
            - name: DB_HOST
              valueFrom:
                secretKeyRef:
                  name: stage-cloudsql-secret
                  key: db_host

내 PHP 파일(env.php)에서 CloudSQL 비공개 IP(DB 이름, 사용자 이름, 비밀번호와 함께)를 업데이트하고, docker 이미지를 빌드하고, GKE 클러스터에 포드를 생성했습니다. 포드가 생성되면 컨테이너(실패한 컨테이너)에서 다음과 같은 오류가 발생합니다.

SQLSTATE[HY000] [2002] Operation timed out

참고 1: 호스팅 환경에서 작동하는 애플리케이션이며 Google Cloud로 마이그레이션하는 중입니다.

노트 2: GKE와 Cloud SQL이 동일한 VPC에 있음(기본값)

노트 3: 클러스터에서 IP 별칭 활성화

참고 4: 시작할 때 데이터베이스에 데이터를 생성하는 컨테이너가 있습니다.

업데이트 1

Google Cloud 문서에 언급된 단계를 따랐습니다.링크

컨테이너에 SSH가 있고 비공개 IP를 사용하여 Cloud SQL에 연결(Ping)을 시도했습니다. 하지만 난 할 수 없었어

업데이트 2

위의 링크를 따라간 후 비밀을 생성하는 방식을 변경했습니다(이번에는 개인 IP만 사용). 또한 아래와 같이 env.php를 업데이트했습니다.

array (
    'table_prefix' => '',
    'connection' =>
    array (
      'default' =>
      array (
        'host' => getenv('DB_HOST'),

기존 '호스트' => [Cloud SQL의 비공개 IP]

이번에 포드가 생성되면 다음 오류가 표시됩니다.

SQLSTATE[HY000] [2002] 해당 파일 또는 디렉터리가 없습니다.

업데이트 3

모든 단계를 다시 수행했고 작동했습니다.

관련 정보