ラボ: 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 ネットワーキングの知識
  • Cloud SQL の基礎知識
  • Google Cloud プロジェクト
  • [割り当て: ネットワーク] を確認し、必要に応じてネットワークを追加リクエストします(下のスクリーンショットをご覧ください)。

6bc606cb34bce7e8.png

目標

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

始める前に

Google Cloud コンソールと Cloud Shell

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

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

Cloud コンソールには、https://console.cloud.google.com からアクセスできます。

Google Cloud で次の項目を設定すると、ネットワーク接続センターを簡単に構成できます。

Google Cloud Console の [プロジェクト セレクタ] ページで、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 ネットワークとファイアウォール ルールを 1 つのプロジェクトにデプロイします。次の論理図は、この手順で設定するネットワーク環境を示しています。

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 が有効になっているインスタンスに関する情報を表示します。インスタンスのサービス アタッチメントを指す URI を表示する pscServiceAttachmentLink フィールドに注意してください。この情報は次のセクションで必要になります。

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 Hub を構成します。NCC ハブは、VPC スポークから Private Service Connect エンドポイントへのデータパスの構築を担当するコントロール プレーンとして機能します。

b615efa4bad5f86.png

API Services を有効にする

ネットワーク接続 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 スポーク間のデータパスを検証します。

Cloud Sql インスタンスの PSC エンドポイントへの NCC 構成データパスを確認する

これらの 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 の伝播の Lab はこれで完了です。

学習した内容

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

次のステップ