ラボ: NCC PSC の伝播

1. はじめに

概要

このラボでは、Network Connectivity Center のハブが Private Service Connect エンドポイントを VPC スポークに伝播する方法について説明します。

ハブリソースは、VPC スポーク トラフィックを PSC エンドポイントに相互接続するための一元化された接続管理モデルを提供します。

作成するアプリの概要

この Codelab では、Private Service Connect エンドポイントを Cloud SQL インスタンスに伝播する NCC ネットワークを構築します。

74bf390e323ea3bb.png

学習内容

  • Private Service Connect を使用して Cloud SQL インスタンスに接続する
  • NCC ハブを使用して PSC サブネットをすべての VPC スポークに伝播し、複数の VPC ネットワークからのネットワーク接続を許可する

必要なもの

  • GCP Cloud Networking の知識
  • Cloud SQL の基礎知識
  • Google Cloud プロジェクト
  • [割り当て: ネットワーク] を確認し、[追加のネットワークをリクエスト] します(以下のスクリーンショットを参照)。

6bc606cb34bce7e8.png

目標

  • GCP 環境を設定する
  • Private Service Sonnect を使用して MySql 用の Cloud SQL インスタンスを設定する
  • PSC エンドポイントを伝播するように Network Connectivity Center ハブを構成する
  • VPC をスポークとして使用して Network Connectivity Center を構成する
  • データパスを検証する
  • NCC のサービス機能を確認する
  • リソースをクリーンアップする

始める前に

Google Cloud コンソールと Cloud Shell

GCP を操作するには、このラボ全体で Google Cloud コンソールと Cloud Shell の両方を使用します。

NCC ハブ プロジェクトの Google Cloud コンソール

Cloud Console には、 https://console.cloud.google.com からアクセスできます。

Google Cloud で次の項目を設定すると、Network Connectivity Center を簡単に構成できます。

Google Cloud コンソール の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

Cloud Shell を起動します。この Codelab では、$variables を使用して、Cloud Shell で gcloud 構成の実装を支援します。

gcloud auth list
gcloud config list project
gcloud config set project $project
project=[YOUR-PROJECT-NAME]
echo $project

IAM ロール

NCC では、特定の API にアクセスするために IAM ロールが必要です。必要に応じて、NCC IAM ロールを使用してユーザーを構成してください。

ロール/説明

権限

networkconnectivity.networkAdmin - ネットワーク管理者は、ハブとスポークを管理できます。

networkconnectivity.hubs.networkconnectivity.spokes.

networkconnectivity.networkSpokeManager - ハブにスポークを追加して管理できます。ホスト プロジェクトがハブを所有している共有 VPC で使用されますが、他のプロジェクトの他の管理者は、アタッチメントのスポークをハブに追加できます。

networkconnectivity.spokes.**

networkconnectivity.networkUsernetworkconnectivity.networkViewer - ネットワーク ユーザーは、ハブとスポークのさまざまな属性を表示できます。

networkconnectivity.hubs.getnetworkconnectivity.hubs.listnetworkconnectivity.spokes.getnetworkconnectivity.spokes.listnetworkconnectivity.spokes.aggregatedList

2. ネットワーク環境を設定する

概要

このセクションでは、2 つの VPC ネットワークとファイアウォール ルールを単一のプロジェクトにデプロイします。論理図は、このステップで設定するネットワーク環境を示しています。

8884a55988881e17.png

VPC1 とサブネットを作成する

VPC ネットワークには、データパスの検証用に GCE VM をインストールするサブネットが含まれています。

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="subnet1"
vpc_spoke_subnet_ip_range="10.0.1.0/24"
region="us-central1"
zone="us-central1-a"

gcloud compute networks create "${vpc_spoke_network_name}" \
--subnet-mode=custom \

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}" 

VPC に PSC サブネットを作成する

次のコマンドを使用して、PSC-EP に割り振られる VPC スポークにサブネットを作成します。

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"
vpc_spoke_subnet_ip_range="192.168.0.0/24"

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}" 

VPC3 とサブネットを作成する

vpc_spoke_network_name="vpc3-spoke"
vpc_spoke_subnet_name="subnet3"
vpc_spoke_subnet_ip_range="10.0.3.0/24"
region="us-central1"
zone="us-central1-a"

