arrow_back

限定公開 Kubernetes クラスタのセットアップ

参加 ログイン
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

限定公開 Kubernetes クラスタのセットアップ

Lab 1時間 30分 universal_currency_alt クレジット: 5 show_chart 中級
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP178

Google Cloud セルフペース ラボ

概要

Kubernetes Engine における限定公開クラスタとは、公共のインターネットからマスターにアクセスできないようにするクラスタのことです。このクラスタのノードにはプライベート アドレスのみが指定されている(パブリック IP アドレスが指定されていない)ため、隔離された環境でワークロードが実行されます。ノードとマスターは、VPC ピアリングを使用して相互に通信します。

Kubernetes Engine API では、アドレス範囲がクラスレス ドメイン間ルーティング(CIDR)ブロックとして表されます。

このラボでは、限定公開 Kubernetes クラスタを作成する方法を学びます。

演習内容

  • 限定公開 Kubernetes クラスタを作成します。

前提条件

  • Kubernetes クラスタの作成と起動の経験があり、CIDR 範囲での IP アドレス指定について熟知している必要があります。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

  2. 出力は次のようになります。

出力:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = <project_ID>

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

タスク 1. リージョンとゾーンを設定する

  1. このラボのプロジェクト リージョンを設定します。
gcloud config set compute/zone {{{project_0.default_zone | "Zone"}}}
  1. リージョンの変数を作成します。
export REGION={{{project_0.default_region | Region}}}
  1. ゾーンの変数を作成します。
export ZONE={{{project_0.default_zone | Zone}}}

詳しくは、リージョンとゾーンのドキュメントをご確認ください。

注: 自分のマシンで gcloud を実行する場合はセッション間で config 設定が維持されますが、Cloud Shell で実行する場合はセッションごと、または再接続するたびに設定する必要があります。

タスク 2. 限定公開クラスタを作成する

  1. 限定公開クラスタを作成する場合、Kubernetes のマスター コンポーネントを実行する VM の /28 CIDR 範囲を指定し、IP エイリアスを有効にする必要があります。

次に、private-cluster という名前のクラスタを作成し、マスターに対して CIDR 範囲を 172.16.0.16/28 と指定します。IP エイリアスを有効にして、Kubernetes Engine が自動的にサブネットワークを作成するようにします。

--private-cluster--master-ipv4-cidr--enable-ip-alias のフラグを使用して限定公開クラスタを作成します。

  1. 次のコマンドを実行してクラスタを作成します。
gcloud beta container clusters create private-cluster \ --enable-private-nodes \ --master-ipv4-cidr 172.16.0.16/28 \ --enable-ip-alias \ --create-subnetwork ""

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。限定公開クラスタが正常に作成されている場合は、評価スコアが表示されます。

限定公開クラスタを作成する

タスク 3. サブネットとセカンダリ アドレス範囲を表示する

  1. デフォルト ネットワークのサブネットを一覧表示します。
gcloud compute networks subnets list --network default
  1. 出力で、クラスタに対して自動的に作成されたサブネットワークの名前を確認します(gke-private-cluster-subnet-xxxxxxxx のようになっています)。次のステップで使用するため、クラスタの名前を保存しておきます。

  2. 次に自動的に作成されたサブネットの情報を取得します。次のコマンドの [SUBNET_NAME] を対象のサブネットに置き換えて実行します。

gcloud compute networks subnets describe [SUBNET_NAME] --region=$REGION

出力には、プライマリ アドレス範囲と GKE の限定公開クラスタの名前、セカンダリ範囲が表示されます。

... ipCidrRange: 10.0.0.0/22 kind: compute#subnetwork name: gke-private-cluster-subnet-163e3c97 ... privateIpGoogleAccess: true ... secondaryIpRanges: - ipCidrRange: 10.40.0.0/14 rangeName: gke-private-cluster-pods-163e3c97 - ipCidrRange: 10.0.16.0/20 rangeName: gke-private-cluster-services-163e3c97 ...

出力からは、セカンダリ範囲の 1 つ目が Pod 用で、2 つ目が Service 用であることがわかります。

