解決策を見つけました。
以下の yml を使用してプロキシをデプロイし、デプロイをサービスとして公開します。最も重要なことは、プロキシがデフォルトの 127.0.0.1 ではなく 0.0.0.0 でリッスンするようにすることです。Google Cloud sql ドキュメントによるすべてのシークレット
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mysql
spec:
replicas: 1
template:
metadata:
name: mysql
labels:
name: mysql
spec:
containers:
- image: b.gcr.io/cloudsql-docker/gce-proxy:1.05
name: cloudsql-proxy
command: ["/cloud_sql_proxy", "--dir=/cloudsql",
"-instances=MYSQL:ZONE:DATABASE_INSTANCE=tcp:0.0.0.0:3306",
"-credential_file=/secrets/cloudsql/credentials.json"]
volumeMounts:
- name: cloudsql-oauth-credentials
mountPath: /secrets/cloudsql
readOnly: true
- name: ssl-certs
mountPath: /etc/ssl/certs
ports:
- containerPort: 3306
name: mysql
volumes:
- name: cloudsql-oauth-credentials
secret:
secretName: cloudsql-oauth-credentials
- name: ssl-certs
hostPath:
path: /etc/ssl/certs
このソリューションは、追加の TCP 接続があるため、プロキシをクライアント ソフトウェアと同じ展開に配置するよりも若干コストがかかります。
ただし、多くの利点があります。
- はるかにシンプルで、既存の K8S 展開ファイルを変更する必要はありません
- クライアント構成を変更せずに、実装を MySQL Docker コンテナに切り替えるか、Google Cloud SQL プロキシを使用できます。