gcloud compute networks create "${vpc_spoke_network_name}" \
--subnet-mode=custom \

gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}"

VPC1 のファイアウォール ルールを構成する

これらのルールにより、RFC1918 と Identity Access Proxy の範囲からのネットワーク接続が可能になります。

vpc_spoke_network_name="vpc1-spoke"

gcloud compute firewall-rules create vpc1-allow-all \
--network="${vpc_spoke_network_name}" \
--allow=all \
--source-ranges=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

gcloud compute firewall-rules create vpc1-allow-iap \
--network="${vpc_spoke_network_name}" \
--allow all \
--source-ranges 35.235.240.0/20

ルーティング VPC と VPC ファイアウォール ルールを構成する

vpc_spoke_network_name="vpc3-spoke"

gcloud compute firewall-rules create vpc3-allow-all \
--network="${vpc_spoke_network_name}" \
--allow=all \
--source-ranges=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16

gcloud compute firewall-rules create vpc3-allow-iap \
--network="${vpc_spoke_network_name}" \
--allow all \
--source-ranges 35.235.240.0/20

VPC1 で GCE VM を構成する

パッケージをインストールするには一時的なインターネット アクセスが必要になるため、外部 IP アドレスを使用するようにインスタンスを構成します。

vm_vpc1_spoke_name="csql-vpc1-vm"
vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="subnet1"
region="us-central1"
zone="us-central1-a"

gcloud compute instances create "${vm_vpc1_spoke_name}" \
--machine-type="e2-medium" \
--subnet="${vpc_spoke_subnet_name}" \
--zone="${zone}" \
--image-family=debian-11 \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
sudo apt-get update
sudo apt-get install -y default-mysql-client'

VPC3 で GCE VM を構成する

パッケージをインストールするには一時的なインターネット アクセスが必要になるため、外部 IP アドレスを使用するようにインスタンスを構成します。

vm_vpc_spoke_name="csql-vpc3-vm"
vpc_spoke_network_name="vpc3-spoke"
vpc_spoke_subnet_name="subnet3"
region="us-central1"
zone="us-central1-a"

gcloud compute instances create "${vm_vpc_spoke_name}" \
--machine-type="e2-medium" \
--subnet="${vpc_spoke_subnet_name}" \
--zone="${zone}" \
--image-family=debian-11 \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
sudo apt-get update
sudo apt-get install -y default-mysql-client'

3. Cloud SQL インスタンスを作成する

次のコマンドを使用して、インスタンスを作成し、Private Service Connect を有効にします。

この処理には数分かかります。

gcloud config set project ${project}

gcloud sql instances create mysql-instance \
--project="${project}" \
--region=us-central1 \
--enable-private-service-connect \
--allowed-psc-projects="${project}" \
--availability-type=zonal \
--no-assign-ip \
--tier=db-f1-micro \
--database-version=MYSQL_8_0 \
--enable-bin-log

Cloud SQL インスタンスのサービス アタッチメント URI を確認する

gcloud sql instances describe コマンドを使用して、Private Service Connect が有効になっているインスタンスに関する情報を表示します。pscServiceAttachmentLink フィールドに、インスタンスのサービス アタッチメントを指し示す URI が表示されます。これは次のセクションで必要になります。

gcloud sql instances describe mysql-instance \
--format='value(pscServiceAttachmentLink)'

4. PSC エンドポイントから Cloud SQL へ

PSC エンドポイントの内部 IP アドレスを予約する

次のコマンドを使用して、Private Service Connect エンドポイントの内部 IP アドレスを予約します。

region="us-central1"
vpc_spoke_subnet_name="csql-psc-subnet"

gcloud compute addresses create csql-psc-ip \
--subnet="${vpc_spoke_subnet_name}" \
--region="${region}" \
--addresses=192.168.0.253

予約済みの IP アドレスに関連付けられている NAME を確認します。 これは転送ルール構成で使用されます。

gcloud compute addresses list \
--filter="name=csql-psc-ip"

VPC1 に Private Service Connect 転送ルールを作成する