privateIPGoogleAccesstrue に設定されていることに注意してください。これにより、プライベート IP アドレスだけが指定されているクラスタホストが、Google API やサービスと通信できるようになります。

タスク 4. マスター承認済みネットワークを有効にする

この時点で、マスターにアクセスできる IP アドレスは、次の範囲のアドレスだけです。

  • ノードに使用される、サブネットワークのプライマリ範囲。
  • ポッドに使用される、サブネットワークのセカンダリ範囲。

追加でマスターにアクセスできるようにするには、選択したアドレス範囲を承認する必要があります。

VM インスタンスを作成する

  1. Kubernetes クラスタへの接続を確認するために使用するソース インスタンスを作成します。
gcloud compute instances create source-instance --zone=$ZONE --scopes 'https://www.googleapis.com/auth/cloud-platform'

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。VM インスタンスが正常に作成されている場合は、評価スコアが表示されます。

VM インスタンスを作成する
  1. 次のコマンドで、source-instance<External_IP> を取得します。
gcloud compute instances describe source-instance --zone=$ZONE | grep natIP

出力例:

natIP: 35.192.107.237
  1. 後のステップで使用するために、<nat_IP> アドレスをコピーして保存します。

  2. 次のコマンドを実行して、外部アドレス範囲を承認します。[MY_EXTERNAL_RANGE] は、前の出力で取得した外部アドレスの CIDR 範囲(natIP/32)に置き換えます。CIDR 範囲を natIP/32 にすると、1 つの IP アドレスが許可リストに登録されます。

gcloud container clusters update private-cluster \ --enable-master-authorized-networks \ --master-authorized-networks [MY_EXTERNAL_RANGE] 注: 本番環境では、[MY_EXTERNAL_RANGE] を該当のネットワーク外部アドレスの CIDR 範囲に置き替えます。

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。外部アドレス範囲が正常に承認された場合は、評価スコアが表示されます。

外部アドレス範囲を承認する

これで外部アドレスの範囲からマスターにアクセスできるようになったので、今度は kubectl をインストールしてクラスタの情報を取得します。たとえば、kubectl を使用すると、ノードに外部 IP アドレスが指定されていないことを確認できます。

  1. 次のコマンドで source-instance に SSH 接続します。
gcloud compute ssh source-instance --zone=$ZONE
  1. Y を押して続行します。パスフレーズの質問への回答を入力して Enter キーを押します。

  2. SSH シェルで、Cloud SDK の kubectl コンポーネントをインストールします。

sudo apt-get install kubectl
  1. 次のコマンドで、SSH シェルから Kubernetes クラスタへのアクセスを構成します。
sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin gcloud container clusters get-credentials private-cluster --zone=$ZONE 注: 割り当てられたゾーンが ZONE 変数でエクスポートされていることを確認してください。
  1. クラスタノードに外部 IP アドレスが指定されていないことを確認します。
kubectl get nodes --output yaml | grep -A4 addresses

ノードに内部 IP アドレスが指定されていて、外部アドレスが指定されていないことが出力に示されます。

... addresses: - address: 10.0.0.4 type: InternalIP - address: "" type: ExternalIP ...
  1. 次のコマンドでも、ノードに外部 IP アドレスが指定されていないことを確認できます。
kubectl get nodes --output wide

出力では EXTERNAL-IP に空白の列が返されます。

STATUS ... VERSION EXTERNAL-IP OS-IMAGE ... Ready v1.8.7-gke.1 Container-Optimized OS from Google Ready v1.8.7-gke.1 Container-Optimized OS from Google Ready v1.8.7-gke.1 Container-Optimized OS from Google
  1. 次のコマンドを入力して SSH シェルを閉じます。
exit

タスク 5. クリーンアップ

  1. Kubernetes クラスタを削除します。
gcloud container clusters delete private-cluster --zone=$ZONE
  1. Y を押して続行します。

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。Kubernetes クラスタが正常に削除された場合は、評価スコアが表示されます。

Kubernetes クラスタを削除する

