Google Container Engine から接続する

ここでは、Cloud SQL Proxy Docker イメージを使用して、Google Container Engine で実行しているアプリケーションから Cloud SQL 第 2 世代インスタンスへの接続を設定する方法を説明します。

はじめに

Google Container Engine で実行しているアプリケーションから Google Cloud SQL インスタンスにアクセスするには、Cloud SQL Proxy Docker イメージを使用します。Cloud SQL Proxy の詳細については、Cloud SQL Proxy についてをご覧ください。

はじめに

この手順を開始する前に、以下のものを用意する必要があります。

  • バージョン 1.2 以降を実行している Google Container Engine クラスタと、クラスタとのやりとりのためにインストールおよび設定された kubectl コマンドライン ツール。

    Google Container Engine の概要については、クイックスタートをご覧ください。

  • Google Container Engine クラスタ上のポッド内にあるアプリケーション コンテナ。

    Cloud SQL Proxy は、「サイドカー コンテナ」というポッドパターンを使用してポッドに追加されます。 Kubernetes クラスタの設定と使用の詳細については、Kubernetes ユーザーガイドをご覧ください。

  • root ユーザーが設定された Cloud SQL 第 2 世代インスタンス。

    Cloud SQL インスタンスの作成方法については、インスタンスを作成するをご覧ください。

  • Cloud SQL インスタンスの接続名。

    この接続名は、[インスタンスの詳細] ページで Google Cloud Platform Console から参照したり、[PROJECT_ID]:[REGION]:[INSTANCE_NAME] を使用して作成したりできます。

API を有効にする

  1. Cloud SQL Administration API を有効にする。

    Enable the API

    API を有効にすると、認証情報を得る必要はありません。

サービス アカウントを作成する

プロキシには、Cloud SQL インスタンスに対する編集者の権限を持つサービス アカウントが必要です。サービス アカウントの詳細については、Google Cloud Platform 認証ガイドをご覧ください。

  1. Google Cloud Platform Console の Cloud SQL の [サービス アカウント] ページに移動します。

    [サービス アカウント] ページに移動する

  2. 必要な場合は、Cloud SQL インスタンスを含むプロジェクトを選択します。
  3. [サービス アカウントを作成] をクリックします。
  4. サービス アカウントの作成ダイアログで、サービス アカウントのわかりやすい名前を指定します。
  5. [役割] で [プロジェクト] > [編集者] を選択します。
  6. 必要に応じて、[サービス アカウント ID] を短い値に変更します。
  7. [新しい秘密鍵の提供] をクリックします。
  8. デフォルトのキーのタイプは [JSON] であり、この値で問題ありません。
  9. [作成] をクリックします。

    秘密鍵ファイルがマシンにダウンロードされます。このファイルは別の場所に移動できます。安全な場所に鍵ファイルを保管してください。

プロキシのユーザー アカウントを作成する

プロキシは、特別な名前を使用してデータベースにアクセスします。こうすることで、設定のセキュリティが向上します。このプロキシだけが、このホストによって作成された任意のユーザー アカウントを使用できるからです。パスワードを指定する必要はありません。

プロキシ専用のユーザー アカウントを作成するには、cloudsqlproxy~% をホスト名に対して使用します。ユーザー名には任意のものを選択できます。

ユーザー アカウントの作成方法については、ユーザーを作成するをご覧ください。

秘密を作成する

Google Container Engine アプリケーションが Cloud SQL インスタンスと接続できるようにするには、秘密がいくつか必要になります。1 つはインスタンスレベルのアクセス(接続)に必要となり、他の 2 つはデータベース アクセスに必要となります。この 2 つのレベルのアクセス制御の詳細については、インスタンスのアクセス制御をご覧ください。

  1. サービス アカウントの作成時にダウンロードしたキーの場所を指定して、インスタンスレベルのアクセスのための秘密を作成します。

    kubectl create secret generic cloudsql-oauth-credentials --from-file=credentials.json=[PATH_TO_CREDENTIAL_FILE]
    
  2. データベース アクセスに必要な秘密を作成します。

    kubectl create secret generic cloudsql --from-literal=username=[PROXY_USERNAME] --from-literal=password=[PASSWORD]
    

ポッド設定ファイルを更新する

これらの秘密は、Cloud SQL インスタンスやデータベース ホストの場所と同じように、ポッド設定ファイルで指定する必要があります。

必要になる厳密な変数名は、使用しているアプリケーション コンテナによって異なります。 サンプル デプロイについては、CloudSQL の例をご覧ください。

  1. アプリケーションがデータベースへのアクセスに使用するホスト名として 127.0.0.1:3306 を指定します。

    プロキシは、同じポッド内の別のコンテナで実行されるため、アプリケーションには localhost として表示されます。そこで、この接続には 127.0.0.1:3306 を使用します。

  2. 先ほどアプリケーションに対して作成した秘密のユーザー名とパスワードを指定します。

    以下の例では WORDPRESS_DB_USERWORDPRESS_DB_PASSWORD を使用していますが、これらの名前はアプリケーションで使用しているものに合わせて変更する必要があります。

    - name: WORDPRESS_DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: cloudsql
          key: password
    - name: WORDPRESS_DB_USER
      valueFrom:
        secretKeyRef:
          name: cloudsql
          key: username

  3. プロキシで使用されるコンテナを定義します。

    - image: b.gcr.io/cloudsql-docker/gce-proxy:1.05
      name: cloudsql-proxy
      command: ["/cloud_sql_proxy", "--dir=/cloudsql",
                "-instances=[INSTANCE_CONNECTION_NAME]=tcp:3306",
                "-credential_file=/secrets/cloudsql/credentials.json"]
      volumeMounts:
        - name: cloudsql-oauth-credentials
          mountPath: /secrets/cloudsql
          readOnly: true
        - name: ssl-certs
          mountPath: /etc/ssl/certs
        - name: cloudsql
          mountPath: /cloudsql

  4. ボリュームを定義します。

    volumes:
      - name: cloudsql-oauth-credentials
        secret:
          secretName: cloudsql-oauth-credentials
      - name: ssl-certs
        hostPath:
          path: /etc/ssl/certs
      - name: cloudsql
        emptyDir:

  5. ポッドを作成します。

    kubectl create -f [CONFIGURATION_FILE]
    

次のステップ

フィードバックを送信...

Cloud SQL ドキュメント