次のコマンドを使用して Private Service Connect エンドポイントを作成し、Cloud SQL サービス アタッチメントを指し示すように設定します。

vpc_spoke_network_name="vpc1-spoke"
vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"
csql_psc_ep_name="csql-psc-ep"
sa_uri=$(gcloud sql instances describe mysql-instance \
  --format='value(pscServiceAttachmentLink)')
echo "$sa_uri"

gcloud compute forwarding-rules create "${csql_psc_ep_name}" \
--address=csql-psc-ip \
--region="${region}" \
--network="${vpc_spoke_network_name}" \
--target-service-attachment="${sa_uri}" \
--allow-psc-global-access

次のコマンドを使用して、cSQL サービス アタッチメントがエンドポイントを受け入れることを確認します。

gcloud compute forwarding-rules describe csql-psc-ep \
--region=us-central1 \
--format='value(pscConnectionStatus)'

VPC1 から MySQL へのデータパスを確認する

新しい Cloud SQL インスタンスを作成する場合は、インスタンスに接続する前に、デフォルトのユーザー アカウントのパスワードを設定する必要があります。

gcloud sql users set-password root \
--host=% \
--instance=mysql-instance \
--prompt-for-password

次のコマンドを使用して、Cloud SQL のサービス アタッチメントに関連付けられている PSC エンドポイントの IP アドレスを確認します。

gcloud compute addresses describe csql-psc-ip \
--region=us-central1 \
--format='value(address)'

VPC1 の VM から Cloud SQL インスタンスに接続する

csql-vpc1-vm への SSH セッションを開きます。

gcloud compute ssh csql-vpc1-vm \
--zone=us-central1-a \
--tunnel-through-iap

次のコマンドを使用して、Cloud SQL インスタンスに接続します。プロンプトが表示されたら、上記の手順で作成したパスワードを入力します。

mysql -h 192.168.0.253 -u root -p 

