Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you restart it, you'll have to start from the beginning.
- Click Start lab to begin
Create required resources with the fully automated deployment
/ 100
このラボでは、Cloud SQL Proxy コンテナをサイドカー コンテナとして使って、Kubernetes Engine 内のアプリケーションを Cloud SQL インスタンスに簡単に接続する方法について学習します。Kubernetes Engine クラスタと Cloud SQL Postgres インスタンスをデプロイし、Cloud SQL Proxy コンテナを使ってこれらが通信できるようにします。
このラボでは Cloud SQL Proxy コンテナを使って Cloud SQL インスタンスに接続する方法を主に説明しますが、このコンセプト自体は API アクセスを必要とするすべての Google Cloud マネージド サービスに共通するものです。
このラボは、プロキシ コンテナを経由して Cloud SQL を使う方法をわかりやすく学ぶために GKE Helmsman のエンジニアによって作成されました。このデモは、GitHub の gke-networking-demos ページでご覧いただけます。アセットへのコントリビューションにぜひご協力ください。
このラボでは、次の方法について学びます。
すべての Kubernetes Engine ノードにはデフォルトの Compute Engine サービス アカウントが割り当てられます。このサービス アカウントの権限は比較的高く、多くの Google Cloud サービスを利用できます。作成したソフトウェアには、それを実行する Compute Engine インスタンスに割り当てられた認証情報が引き継がれます。これは Cloud SDK がそう設定されているためです。
デフォルトの Compute Engine サービス アカウントほど多くの権限を必要としないコンテナもあるので、最小限の権限だけを持つサービス アカウントを Kubernetes Engine ノードに割り当てた後、コンテナごとに必要な(最小限の)権限を持つサービス アカウントを作成する必要があります。
サービス アカウント認証情報の取得先は次の 2 つしかありません。
このラボでは Kubernetes Engine で実行されるコンテナに認証情報ファイルを取得して、必要な権限をアプリケーションに付与する方法を説明します。
Cloud SQL Proxy を使うと、Cloud SQL インスタンスへの接続を作成し、これを維持する作業を Cloud SQL Proxy プロセスにオフロードできます。こうすると、アプリケーションが接続を細かく扱う必要がなくなり、シークレットの管理が簡略化されます。Cloud SQL Proxy は、同じ Kubernetes Engine Pod 内でアプリケーション コンテナとともに実行できる Docker コンテナとして、パッケージ化されたうえで提供されています。
アプリケーションとサイドカー コンテナは、Kubernetes Engine クラスタ内の唯一のノードで実行される単一の Kubernetes(k8s)Pod にデプロイします。アプリケーションは、ローカルホストでリッスンする Cloud SQL Proxy プロセスを介して Cloud SQL インスタンスと通信します。
k8s マニフェストによって、2 つのコンテナ、pgAdmin および Cloud SQL Proxy を持つ単一レプリカの Deployment オブジェクトが作成されます。Kubernetes Engine クラスタにインストールされる 2 つのシークレットは、Cloud SQL インスタンス接続情報とサービス アカウント鍵認証情報ファイルです。これらは Cloud SQL Proxy コンテナの Cloud SQL API 呼び出しに使われます。
アプリケーションに Cloud SQL への接続処理を作成する必要もなければ、何かを API に公開する必要もありません。Cloud SQL Proxy プロセスが、アプリケーションに代わってその処理を引き受けます。Cloud SQL Proxy コンテナが Pod 内で「サイドカー」コンテナとして実行されることに注意する必要があります。
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
[ラボの詳細] パネルでも [ユーザー名] を確認できます。
[次へ] をクリックします。
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
[ラボの詳細] パネルでも [パスワード] を確認できます。
[次へ] をクリックします。
その後次のように進みます。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
[承認] をクリックします。
出力は次のようになります。
出力:
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
一部の Compute Engine リソースは、リージョン内やゾーン内に存在します。リージョンとは、リソースを実行できる特定の地理的位置です。1 つのリージョンには 1 つ以上のゾーンがあります。
次のコマンドを実行して、ラボのリージョンとゾーンを設定します(最適なリージョンとゾーンを使用できます)。
デプロイは完全に自動化されています。デプロイするスクリプトには次の順序でパラメータを指定します。
Cloud SQL インスタンスには任意のユーザー名を作成でき、pgAdmin コンソールには任意のメールアドレスを使用できます。ここでは、「dbadmin」と、受講者用の仮メールアドレスを使用します。
受講者アカウントを変数に保存します。
dbadmin
と $PG_EMAIL
(ご利用の student@qwiklabs.net アカウント)のパスワードを作成するよう求められます。このパスワードはラボで再度使うので、難しい文字列にする必要はありません。
デプロイ中に create.sh
によって次のスクリプトが実行されます。
enable_apis.sh
- Kubernetes Engine API と Cloud SQL Admin API を有効にします。postgres_instance.sh
- Cloud SQL インスタンスと他の Postgres ユーザーを作成します。gcloud が Cloud SQL インスタンスの作成を待機した末にタイムアウトになるため、スクリプトの完了が手動でポーリングされることに注意してください。service_account.sh
- Cloud SQL Proxy コンテナのサービス アカウントと認証情報ファイルを作成します。cluster.sh
- Kubernetes Engine クラスタを作成します。configs_and_secrets.sh
- Kubernetes Engine シークレット、認証情報を含む configMap、Cloud SQL インスタンスの接続文字列を作成します。pgadmin_deployment.sh
- pgAdmin4 Pod を作成します。create.sh
スクリプトを再実行してみてください。
次に、ロードバランサを使用して Pod を順番に公開し、インスタンスに接続した後、完了したら不正アクセスを防ぐためにサービスを削除します。
出力:
Cloud コンソールで、ナビゲーションメニュー > [SQL] に移動し、[インスタンス ID] をクリックします。
左側のメニューで、[接続] をクリックし、[ネットワーキング] をクリックします。
[パブリック IP] ボックスがオンになった状態で、[ネットワークを追加] をクリックします。
ネットワークに名前を付け、公開アクセス権を付与します。
[完了] をクリックします。
[保存] をクリックします。
ブラウザで新しいタブを開き、pgAdmin の <SVC_IP> を使用して pgAdmin に接続します。
Cloud コンソールで SQL ページに戻ります。[概要] タブをクリックします。
パブリック IP アドレスをコピーします。
pgAdmin コンソールの左側のペインで、[Servers] をクリックし、[Add New Server] をクリックします。
[General] タブで、サーバーに名前を付け、[Connection] タブをクリックします。
先ほど作成した <DATABASE_USER_NAME>(dbadmin)と <USER_PASSWORD> を使用して、127.0.0.1:5432 に接続します。
<DATABASE_USER_NAME>
(dbadmin)<USER_PASSWORD>
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。完全に自動化されたデプロイによって必要なリソースが正常に作成されている場合は、評価スコアが表示されます。
検証は完全に自動化されています。検証スクリプトは Cloud SQL インスタンス、Kubernetes Engine クラスタ、動作中の Pod が存在するかどうかをチェックします。デプロイのスクリプトが完了した後に、これらのリソースが存在していなければなりません。
このスクリプトには INSTANCE_NAME
パラメータ(既存の Cloud SQL インスタンスの名前)を指定します。
成功すると、出力は次のようになります。
破棄は完全に自動化されています。破棄スクリプトを実行すると、デプロイ スクリプトで作成されたリソースが完全に削除されます。
このスクリプトには INSTANCE_NAME
パラメータ(既存の Cloud SQL インスタンスの名前)を指定します。
teardown.sh
によって、次のスクリプトが実行されます。
delete_resources.sh
- Cloud SQL インスタンス以外をすべて削除します。delete_instance.sh
- Cloud SQL インスタンスを削除します。Cloud SQL インスタンスの作成で次のエラーが表示された場合:
削除したインスタンスのインスタンス名は、削除してから最長 1 週間は再利用できません。詳細については、インスタンスを削除するをご覧ください。
Cloud SQL Proxy コンテナをサイドカー コンテナとして使って、Kubernetes Engine 内のアプリケーションを Cloud SQL インスタンスに接続しました。その後、Kubernetes Engine クラスタと Cloud SQL Postgres インスタンスをデプロイし、Cloud SQL Proxy コンテナを使ってこれらが通信できるようにしました。
このセルフペース ラボは、「Google Kubernetes Engine Best Practices」クエストの一部です。クエストとは学習プログラムを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。受講可能な全クエストについては、Google Cloud Skills Boost カタログをご覧ください。
複数のプラットフォームに対応するコンテナ化されたアプリケーションをデプロイするための Kubernetes のインストール手順
マニュアルの最終更新日: 2023 年 10 月 16 日
ラボの最終テスト日: 2023 年 10 月 17 日
Copyright 2024 Google LLC. 本ソフトウェアは「現状有姿」で提供されており、いかなる使用および目的に関しても保証および表明は伴いません。本ソフトウェアのご利用には、Google との契約が適用されます。