解決策が見つかりました。
以下のymlを使用してプロキシを展開し、デプロイメントをサービスとして公開します。最も重要なのは、プロキシをデフォルトの127.0.0.1の代わりに0.0.0.0でリッスンさせることです。 Googleクラウド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ドッカーコンテナに実装を切り替えたり、任意の変更なしでのGoogle Cloud SQLプロキシを使用しますクライアント構成に転送します。
私は同じ問題に直面しています:私は別のポッドでSQLプロキシをホストする必要がありますが、どのようにして2つのポッドを互いに通信させていますか?接続が拒否されるか、ホスト名が見つかりません。 –
展開用のKubernetesサービスを公開します。次に、サービスの名前を使用します。たとえば上記の "kubectl expose deployment mysql"のようにして、クライアントにホスト名と同じように "mysql"を使用させます。 –
私はあなたと同じ問題を共有していますが、同じポッド内のサイドカーコンテナとしてプロキシを実行する理由はいくつかあります: - プロキシをクラスタに公開すると、ラベルやセレクタを使用しないと、必要な各ノードでプロキシポッドが実行されていることを確認できません。これは、クライアントとサーバーとの通信に必要なパフォーマンスに影響する可能性があります。そのクライアントがプロキシと同じノード上に存在する場合 – Khash