ログインに成功すると、次の出力が表示されます。

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8350
Server version: 8.0.31-google (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

show databases; コマンドを使用して、MySql でデフォルトで作成されるデータベースを確認します。

MySQL [(none)]> show databases;

VPC3 の VM から Cloud SQL インスタンスに接続する

csql-vpc3-vm への SSH セッションを開きます。

gcloud compute ssh csql-vpc3-vm \
--zone=us-central1-a \
--tunnel-through-iap

次のコマンドを使用して、Cloud SQL インスタンスに接続します。プロンプトが表示されたら、上記の手順で作成したパスワードを入力します。

mysql -h 192.168.0.253 -u root -p 

VPC3 から Private Service Connect エンドポイントへのデータパスがないため、VPC3 に存在する VM からのセッションは失敗します。キー操作を使用してセッションを終了します。

Ctrl + C

5. Network Connectivity Center ハブ

概要

このセクションでは、gcloud コマンドを使用して NCC ハブを構成します。NCC ハブは、VPC スポークから Private Service Connect エンドポイントへのデータパスの構築を担当するコントロール プレーンとして機能します。

b615efa4bad5f86.png

API サービスを有効にする

Network Connectivity API がまだ有効になっていない場合は、有効にします。

gcloud services enable networkconnectivity.googleapis.com

NCC ハブを作成する

次の gcloud コマンドを使用して、NCC ハブを作成します。「--export-psc」フラグは、既知の PSC エンドポイントをすべての VPC スポークに伝播するように NCC ハブに指示します。

hub_name="ncc-hub"
gcloud network-connectivity hubs create "${hub_name}" \
--export-psc

新しく作成した NCC ハブについて説明します。名前と関連するパスをメモします。

gcloud network-connectivity hubs describe ncc-hub

VPC1 を NCC スポークとして構成する

hub_name="ncc-hub"
vpc_spoke_name="sql-vpc1-spoke"
vpc_spoke_network_name="vpc1-spoke"

gcloud network-connectivity spokes linked-vpc-network create "${vpc_spoke_name}" \
--hub="${hub_name}" \
--vpc-network="${vpc_spoke_network_name}" \
--global

VPC3 を NCC スポークとして構成する

hub_name="ncc-hub"
vpc_spoke_name="sql-vpc3-spoke"
vpc_spoke_network_name="vpc3-spoke"

gcloud network-connectivity spokes linked-vpc-network create "${vpc_spoke_name}" \
--hub="${hub_name}" \
--vpc-network="${vpc_spoke_network_name}" \
--global

次のコマンドを使用して、NCC ハブのルートテーブルで PSC サブネットへのルートを確認します。

gcloud network-connectivity hubs route-tables routes list \
--route_table=default \
--hub=ncc-hub

6. NCC データパスを確認する

このステップでは、NCC ハイブリッドと VPC スポーク間のデータパスを検証します。

NCC で構成されたデータパスから Cloud SQL インスタンスの PSC エンドポイントへのデータパスを確認する

これらの gcloud コマンドの出力を利用して、オンプレミス VM にログオンします。

 gcloud compute instances list --filter="name=csql-vpc3-vm" 

オンプレミス ネットワークに存在する VM インスタンスにログオンします。

gcloud compute ssh csql-vpc3-vm \
--zone=us-central1-a \
--tunnel-through-iap

次の mysql コマンドを使用して、Cloud SQL インスタンスに接続します。プロンプトが表示されたら、上記の手順で作成したパスワードを入力します。

mysql -h 192.168.0.253 -u root -p 

ログインに成功すると、次の出力が表示されます。

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8501
Server version: 8.0.31-google (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.005 sec)

show databases; コマンドを使用して、MySql でデフォルトで作成されるデータベースを確認します。

MySQL [(none)]> show databases;

7. クリーンアップ

Cloud Shell にログインして、GCP リソースを削除します。

Cloud SQL PSC エンドポイントを削除する

gcloud compute forwarding-rules delete csql-psc-ep \
--region=us-central1 \
--quiet

gcloud compute addresses delete csql-psc-ip \
--region=us-central1 \
--quiet

gcloud compute networks subnets delete csql-psc-subnet \
--region=us-central1 \
--quiet

Cloud SQL インスタンスを削除する

gcloud sql instances delete mysql-instance --quiet

ファイアウォール ルールを削除する

vpc_spoke_network_name="vpc3-spoke"

gcloud compute firewall-rules delete vpc3-allow-all \ --network="${vpc_spoke_network_name}" 
gcloud compute firewall-rules delete vpc3-allow-iap \ --network="${vpc_spoke_network_name}"
vpc_spoke_network_name="vpc1-spoke"

gcloud compute firewall-rules delete vpc1-allow-all \ --network="${vpc_spoke_network_name}"
gcloud compute firewall-rules delete vpc1-allow-iap \ --network="${vpc_spoke_network_name}"

VPC1 と VPC3 の GCE インスタンスを削除する

vm_vpc1_spoke_name="csql-vpc1-vm"
zone="us-central1-a"
gcloud compute instances delete "${vm_vpc1_spoke_name}" \
--zone="${zone}" \
--quiet


vm_vpc_spoke_name="csql-vpc3-vm"
zone="us-central1-a"
gcloud compute instances delete "${vm_vpc_spoke_name}" \
--zone="${zone}" --quiet

NCC スポークを削除する

vpc_spoke_name="sql-vpc1-spoke"
gcloud network-connectivity spokes delete "${vpc_spoke_name}" \
--global \  
--quiet
vpc_spoke_name="sql-vpc3-spoke"
gcloud network-connectivity spokes delete "${vpc_spoke_name}" \
--global \  
--quiet

NCC ハブを削除する

hub_name="ncc-hub"
gcloud network-connectivity hubs delete "${hub_name}" \
  --project=${project}

すべての VPC のサブネットを削除する

vpc_spoke_subnet_name="csql-psc-subnet"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet
vpc_spoke_subnet_name="subnet1"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet
vpc_spoke_subnet_name="subnet3"
region="us-central1"

gcloud compute networks subnets delete "${vpc_spoke_subnet_name}" \ 
--region="${region}" \
--quiet

VPC1 と VPC3 を削除する

gcloud compute networks delete vpc1-spoke vpc3-spoke 

8. 完了

Network Connectivity Center ラボでの Private Service Connect の伝播が完了しました。

学習した内容

  • Network Connectivity Center を使用した Private Service Connect エンドポイントの伝播

次のステップ