다음 명령어를 사용하여 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
모든 단계를 다시 수행했고 작동했습니다.