6

Kubernetes クラスタを Google Cloud SQL に接続したいと考えています。

現在、JDBC URL + ユーザー名/パスワードを使用して MySQL [k8s にデプロイされた docker イメージ] に接続する、少なくとも 10 個の異なるデプロイ済みポッドがあります。

Google Cloud SQL Proxy の単一インスタンスを使用し、このプロキシを介してすべてのポッドを Cloud SQL データベースに接続することは可能ですか? 理想的には、コンテナーで実行されている mysql をプロキシに置き換えたいと考えています。

各展開内でプロキシを実行する必要はありません。私が見つけた唯一のサンプルは、各展開でプロキシを宣言する必要があることを示しているようです。

4

3 に答える 3

15

解決策を見つけました。

以下の 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 プロキシを使用できます。
于 2016-12-16T11:53:12.963 に答える