タスク 6. カスタム サブネットワークを使用する限定公開クラスタを作成する

前のセクションでは、Kubernetes Engine によって自動的にサブネットワークが作成されました。このセクションでは、独自のカスタム サブネットワークを作成し、限定公開クラスタを作成します。 サブネットワークのプライマリ アドレス範囲と 2 つのセカンダリ アドレス範囲があります。

  1. サブネットワークとセカンダリ範囲を作成します。
gcloud compute networks subnets create my-subnet \ --network default \ --range 10.0.4.0/22 \ --enable-private-ip-google-access \ --region=$REGION \ --secondary-range my-svc-range=10.0.32.0/20,my-pod-range=10.4.0.0/14

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。 リージョンにサブネットワークとセカンダリ範囲が正常に作成されている場合は、評価スコアが表示されます。

リージョンにサブネットワークとセカンダリ範囲を作成する
  1. サブネットワークを使用する限定公開クラスタを作成します。
gcloud beta container clusters create private-cluster2 \ --enable-private-nodes \ --enable-ip-alias \ --master-ipv4-cidr 172.16.0.32/28 \ --subnetwork my-subnet \ --services-secondary-range-name my-svc-range \ --cluster-secondary-range-name my-pod-range \ --zone=$ZONE

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。サブネットワークを使用する限定公開クラスタが正常に作成されている場合は、評価スコアが表示されます。

サブネットワークを使用する限定公開クラスタを作成する
  1. ソース インスタンスの外部アドレス範囲を取得します。
gcloud compute instances describe source-instance --zone=$ZONE | grep natIP

出力例:

natIP: 35.222.210.67
  1. 後のステップで使用するために、<nat_IP> アドレスをコピーして保存します。

  2. 次のコマンドを実行して、外部アドレス範囲を承認します。[MY_EXTERNAL_RANGE] は、前の出力で取得した外部アドレスの CIDR 範囲(natIP/32)に置き換えます。CIDR 範囲を natIP/32 にすると、1 つの IP アドレスが許可リストに登録されます。

gcloud container clusters update private-cluster2 \ --enable-master-authorized-networks \ --zone=$ZONE \ --master-authorized-networks [MY_EXTERNAL_RANGE]

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。カスタム サブネットワーク内の限定公開クラスタの外部アドレス範囲が正常に承認された場合は、評価スコアが表示されます。

カスタム サブネットワーク内の限定公開クラスタの外部アドレス範囲を承認する
  1. 次のコマンドで source-instance に SSH 接続します。
gcloud compute ssh source-instance --zone=$ZONE
  1. 次のコマンドで、SSH シェルから Kubernetes クラスタへのアクセスを構成します。
gcloud container clusters get-credentials private-cluster2 --zone=$ZONE 注: 割り当てられたゾーンが ZONE 変数でエクスポートされていることを確認してください。
  1. クラスタノードに外部 IP アドレスが指定されていないことを確認します。
kubectl get nodes --output yaml | grep -A4 addresses

ノードに内部 IP アドレスが指定されていて、外部アドレスが指定されていないことが出力に示されます。

... addresses: - address: 10.0.4.3 type: InternalIP ...

この時点で、マスターにアクセスできる IP アドレスは、次の範囲のアドレスだけです。

  • ノードに使用される、サブネットワークのプライマリ範囲。この例のノードの範囲は 10.0.4.0/22 です。
  • ポッドに使用される、サブネットワークのセカンダリ範囲。この例のポッドの範囲は 10.4.0.0/14 です。

お疲れさまでした

限定公開 Kubernetes クラスタを作成するハンズオンラボはこれで完了です。

クエストを完了する

このセルフペース ラボは、「Security & Identity Fundamentals」クエストの一部です。クエストとは学習パスを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、こちらのクエストまたはこのラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、カタログをご覧ください。

次のラボを受講する

CFT Scorecard で Google Cloud の安全性を確保に進んでクエストを続けるか、以下のラボをご確認ください。

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2023 年 9 月 20 日

ラボの最終テスト日: 2023 年 9 月 20 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。