2016-12-15 10 views
4

KubernetesクラスタをGoogle Cloud SQLに接続したいと思います。複数のK8Sコンテナがプロキシ経由でGoogle Cloud SQLに接続

私は現在、JDBC URL +ユーザ名/パスワードを使用してMySQL [k8sにデプロイされたドッカーイメージ]に接続する少なくとも10の異なる展開ポッドを持っています。

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

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

答えて

9

解決策が見つかりました。

以下の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プロキシを使用しますクライアント構成に転送します。
+0

私は同じ問題に直面しています:私は別のポッドでSQLプロキシをホストする必要がありますが、どのようにして2つのポッドを互いに通信させていますか?接続が拒否されるか、ホスト名が見つかりません。 –

+0

展開用のKubernetesサービスを公開します。次に、サービスの名前を使用します。たとえば上記の "kubectl expose deployment mysql"のようにして、クライアントにホスト名と同じように "mysql"を使用させます。 –

+0

私はあなたと同じ問題を共有していますが、同じポッド内のサイドカーコンテナとしてプロキシを実行する理由はいくつかあります: - プロキシをクラスタに公開すると、ラベルやセレクタを使用しないと、必要な各ノードでプロキシポッドが実行されていることを確認できません。これは、クライアントとサーバーとの通信に必要なパフォーマンスに影響する可能性があります。そのクライアントがプロキシと同じノード上に存在する場合 – Khash

関連する問題