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 に接続するには、以下が必要です。

  • VPC ネイティブのクラスタで実行されている GKE 1.8 以降に、kubectl コマンドライン ツールがインストール済みで、クラスタと通信できるように構成されていること。

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

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

  • 第 2 世代インスタンスが作成されていること。

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

  • MySQL のユーザー アカウントがインスタンスで構成済みであること。

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

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

接続の概要

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

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

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

  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 ドキュメントのポッドの概要をご覧ください。

始める前に

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

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

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

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

  • 第 2 世代インスタンスが作成されていること。

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

  • MySQL のユーザー アカウントがインスタンスで構成済みであること。

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

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

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

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

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

    インスタンス接続名は、GCP Console の Cloud SQL インスタンスの詳細ページまたは gcloud sql instances describe コマンドで参照できます。

接続の概要

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

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

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

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

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

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

      - name: cloudsql-proxy
        image: gcr.io/cloudsql-docker/gce-proxy:1.11
        command: ["/cloud_sql_proxy",
                  "-instances=<INSTANCE_CONNECTION_NAME>=tcp:3306",
                  "-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 デプロイ マニフェストのサンプル ファイルをご覧ください。

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

次のステップ

このページは役立ちましたか?評価をお願いいたします。

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