1. はじめに
概要
このラボでは、Network Connectivity Center(NCC)を使用して、VPC スポークのサポートを通じて VPC 間の大規模な接続を確立する方法について説明します。VPC を VPC スポークとして定義すると、NCC ハブを介して複数の VPC ネットワークに接続できます。VPC スポーク構成の NCC では、一元化された接続管理モデルを使用する代わりに、VPC ピアリングを介した VPC 間のペア接続を管理する運用上の複雑さが軽減されます。
Network Connectivity Center(NCC)は、Google Cloud でのネットワーク接続管理のためのハブアンドスポーク コントロール プレーン モデルです。ハブリソースは、スポークを相互接続するための一元化された接続管理モデルを提供します。
作成するアプリの概要
この Codelab では、3 つの異なる VPC にわたるフルメッシュ VPC 接続ファブリックを実装する NCC ハブを使用して、論理的なハブ アンド スポーク トポロジを構築します。
学習内容
- NCC を使用したフルメッシュ VPC 接続
- VPC 間の限定公開 NAT
必要なもの
- GCP VPC ネットワークの知識
- Cloud Router と BGP ルーティングに関する知識
- 2 つの個別の GCP プロジェクト
- この Codelab では 5 つの VPC が必要です。これらの VPC の 1 つは、NCC ハブとは別のプロジェクトに存在する必要があります。
- [割り当て: ネットワーク] を確認し、必要に応じてネットワークを追加リクエストします。スクリーンショットは次のとおりです。
目標
- GCP 環境を設定する
- 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 [HUB-PROJECT-NAME]
projectname=[HUB-PROJECT-NAME]
echo $projectname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1
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. ネットワーク環境を設定する
概要
このセクションでは、VPC ネットワークとファイアウォール ルールを単一のプロジェクトにデプロイします。次の論理図は、この手順で設定するネットワーク環境を示しています。
プロジェクト間のスポークのサポートを示すために、後で別のプロジェクトに VPC とファイアウォール ルールをデプロイします。
VPC とサブネットを作成する
VPC ネットワークには、データパス検証用に GCE VM をインストールするサブネットが含まれています。
gcloud compute networks create vpc1-ncc --subnet-mode custom
gcloud compute networks create vpc2-ncc --subnet-mode custom
gcloud compute networks create vpc3-ncc --subnet-mode custom
gcloud compute networks create vpc4-ncc --subnet-mode custom
gcloud compute networks subnets create vpc1-ncc-subnet1 \
--network vpc1-ncc --range 10.1.1.0/24 --region us-central1
gcloud compute networks subnets create vpc1-ncc-subnet2 \
--network vpc1-ncc --range 10.1.2.0/25 --region us-central1
gcloud compute networks subnets create vpc1-ncc-subnet3 \
--network vpc1-ncc --range 10.1.2.128/25 --region us-central1
gcloud compute networks subnets create vpc2-ncc-subnet1 \
--network vpc2-ncc --range 10.2.2.0/24 --region us-central1
VPC でサポートされているサブネット範囲
NCC は、限定公開で使用されるパブリック IP アドレスを除く、すべての有効な IPv4 サブネット範囲をサポートしています。この手順では、ハブ ルート テーブルにインポートする有効な IP 範囲を VPC4 に作成します。
gcloud compute networks subnets create benchmark-testing-rfc2544 \
--network vpc4-ncc --range 198.18.0.0/15 --region us-east1
gcloud compute networks subnets create class-e-rfc5735 \
--network vpc4-ncc --range 240.0.0.0/4 --region us-east1
gcloud compute networks subnets create ietf-protcol-assignment-rfc6890 \
--network vpc4-ncc --range 192.0.0.0/24 --region us-east1
gcloud compute networks subnets create ipv6-4-relay-rfc7526 \
--network vpc4-ncc --range 192.88.99.0/24 --region us-east1
gcloud compute networks subnets create pupi \
--network vpc4-ncc --range 50.50.50.0/24 --region us-east1
gcloud compute networks subnets create test-net-1-rfc5737 \
--network vpc4-ncc --range 192.0.2.0/24 --region us-east1
gcloud compute networks subnets create test-net-2-rfc5737 \
--network vpc4-ncc --range 198.51.100.0/24 --region us-east1
gcloud compute networks subnets create test-net-3-rfc5737 \
--network vpc4-ncc --range 203.0.113.0/24 --region us-east1
重複するサブネット範囲を作成する
NCC は、重複する IP 範囲をハブ ルート テーブルにインポートしません。この制限は後で回避します。現時点では、VPC2 と VPC3 に重複する 2 つの IP 範囲を作成します。
gcloud compute networks subnets create overlapping-vpc2 \
--network vpc3-ncc --range 10.3.3.0/24 --region us-central1
gcloud compute networks subnets create overlapping-vpc3 \
--network vpc2-ncc --range 10.3.3.0/24 --region us-central1
VPC ファイアウォール ルールを構成する
各 VPC でファイアウォール ルールを構成して、次の処理を許可する
- SSH
- 内部 IAP
- 10.0.0.0/8 範囲
gcloud compute firewall-rules create ncc1-vpc-internal \
--network vpc1-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc2-vpc-internal \
--network vpc2-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc3-vpc-internal \
--network vpc3-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc4-vpc-internal \
--network vpc4-ncc \
--allow all \
--source-ranges 10.0.0.0/8
gcloud compute firewall-rules create ncc1-vpc-iap \
--network vpc1-ncc \
--allow all \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc2-vpc-iap \
--network vpc2-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc3-vpc-iap \
--network vpc3-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
gcloud compute firewall-rules create ncc4-vpc-iap \
--network vpc4-ncc \
--allow=tcp:22 \
--source-ranges 35.235.240.0/20
各 VPC で GCE VM を構成する
「vm1-vpc1-ncc」にパッケージをインストールするには、一時的にインターネットにアクセスする必要があります。
4 つの仮想マシンを作成し、各 VM を前に作成した VPC のいずれかに割り当てます。
gcloud compute instances create vm1-vpc1-ncc \
--subnet vpc1-ncc-subnet1 \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
apt-get install tcpdump -y
service apache2 restart
echo "
<h3>Web Server: www-vm1</h3>" | tee /var/www/html/index.html'
gcloud compute instances create vm2-vpc2-ncc \
--zone us-central1-a \
--subnet vpc2-ncc-subnet1 \
--no-address
gcloud compute instances create pnat-vm-vpc2 \
--zone us-central1-a \
--subnet overlapping-vpc3 \
--no-address
gcloud compute instances create vm1-vpc4-ncc \
--zone us-east1-b \
--subnet class-e-rfc5735 \
--no-address
3. Network Connectivity Center ハブ
概要
このセクションでは、gcloud コマンドを使用して NCC Hub を構成します。NCC ハブは、各 VPC スポーク間のルーティング構成の構築を担当するコントロール プレーンとして機能します。
API サービスを有効にする
ネットワーク接続 API がまだ有効になっていない場合は、有効にします。
gcloud services enable networkconnectivity.googleapis.com
NCC ハブを作成する
gCloud コマンドを使用して NCC ハブを作成する
gcloud network-connectivity hubs create ncc-hub
出力例
Create request issued for: [ncc-hub]
Waiting for operation [projects/user-3p-dev/locations/global/operations/operation-1668793629598-5edc24b7ee3ce-dd4c765b-5ca79556] to complete...done.
Created hub [ncc-hub]
新しく作成した NCC ハブを記述します。名前と関連付けられたパスをメモします。
gcloud network-connectivity hubs describe ncc-hub
gcloud network-connectivity hubs describe ncc-hub
createTime: '2023-11-02T02:28:34.890423230Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub
routeTables:
- projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uniqueId: de749c4c-0ef8-4888-8622-1ea2d67450f8
updateTime: '2023-11-02T02:28:48.613853463Z'
NCC Hub には、データ接続を作成するためのコントロール プレーンを定義するルーティング テーブルが導入されました。NCC ハブのルーティング テーブルの名前を確認する
gcloud network-connectivity hubs route-tables list --hub=ncc-hub
NAME: default
HUB: ncc-hub
DESCRIPTION:
NCC デフォルトのルートテーブルの URI を確認します。
gcloud network-connectivity hubs route-tables describe default --hub=ncc-hub
createTime: '2023-02-24T17:32:58.786269098Z'
name: projects/user-3p-dev/locations/global/hubs/ncc-hub/routeTables/default
state: ACTIVE
uid: eb1fdc35-2209-46f3-a8d6-ad7245bfae0b
updateTime: '2023-02-24T17:33:01.852456186Z'
NCC ハブのデフォルトのルーティング テーブルの内容を一覧表示します。注* スポークが作成されるまで、NCC ハブのルート テーブルは空になります。
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default
NCC ハブのルート テーブルは空である必要があります。
4. VPC スポークを使用した NCC
概要
このセクションでは、gCloud コマンドを使用して 3 つの VPC を NCC スポークとして構成します。
VPC を NCC スポークとして構成する
次の VPC を NCC スポークとして次のように構成します。
- VPC4
- VPC1
- VPC2
- VPC3
VPC4 を NCC スポークとして構成し、前に作成した NCC ハブに割り当てます。NCC スポーク API 呼び出しでは、位置情報を指定する必要があります。フラグ「–global」を使用すると、新しい NCC スポークを構成するときに URI パス全体を指定する必要がないため、gcloud 構文が簡素化されます。
gcloud network-connectivity spokes linked-vpc-network create vpc4-spoke4 \
--hub=ncc-hub \
--vpc-network=vpc4-ncc \
--global
VPC1 を NCC スポークとして構成します。
管理者は、VPC スポークから NCC ハブのルートテーブルにエクスポートされるサブネット ルートを除外できます。この Codelab のパートでは、サマリー プレフィックスに基づいて除外エクスポート ルールを作成し、VPC1 のサブネットが NCC ハブ ルート テーブルにエクスポートされないようにします。
この gcloud コマンドを使用して、VPC1 に属するすべてのサブネットを一覧表示します。
gcloud config set accessibility/screen_reader false
gcloud compute networks subnets list --network=vpc1-ncc
設定セクションで作成した /25 サブネットのペアを確認します。
NAME REGION NETWORK RANGE STACK_TYPE
vpc1-ncc-subnet1 us-central1 vpc1-ncc 10.1.1.0/24 IPV4_ONLY
vpc1-ncc-subnet2 us-central1 vpc1-ncc 10.1.2.0/25 IPV4_ONLY
vpc1-ncc-subnet3 us-central1 vpc1-ncc 10.1.2.128/25 IPV4_ONLY
VPC1 を NCC スポークとして構成し、「export-exclude-ranges」キーワードを使用して、その特定の範囲から /24 サマリー ルートをフィルタリングし、/25 サブネットのペアをハブ ルーティング テーブルへのインポートから除外します。
gcloud network-connectivity spokes linked-vpc-network create vpc1-spoke1 \
--hub=ncc-hub \
--vpc-network=vpc1-ncc \
--exclude-export-ranges=10.1.2.0/24 \
--global
注* ユーザーは、NCC スポークごとに最大 16 個の固有の IP 範囲をフィルタできます。
NCC ハブのデフォルトのルーティング テーブルの内容を一覧表示します。NCC ハブのルーティング テーブルの /25 サブネットのペアはどうなりますか?
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route-table=default --filter="NEXT_HOP:vpc1-ncc"
IP_CIDR_RANGE STATE TYPE NEXT_HOP HUB ROUTE_TABLE
10.1.1.0/24 ACTIVE VPC_PRIMARY_SUBNET vpc1-ncc ncc-hub default
VPC2 を NCC スポークとして構成する
gcloud network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--global
VPC3 を NCC スポークとして構成し、前に作成した NCC ハブに割り当てます。
gcloud network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--global
なぜですか?
ERROR: (gcloud.network-connectivity.spokes.linked-vpc-network.create) Invalid resource state for "https://www.googleapis.com/compute/v1/projects/xxxxxxxx/global/networks/vpc3-ncc": 10.3.3.0/24 (SUBNETWORK) overlaps with 10.3.3.0/24 (SUBNETWORK) from "projects/user-3p-dev/global/networks/vpc2-ncc" (peer)
NCC ハブは、VPC2 と重複する IP 範囲を検出しました。VPC2 と VPC3 はどちらも同じ 10.3.3.0/24 IP サブネットで設定されています。
除外エクスポートを使用して重複する IP 範囲をフィルタする
この Codelab の執筆時点では、エクスポート フィルタの構成を変更するために NCC スポークを削除して再作成する必要があるという既知の問題があります。
gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet
注: 特定の VPC に関連付けられている VPC スポークを削除した場合、同じ VPC を参照する新しいスポークを再作成するには、10 分間のクールダウン期間が経過する必要があります。
gcloud network-connectivity spokes linked-vpc-network create vpc2-spoke2 \
--hub=ncc-hub \
--vpc-network=vpc2-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global
VPC3 を NCC スポークとして構成し、前に作成した NCC ハブに割り当てます。VPC3 をスポークとして NCC に追加するこの試行は成功するはずです。
gcloud network-connectivity spokes linked-vpc-network create vpc3-spoke3 \
--hub=ncc-hub \
--vpc-network=vpc3-ncc \
--exclude-export-ranges=10.3.3.0/24 \
--global
NCC Hub のデフォルト ルーティング テーブルの内容を一覧表示して、出力を確認します。
gcloud network-connectivity hubs route-tables routes list --hub=ncc-hub --route_table=default
VPC2 と VPC3 の重複する IP 範囲は除外されます。NCC Hub ルーティング テーブルは、プライベートで使用されるパブリック IP アドレス(PUPI)を除く、有効な IPv4 有効範囲タイプをすべてサポートしています。
5. プロジェクト間のスポークを使用した NCC
概要
ここまでは、ハブと同じプロジェクトに属する NCC スポークを構成しました。このセクションでは、gCloud コマンドを使用して、NCC ハブとは別のプロジェクトから VPC を NCC スポークとして構成します。
これにより、独自の VPC を管理しているプロジェクト オーナーは、NCC Hub とのネットワーク接続に参加できます。
プロジェクト間: Google Cloud コンソールと Cloud Shell
このラボでは、GCP を操作するために、Google Cloud コンソールと Cloud Shell の両方を使用します。
プロジェクト間のスポークの 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 [YOUR-CROSSPROJECT-NAME]
xprojname=[YOUR-CROSSPROJECT-NAME]
echo $xprojname
gcloud config set compute/zone us-central1-a
gcloud config set compute/region us-central1
IAM ロール
NCC では、特定の API にアクセスするために IAM ロールが必要です。必要に応じて、NCC IAM ロールを持つユーザーを構成してください。
少なくとも、クロス プロジェクト スポーク管理者には IAM ロール「networkconnectivity.networkSpokeManager」を付与する必要があります。」
次の表に、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 |
クロス プロジェクトに VPC とサブネットを作成する
VPC ネットワークには、データパス検証用に GCE VM をインストールするサブネットが含まれています。
gcloud compute networks create xproject-vpc \
--subnet-mode custom
gcloud compute networks subnets create xprj-net-1 \
--network xproject-vpc \
--range 10.100.1.0/24 \
--region us-central1
gcloud compute networks subnets create xprj-net-2 \
--network xproject-vpc \
--range 10.100.2.0/24 \
--region us-central1
NCC ハブ プロジェクトの URI
この gcloud コマンドを使用して、NCC Hub URI を確認します。次のステップでクロスプロジェクト NCC スポークを構成する際に、この URI パスが必要になります。
gcloud network-connectivity hubs describe ncc-hub
プロジェクト間のスポーク VPC
VPC が NCC ハブ プロジェクトに含まれていない他のプロジェクトにログインします。Cloud Shell で、次のコマンドを使用して VPC を NCC スポークとして構成します。
- HUB_URI は、別のプロジェクトのハブの URI にする必要があります。
- VPC_URI は、スポークと同じプロジェクトに存在する必要があります。
- VPC-network は、このクロス プロジェクト内の VPC が別のプロジェクトの NCC ハブに参加することを指定します。
gcloud network-connectivity spokes linked-vpc-network create xproj-spoke \
--hub=projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub \
--global \
--vpc-network=xproject-vpc
.
Create request issued for: [xproj-spoke]
Waiting for operation [projects/xproject/locations/global/operations/operation-1689790411247-600dafd351158-2b862329-19b747f1] to complete...done.
Created spoke [xproj-spoke].
createTime: '2023-07-19T18:13:31.388500663Z'
hub: projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub
linkedVpcNetwork:
uri: https://www.googleapis.com/compute/v1/projects/xproject/global/networks/xproject-vpc
name: projects/xproject/locations/global/spokes/xproj-spoke
reasons:
- code: PENDING_REVIEW
message: Spoke is Pending Review
spokeType: VPC_NETWORK
state: INACTIVE
uniqueId: 46b4d091-89e2-4760-a15d-c244dcb7ad69
updateTime: '2023-07-19T18:13:38.652800902Z'
プロジェクト間の NCC スポークの状態はどのようなものですか?理由
6. プロジェクト間のスポークの拒否または承認
概要
NCC ハブ管理者は、ハブに参加するプロジェクト間のスポークを明示的に承認する必要があります。これにより、プロジェクト オーナーが不正な NCC スポークを NCC グローバル ルーティング テーブルに接続できなくなります。スポークを承認または拒否した後、上記のコマンドを実行すると、スポークを拒否または承認する操作を何度でも行えます。
Cloud Shell にログインして、NCC ハブが配置されているプロジェクトに戻ります。
確認するプロジェクト間のスポークを特定する
gcloud network-connectivity hubs list-spokes ncc-hub \
--filter="reason:PENDING_REVIEW"
スポークを承認する
gcloud network-connectivity hubs accept-spoke ncc-hub --spoke=xproj-spoke
省略可: スポークの拒否
gcloud network-connectivity spokes reject-spoke ncc-hub --spoke=xproj-spoke
--details="some reason to reject"
ハブでアクティブなスポークを一覧表示する
gcloud network-connectivity hubs list-spokes ncc-hub \
--filter="state:ACTIVE"
NAME PROJECT LOCATION TYPE STATE STATE REASON
Xproj-spoke xproj global VPC_NETWORK ACTIVE
vpc4-spoke4 user-3p-dev global VPC_NETWORK ACTIVE
vpc1-spoke1 user-3p-dev global VPC_NETWORK ACTIVE
vpc2-spoke2 user-3p-dev global VPC_NETWORK ACTIVE
vpc3-spoke3 user-3p-dev global VPC_NETWORK ACTIVE
ハブのサブネット ルートを一覧表示する
出力から、クロス VPC スポークのサブネット ルートを確認できますか?
gcloud network-connectivity hubs route-tables routes list \
--route_table=default \
--hub=ncc-hub \
--filter="NEXT_HOP:xprj-vpc"
IP_CIDR_RANGE STATE TYPE NEXT_HOP HUB ROUTE_TABLE
10.100.1.0/24 ACTIVE VPC_PRIMARY_SUBNET xprj-vpc ncc-hub default
Include-Export フィルタを使用してクロス プロジェクト スポーク VPC を更新する
VPC が NCC ハブ プロジェクトに含まれていないプロジェクトにログインします。Cloud Shell で、次のコマンドを使用して VPC を NCC スポークとして構成します。
- HUB_URI は、別のプロジェクトのハブの URI にする必要があります。
- VPC_URI は、スポークと同じプロジェクトに存在する必要があります。
- VPC-network は、このクロス プロジェクト内の VPC が別のプロジェクトの NCC ハブに参加することを指定します。
- サブネット範囲 10.100.2.0/24 のみを NCC ハブ ルートテーブルにインポートする
- 出力の「ETAG」値をメモします。この値は NCC によって生成され、NCC ハブ管理者に提供する必要があります。NCC ハブ管理者は、ハブへの参加に対するプロジェクト間のスポーク リクエストを承認するときに、この値を参照する必要があります。
gcloud network-connectivity spokes linked-vpc-network update xproj-spoke \
--hub=projects/[YOUR-PROJECT-NAME]/locations/global/hubs/ncc-hub \
--global \
--include-export-ranges=10.100.2.0/24
Update request issued for: [xprj-vpc]
Waiting for operation [projects]/xproject/locations/global/operations/operation-1742936388803-6313100521cae-020ac5d2-58
52fbba] to complete...done.
Updated spoke [xprj-vpc].
createTime: '2025-02-14T14:25:41.996129250Z'
etag: '4'
fieldPathsPendingUpdate:
- linked_vpc_network.include_export_ranges
group: projects/xxxxxxxx/locations/global/hubs/ncc-hub/groups/default
hub: projects/xxxxxxxx/locations/global/hubs/ncc-hub
linkedVpcNetwork:
includeExportRanges:
- 10.100.2.0/24
uri: https://www.googleapis.com/compute/v1/projects/xproject/global/networks/vpc1-spoke
name: projects/xproject/locations/global/spokes/xprj-vpc
reasons:
- code: UPDATE_PENDING_REVIEW
message: Spoke update is Pending Review
spokeType: VPC_NETWORK
state: ACTIVE
uniqueId: 182e0f8f-91cf-481c-a081-ea6f7e40fb0a
updateTime: '2025-03-25T20:59:51.995734879Z'
確認する更新されたプロジェクト間のスポークを特定する
NCC ハブをホストしているプロジェクトにログインします。cloudshell で、次のコマンドを使用して、プロジェクト間の VPC スポークの更新のステータスを確認します。
- ETag の値はどのようなものですか?この値は、VPC スポークの更新からの出力と一致する必要があります。
gcloud network-connectivity hubs list-spokes ncc-hub \
--filter="reasons:UPDATE_PENDING_REVIEW" \
--format=yaml
プロジェクト間のスポークからの更新された変更を承認する
このコマンドを使用して、NCC ハブへの参加を求めるプロジェクト間スポークのリクエストを承認します。
gcloud network-connectivity hubs accept-spoke-update ncc-hub \
--spoke=https://www.googleapis.com/networkconnectivity/v1/projects/xproject/locations/global/spokes/xproj-spoke \
--spoke-etag={etag value}
必要に応じて、プロジェクト間のスポークから更新された変更を拒否する
このコマンドを使用して、NCC ハブへの参加を求めるプロジェクト間スポークのリクエストを拒否します。
gcloud network-connectivity hubs reject-spoke-update ncc-hub \
--spoke=https://www.googleapis.com/networkconnectivity/v1/projects/xproject/locations/global/spokes/xproj-spoke \
--details="not today" \
--spoke-etag={etag value}
クロス プロジェクト スポークが NCC ハブに接続されていることを確認する
gcloud network-connectivity hubs list-spokes ncc-hub \ --filter="name:xproj-spoke"
7. VPC 間の Private NAT
概要
このセクションでは、2 つの VPC 間で重複するサブネット範囲にプライベート NAT を構成します。VPC 間の Private NAT には NCC が必要です。
前のセクションでは、VPC2 と VPC3 が重複するサブネット範囲「10.3.3.0/24」で構成されています。両方の VPC は NCC スポークとして構成されており、重複するサブネットが NCC ハブ ルート テーブルに挿入されないようにします。つまり、そのサブネットに存在するホストに到達するレイヤ 3 データパスはありません。
NCC ハブ プロジェクトで次のコマンドを使用して、重複するサブネット範囲を見つけます。
gcloud compute networks subnets list --network vpc2-ncc
gcloud compute networks subnets list --network vpc3-ncc
vpc2-ncc で、重複する IP 範囲を含むサブネット名は何ですか。
*サブネット名をメモして保存します。この範囲にソース NAT を構成します。
Private NAT を構成する
VPC2 の重複するサブネットからの送信元 NAT トラフィックにルーティング可能なサブネット範囲を専用にします。「–purpose=PRIVATE_NAT」フラグを使用して、重複しないサブネット範囲を構成します。
gcloud beta compute networks subnets create ncc2-spoke-nat \
--network=vpc2-ncc \
--region=us-central1 \
--range=10.10.10.0/29 \
--purpose=PRIVATE_NAT
プライベート NAT を実行する専用のクラウド ルーターを作成する
gcloud compute routers create private-nat-cr \
--network vpc2-ncc \
--region us-central1
vpc2-ncc から 10.3.3.0/24 の重複範囲をソース NAT するように Cloud Router を構成します。次の構成例では、「overlapping-vpc3」は重複するサブネットの名前です。「ALL」キーワードは、サブネット内のすべての IP 範囲が送信元 NAT されることを指定します。
gcloud beta compute routers nats create ncc2-nat \
--router=private-nat-cr \
--type=PRIVATE \
--nat-custom-subnet-ip-ranges=overlapping-vpc3:ALL \
--router-region=us-central1
前述の手順では、NAT IP 範囲のプールと、変換される特定のサブネットを作成しました。この手順では、宛先ネットワークが NCC ハブ ルーティング テーブルからパスを取得する場合に、重複するサブネット範囲から送信されたトラフィックに一致するネットワーク パケットを変換する NAT ルール「1」を作成します。
gcloud beta compute routers nats rules create 1 \
--router=private-nat-cr \
--region=us-central1 \
--match='nexthop.hub == "//networkconnectivity.googleapis.com/projects/$projectname/locations/global/hubs/ncc-hub"' \
--source-nat-active-ranges=ncc2-spoke-nat \
--nat=ncc2-nat
Private NAT のデータパスを確認する
gcloud beta compute routers nats describe ncc2-nat --router=private-nat-cr
出力例
enableDynamicPortAllocation: true
enableEndpointIndependentMapping: false
endpointTypes:
- ENDPOINT_TYPE_VM
name: ncc2-nat
rules:
- action:
sourceNatActiveRanges:
- https://www.googleapis.com/compute/beta/projects/xxxxxxxx/regions/us-central1/subnetworks/ncc2-spoke-nat
match: nexthop.hub == "//networkconnectivity.googleapis.com/projects/xxxxxxxx/locations/global/hubs/ncc-hub"
ruleNumber: 1
sourceSubnetworkIpRangesToNat: LIST_OF_SUBNETWORKS
subnetworks:
- name: https://www.googleapis.com/compute/beta/projects/xxxxxxxx/regions/us-central1/subnetworks/overlapping-vpc3
sourceIpRangesToNat:
- ALL_IP_RANGES
type: PRIVATE
必要に応じて、
- ウェブ コンソールに切り替える
- [ネットワーク サービス] > [Cloud NAT] > [ncc2-nat] に移動します。
動的ポート割り当てがデフォルトで有効になっていることを確認します。
次に、VPC2 用に構成されたプライベート NAT パスを使用するデータパスを確認します。
vm1-vpc1-ncc への SSH セッションを開き、次の tcpdump コマンドを使用して、NAT プール範囲 10.10.10.0/29 からのパケットをキャプチャします。
vm1-vpc1-ncc
sudo tcpdump -i any net 10.10.10.0/29 -n
この Codelab の執筆時点では、プライベート NAT は ICMP パケットをサポートしていません。「pNat-vm-vpc2」に SSH セッションを開始し、curl コマンドを使用して、ポート TCP 80 で「vm1-vpc1-ncc」に接続します。
pnat-vm-vpc2
curl 10.1.1.2 -v
vm1-vpc1-ncc で tcpdump の出力を調べます。vm1-vpc1-ncc のウェブサーバーと TCP セッションを開始した送信元 IP アドレスは何ですか。
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
19:05:27.504761 ens4 In IP 10.10.10.2.1024 > 10.1.1.2:80: Flags [S], seq 2386228656, win 65320, options [mss 1420,sackOK,TS val 3955849029 ecr 0,nop,wscale 7], length 0
19:05:27.504805 ens4 Out IP 10.1.1.2:80 > 10.10.10.2.1024: Flags [S.], seq 48316785, ack 2386228657, win 64768, options [mss 1420,sackOK,TS val 1815983704 ecr 3955849029,nop,wscale 7], length 0
<output snipped>
8. IPv6 サブネットの NCC サポート
Network Connectivity Center は、NCC VPC スポークとハイブリッド スポーク間の IPv6 サブネット交換と動的ルート交換をサポートしています。このセクションでは、IPv6 のみとデュアルスタック(IPv4 と IPv6)のサブネット ルート交換モードをサポートするように NCC を構成します。
VPC スポークとして NCC-Hub に参加する IPv6 用の新しい VPC を作成する
gcloud compute networks create vpc5-ncc \
--subnet-mode custom \
--enable-ula-internal-ipv6
gcloud compute networks subnets create vpc4-ipv4-subnet1 \
--network vpc5-ncc \
--range 10.5.5.0/24 \
--region us-central1
このコマンドを使用して、VPC5 を NCC スポークとして構成し、IPv4 サブネット ルートをハブ ルート テーブルにエクスポートしないようにします。IPv6 ULA ネットワークを NCC ハブルート テーブルにエクスポートします。
gcloud network-connectivity spokes linked-vpc-network create vpc5-spoke5 \
--hub=ncc-hub \
--vpc-network=vpc5-ncc \
--include-export-ranges=ALL_IPV6_RANGES
--exclude-export-ranges=10.5.5.0/24
--global
プライベート IPv6 一意のローカル アドレス(ULA)に VPC1 と VPC4 を有効にします。GCP は、fd20::/20 範囲のすべての ULA アドレスを自動的に割り当てます。
gcloud compute networks update vpc-ncc4 \
--enable-ula-internal-ipv6
gcloud compute networks update vpc-ncc1 \
--enable-ula-internal-ipv6
VPC1 にネイティブの IPv6 サブネットとデュアルスタックの ipv4_v6 サブネットを作成する
gcloud compute networks subnets create vpc1-ipv6-sn1 \
--network=vpc-ncc1 \
--stack-type=IPV6_ONLY \
--ipv6-access-type=INTERNAL \
--region=us-central1
gcloud compute networks subnets create vpc1-ipv64-sn2 \
--network=vpc-ncc1 \
--range=10.10.10.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=INTERNAL \
--region=us-east1
VPC4 にネイティブの IPv6 サブネットとデュアルスタックの ipv4_v6 サブネットを作成する
gcloud compute networks subnets create vpc4-ipv6-sn1 \
--network=vpc-ncc4 \
--stack-type=IPV6_ONLY \
--ipv6-access-type=INTERNAL \
--region=us-central1
gcloud compute networks subnets create vpc4-ipv64-sn2 \
--network=vpc-ncc4 \
--range=10.40.40.0/24 \
--stack-type=IPV4_IPV6 \
--ipv6-access-type=INTERNAL \
--region=us-east1
VPC1 で、IPv6 ULA 範囲からのトラフィックを許可する IPv6 VPC ファイアウォール ルールを作成します。
gcloud compute firewall-rules create allow-icmpv6-ula-ncc1 \
--network=vpc-ncc1 \
--action=allow \
--direction=ingress \
--rules=all \
--source-ranges=fd20::/20
VPC4 で、IPv6 ULA 範囲からのトラフィックを許可する IPv6 VPC ファイアウォール ルールを作成します。
gcloud compute firewall-rules create allow-icmpv6-ula-ncc4 \
--network=vpc-ncc4 \
--action=allow \
--direction=ingress \
--rules=all \
--source-ranges=fd20::/20
次のセクションでデータパスの接続を確認するために、3 つの GCE IPv6 インスタンスを作成します。
gcloud compute instances create vpc4-ipv6-vm \
--zone us-central1-a \
--subnet=vpc4-ipv6-sn1 \
--stack-type=IPV6_ONLY
gcloud compute instances create vpc1-ipv6-vm \
--zone us-central1-a \
--subnet=vpc1-ipv6-sn1 \
--stack-type=IPV6_ONLY
gcloud compute instances create vpc1-dual-stack-vm \
--zone us-east1-b \
--network=vpc-ncc1 \
--subnet=vpc2-ipv64-sn2 \
--stack-type=IPV4_IPV6
NCC ハブで IPv6 サブネットを確認する
IPv6 ULA サブネットの NCC ハブ ルートテーブルを確認します。
gcloud network-connectivity hubs route-tables routes list --route_table=default \
--hub=ncc-hub \
--filter="IP_CIDR_RANGE:fd20"
上記のコマンドの出力には IPv6 サブネットがリストされていません。デフォルトでは、VPC スポークの IPv6 サブネットは、NCC ハブ ルート テーブルへのエクスポートに含まれません。
Listed 0 items.
次の gcloud コマンドを使用して、VPC1 スポークと VPC4 スポークを更新し、IPv6 サブネットを NCC ハブ ルート テーブルにエクスポートします。
gcloud network-connectivity spokes linked-vpc-network update vpc1-spoke1 \
--global \
--include-export-ranges=ALL_IPV6_RANGES
gcloud network-connectivity spokes linked-vpc-network update vpc4-spoke4 \
--global \
--include-export-ranges=ALL_IPV6_RANGES
もう一度、IPv6 ULA サブネットの NCC ハブ ルートテーブルを確認します。
gcloud network-connectivity hubs route-tables routes list --route_table=default \
--hub=ncc-hub \
--filter="IP_CIDR_RANGE:fd20"
出力例
IP_CIDR_RANGE PRIORITY LOCATION STATE TYPE SITE_TO_SITE NEXT_HOP HUB ROUTE_TABLE
fd20:c95:95d2:1:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc4 ncc-hub default
fd20:90:6768:1000:0:0:0:0/64 us-east1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc1 ncc-hub default
fd20:c95:95d2:1000:0:0:0:0/64 us-east1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc4 ncc-hub default
fd20:90:6768:0:0:0:0:0/64 us-central1 ACTIVE VPC_PRIMARY_SUBNET N/A vpc-ncc1 ncc-hub default
9. データパスの接続を確認する
IPv4 データパス接続
図を参照して、各仮想マシン間の IPv4 データパスを確認します。
「vm1-vpc1-ncc」に SSH 接続し、TCP ダンプを開始して 「vm2-vpc2-ncc」からの ICMP パケットをトレースします。この VM は VPC2 にあります。
vm1-vpc1-ncc
sudo tcpdump -i any icmp -v -e -n
「vm1-vpc2-ncc」への SSH セッションを確立し、「vm1-vpc1-ncc」の IP アドレスを「ping」します。
vm1-vpc2-ncc
ping 10.1.1.2
「vm1-vpc2-ncc」に SSH 接続し、「vm1-vpc4-ncc」の IP アドレスを「ping」します。
vm1-vpc2-ncc
ping 240.0.0.2
IPv6 データパス接続
図を参照して、各仮想マシン間の IP64 データパスを確認します。
gcloud コマンドを使用して、IPv6 対応の各インスタンスの IP アドレスを一覧表示します。
gcloud compute instances list --filter="INTERNAL_IP:fd20"
出力例
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
vpc1-ipv6-vm us-central1-a n1-standard-1 fd20:90:6768:0:0:1:0:0/96 RUNNING
vpc4-ipv6-vm us-central1-a n1-standard-1 fd20:c95:95d2:1:0:1:0:0/96 RUNNING
vpc1-dual-stack-vm us-east1-b n1-standard-1 10.10.10.3 XXX.196.137.107 RUNNING
fd20:90:6768:1000:0:1:0:0/96
「vpc1-dualstack-vm」への SSH セッションを確立し、「vpc1-ipv6-vm」の IPv6 アドレスを「ping」して、グローバル VPC 内の IPv6 接続を検証します。
ping fd20:90:6768:1000:0:1::
「vpc1-dualstack-vm」への SSH セッションを確立し、「vpc4-ipv6-vm」の IPv6 アドレスを「ping」して、NCC 接続を介した IPv6 接続を検証します。
ping fd20:c95:95d2:1:0:1::
10. クリーンアップ
Cloud Shell にログインし、ハブサイトとブランチサイトのネットワーク内の VM インスタンスを削除する
限定公開 VPC NAT 構成を削除する
gcloud beta compute routers nats rules delete 1 \
--nat=ncc2-nat \
--router=private-nat-cr \
--region=us-central1 \
--quiet
gcloud beta compute routers nats delete ncc2-nat \
--router=private-nat-cr \
--router-region=us-central1 \
--quiet
gcloud compute routers delete private-nat-cr \
--region=us-central1 \
--quiet
NCC スポークを削除する
gcloud network-connectivity spokes delete vpc1-spoke1 --global --quiet
gcloud network-connectivity spokes delete vpc2-spoke2 --global --quiet
gcloud network-connectivity spokes delete vpc3-spoke3 --global --quiet
gcloud network-connectivity spokes delete vpc4-spoke4 --global --quiet
プロジェクト間のスポークを拒否する
NCC ハブからプロジェクト間の VPC スポークを拒否します。
gcloud network-connectivity spokes reject projects/$xprojname/locations/global/spokes/xproj-spoke \--details="cleanup" \
--global
NCC ハブを削除する
gcloud network-connectivity hubs delete ncc-hub --quiet
ファイアウォール ルールを削除する
gcloud compute firewall-rules delete ncc1-vpc-internal --quiet
gcloud compute firewall-rules delete ncc2-vpc-internal --quiet
gcloud compute firewall-rules delete ncc3-vpc-internal --quiet
gcloud compute firewall-rules delete ncc4-vpc-internal --quiet
gcloud compute firewall-rules delete ncc1-vpc-iap --quiet
gcloud compute firewall-rules delete ncc2-vpc-iap --quiet
gcloud compute firewall-rules delete ncc3-vpc-iap --quiet
gcloud compute firewall-rules delete ncc4-vpc-iap --quiet
gcloud compute firewall-rules delete allow-icmpv6-ula-ncc1
gcloud compute firewall-rules delete allow-icmpv6-ula-ncc4
GCE インスタンスを削除する
gcloud compute instances delete vm1-vpc1-ncc --zone=us-central1-a --quiet
gcloud compute instances delete vm2-vpc2-ncc --zone=us-central1-a --quiet
gcloud compute instances delete pnat-vm-vpc2 --zone=us-central1-a --quiet
gcloud compute instances delete vm1-vpc4-ncc --zone=us-east1-b --quiet
gcloud compute instances delete vpc4-ipv6-vm --zone us-central1-a --quiet
gcloud compute instances delete vpc2-dual-stack-vm --zone us-east1-b --quiet
gcloud compute instances delete vpc2-ipv6-vm --zone us-central1-a --quiet
VPC サブネットを削除する
gcloud compute networks subnets delete ncc2-spoke-nat --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet2 --region us-central1 --quiet
gcloud compute networks subnets delete vpc1-ncc-subnet3 --region us-central1 --quiet
gcloud compute networks subnets delete vpc2-ncc-subnet1 --region us-central1 --quiet
gcloud compute networks subnets delete overlapping-vpc2 --region us-central1 --quiet
gcloud compute networks subnets delete overlapping-vpc3 --region us-central1 --quiet
gcloud compute networks subnets delete benchmark-testing-rfc2544 --region us-east1 --quiet
gcloud compute networks subnets delete class-e-rfc5735 --region us-east1 --quiet
gcloud compute networks subnets delete ietf-protcol-assignment-rfc6890 --region us-east1 --quiet
gcloud compute networks subnets delete ipv6-4-relay-rfc7526 --region us-east1 --quiet
gcloud compute networks subnets delete pupi --region us-east1 --quiet
gcloud compute networks subnets delete test-net-1-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-2-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete test-net-3-rfc5737 --region us-east1 --quiet
gcloud compute networks subnets delete vpc1-ipv64-sn2 --region=us-east1 --quiet
gcloud compute networks subnets delete vpc1-ipv6-sn1 --region=us-central1 --quiet
gcloud compute networks subnets delete vpc4-ipv64-sn2 --region=us-east1 --quiet
gcloud compute networks subnets delete vpc4-ipv6-sn1 --region=us-central1 --quiet
VPC を削除する
gcloud compute networks delete vpc1-ncc vpc2-ncc vpc3-ncc vpc4-ncc
--quiet
11. 完了
Network Connectivity Center ラボが完了しました。
学習した内容
- NCC ハブを備えたフルメッシュ VPC ピアリング ネットワークを構成する
- NCC スポーク除外フィルタ
- プロジェクト間のスポーク サポート
- VPC 間の限定公開 NAT
次のステップ
©Google, LLC or its affiliates. All rights reserved. Do not distribute.