Google Kubernetes Engine から接続する

このページでは、プライベート IP または Cloud SQL Proxy Docker イメージを使用して、Google Kubernetes Engine で実行するアプリケーションから Cloud SQL インスタンスへの接続を設定する方法について説明します。

はじめに

Google Kubernetes Engine で実行するアプリケーションから Cloud SQL インスタンスにアクセスするには、プライベート IP アドレスまたは Cloud SQL Proxy Docker イメージを使用できます。クラスタが要件を満たしている場合、Google Kubernetes Engine から接続する最も簡単な方法は、プライベート IP です。

パブリック IP アドレスを使用して Google Kubernetes Engine から Cloud SQL に安全に接続するには、Cloud SQL Proxy を使用する必要があります。

データベース接続は、サーバーと接続元アプリケーションのリソースを消費します。アプリケーションのフットプリントを最小限に抑え、Cloud SQL の接続制限を超える可能性を少なくするには、常に適切な接続管理方法を使用してください。詳細については、データベース接続の管理をご覧ください。

プライベート IP アドレスを使用して接続する

プライベート IP アドレスを使用して接続すると、IP トラフィックは公共のインターネットに公開されません。プライベート IP の詳細については、プライベート IP をご覧ください。

始める前に

プライベート IP を使用して Cloud SQL に接続するには、以下が必要です。

  • GKE バージョン 1.8 以降。GKE は VPC ネイティブ クラスタで実行している必要があります。kubectl コマンドライン ツールをインストールしてクラスタと通信するように構成する必要があります。

    GKE の使用を開始する方法については、クイックスタートをご覧ください。

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

  • 作成済みの PostgreSQL インスタンス。

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

  • インスタンスに構成された PostgreSQL のユーザー アカウント。

    アプリケーションはこのアカウントを使用してデータベースに接続します。

  • Cloud SQL インスタンスのプライベート IP が構成されて割り当て済みになっていること。

接続の概要

以下の手順では、プライベート IP アドレスを使用して GKE から Cloud SQL に接続する一般的なプロセスの概要を説明します。

  1. シークレットを作成して PostgreSQL のユーザー名とパスワードをデータベースに提供します。

    シークレットの詳細については、シークレットをご覧ください。

  2. ポッド構成ファイルの次の項目を更新します。

    • Cloud SQL インスタンスのプライベート IP アドレスを、アプリケーションがデータベースへのアクセスに使用するホストアドレスとして指定します。
    • アプリケーションがデータベースにログインできるようにするために、前の手順で作成したシークレットを指定します。
  3. Kubernetes マニフェスト ファイルを使用してデプロイを実行します。

Cloud SQL Proxy Docker イメージを使用して接続する

Cloud SQL Proxy Docker イメージを使用して接続する場合、「サイドカー」コンテナ パターンを使用して Cloud SQL Proxy がポッドに追加されます。プロキシ コンテナはアプリケーションと同じポッドにあるため、アプリケーションは localhost を使用してプロキシに接続できます。これにより、セキュリティとパフォーマンスが向上します。詳細

Cloud SQL Proxy の詳細については、Cloud SQL Proxy についてをご覧ください。ポッドの操作の詳細については、Kubernetes ドキュメントのポッドの概要をご覧ください。

始める前に

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

  • GKE バージョン 1.2 以降を実行しているクラスタ。kubectl コマンドライン ツールがインストールされており、クラスタと通信できるように構成されている必要があります。

    GKE の使用を開始する方法については、クイックスタートをご覧ください。

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

  • 作成済みの PostgreSQL インスタンス。

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

  • インスタンスに構成された PostgreSQL のユーザー アカウント。

    アプリケーションはこのアカウントを使用してデータベースに接続します。ユーザー アカウントの作成方法については、ユーザーを作成するをご覧ください。

  • Cloud SQL Admin API が有効になっていること。

    を有効にする

  • サービス アカウントに関連付けられているキーファイルの場所が Cloud SQL インスタンスに対する適切な権限を持っていること。

    詳細については、サービス アカウントを作成するをご覧ください。

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

    インスタンス接続名は、Cloud Console の Cloud SQL インスタンスの詳細ページまたは gcloud sql instances describe コマンドを実行して利用できます。

接続の概要

以下の手順では、Cloud SQL Proxy Docker コンテナを使用して GKE から Cloud SQL に接続する一般的なプロセスの概要を説明します。

  1. 2 つのシークレットを作成します。1 つは PostgreSQL 認証情報用で、もう 1 つは Google 認証情報(サービス アカウント)用です。

    シークレットの詳細については、シークレットをご覧ください。

  2. ポッド構成ファイルの次の項目を更新します。

    • アプリケーションがデータベースへのアクセスに使用するホストアドレスとして 127.0.0.1:5432 を指定します。
    • アプリケーションがデータベースにログインできるようにするために、前の手順で作成したシークレットを指定します。
    • プロキシ固有のコンテナ(同じポッド内にあるコンタナ)でプロキシを起動します。

      プロキシ コンテナの構成ファイルの例を次に示します。

      - name: cloudsql-proxy
        image: gcr.io/cloudsql-docker/gce-proxy:1.14
        command: ["/cloud_sql_proxy",
                  "-instances=<INSTANCE_CONNECTION_NAME>=tcp:5432",
                  # If running on a VPC, the Cloud SQL proxy can connect via Private IP. See:
                  # https://cloud.google.com/sql/docs/mysql/private-ip for more info.
                  # "-ip_address_types=PRIVATE",
                  "-credential_file=/secrets/cloudsql/credentials.json"]
        securityContext:
          runAsUser: 2  # non-root user
          allowPrivilegeEscalation: false
        volumeMounts:
          - name: cloudsql-instance-credentials
            mountPath: /secrets/cloudsql
            readOnly: true

  3. Kubernetes マニフェスト ファイルを使用してデプロイを実行します。

サイドカー パターンの Cloud SQL Proxy を使用した完全なサンプル デプロイ(サンプルコードを含む)については、GitHub 上の Kubernetes Deployment マニフェストのサンプル ファイルをご覧ください。

Kubernetes 環境から Cloud SQL に接続する手順は、PostgreSQL と Kubernetes の Codelab をご覧ください。

お困りの場合、プロキシのトラブルシューティングについては、Cloud SQL Proxy 接続のトラブルシューティングをご覧ください。または、Cloud SQL のサポートページを参照してください。

次のステップ