ラボ: スポークとしての NCC VPC

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 間の Private NAT

必要なもの

  • GCP VPC ネットワークに関する知識
  • Cloud Router と BGP ルーティングに関する知識
  • 2 つの個別の GCP プロジェクト
  • この Codelab には 5 つの VPC が必要です。これらの VPC の 1 つを NCC ハブとは別のプロジェクトに配置する必要があります。
  • 割り当て: ネットワークを確認し、必要に応じて追加のネットワークをリクエストします。以下のスクリーンショットをご覧ください。

6d1b99c6da87fd84.png

目標

  • GCP 環境を設定する
  • VPC をスポークとして Network Connectivity Center を構成する
  • データパスの検証
  • NCC の Serviceability 機能の詳細
  • 使用済みのリソースをクリーンアップする

始める前に

Google Cloud コンソールと Cloud Shell

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

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

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

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

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

Cloud Shell を起動します。この Codelab では、Cloud Shell での gcloud 構成の実装に役立つ $variables を使用します。

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 とファイアウォール ルールを別のプロジェクトにデプロイします。

245f1002db33ca98.png

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 ハブを構成します。NCC ハブは、各 VPC スポーク間のルーティング構成を構築するコントロール プレーンとして機能します。

8acc7651f52e251e.png

API サービスを有効にする

Network Connectivity 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 ハブに、データ接続を作成するためのコントロール プレーンを定義するルーティング テーブルが導入されました。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 スポークとして構成します。

a70bc80037927bb0.png

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」を使用して、/25 サブネットのペアをハブ ルーティング テーブルへのインポートから除外します。特定の範囲から /24 サマリー ルートをフィルタする

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 は両方とも同じ IP サブネット 10.3.3.0/24 でセットアップされています。

エクスポートの除外による重複する 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 ハブのデフォルトのルーティング テーブルの内容を一覧表示し、出力を調べます。

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

VPC2 と VPC3 の重複する IP 範囲は除外されます。NCC ハブ ルーティング テーブルは、プライベートで使用されるパブリック IP アドレス(PUPI)を除く、すべての有効な IPv4 有効範囲タイプをサポートします。

5. クロス プロジェクト スポークを備えた NCC

概要

ここまでで、ハブと同じプロジェクトに属する NCC スポークを構成しました。このセクションでは、gcloud コマンドを使用して VPC を NCC ハブ以外の別のプロジェクトの NCC スポークとして構成します。

これにより、独自の VPC を管理しているプロジェクト オーナーは NCC ハブとのネットワーク接続に参加できます。

e1190fa898c5097d.png

プロジェクト間: Google Cloud コンソールと Cloud Shell

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

クロス プロジェクト スポーク Google Cloud コンソール

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

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

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

Cloud Shell を起動します。この Codelab では、Cloud Shell での gcloud 構成の実装に役立つ $variables を使用します。

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

NCC ハブ プロジェクトの URI

この gcloud コマンドを使用して、NCC ハブ URI を検索します。次のステップで、プロジェクト間の NCC スポークを構成するために URI パスが必要になります。

gcloud network-connectivity hubs describe ncc-hub

クロス プロジェクト スポーク VPC

VPC が NCC ハブ プロジェクトの一部ではない他のプロジェクトにログインします。Cloud Shell でこのコマンドを使用して、VPC を NCC スポークとして構成します。

  • HUB_URI は、別のプロジェクト内のハブの URI にする必要があります。
  • VPC_URI は、スポークと同じプロジェクトに存在する必要があります
  • VPC ネットワークでは、このクロス プロジェクト内の 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 spokes accept xproj-spoke --global

省略可: スポークを拒否する

gcloud network-connectivity spokes reject xproj-spoke \
--global \
--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.0.0/16  ACTIVE  VPC_PRIMARY_SUBNET  xprj-vpc  ncc-hub  default

7. VPC 間の Private NAT

概要

このセクションでは、2 つの VPC 間で重複するサブネット範囲に対して Private NAT を構成します。VPC 間のプライベート 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 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 を実行するようにクラウド ルーターを構成します。以下の構成例では、「duplicate-vpc3」重複するサブネットの名前です。「ALL」というキーワードは、サブネット内のすべての IP 範囲がソース NAT の対象となることを指定します。

gcloud 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 範囲のプールと変換される特定のサブネットを作成しました。このステップでは、NAT ルール「1」を作成します。宛先ネットワークが NCC ハブ ルーティング テーブルからパスを取得する場合に、重複するサブネット範囲からのトラフィックに一致するネットワーク パケットを変換します。

gcloud 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 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/projects/yueri-3p-dev/regions/us-central1/subnetworks/ncc2-spoke-nat
  match: nexthop.hub == "//networkconnectivity.googleapis.com/projects/yueri-3p-dev/locations/global/hubs/ncc-hub"
  ruleNumber: 1
sourceSubnetworkIpRangesToNat: LIST_OF_SUBNETWORKS
subnetworks:
- name: https://www.googleapis.com/compute/projects/yueri-3p-dev/regions/us-central1/subnetworks/overlapping-vpc3
  sourceIpRangesToNat:
  - ALL_IP_RANGES
type: PRIVATE

(省略可)

  • ウェブ コンソールに切り替える
  • [ネットワーク サービス] >Cloud NAT >ncc2-nat

動的ポート割り当てがデフォルトで有効になっていることを確認します。

114050bb65e0c4e2.png

次に、VPC2 用に構成されたプライベート NAT パスを使用するデータパスを確認します。

5035b181aeaa30a8.png

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 の執筆時点では、Private NAT は ICMP パケットをサポートしていません。SSH セッションを「pNat-vm-vpc2」に接続し、以下のように 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. データパスの接続を確認する

図を参照して、各仮想マシン間のデータパスを確認します。

424df0ebe4510ebb.png

SSH で「vm1-vpc1-ncc」に接続し、TCP ダンプを開始して「」からの ICMP パケットをトレースvm2-vpc2-ncc」に変更します。この VM は VPC2 に存在することを思い出してください。

vm1-vpc1-ncc

sudo tcpdump -i any icmp -v -e -n

vm1-vpc2-ncc と ping への SSH セッションを確立します「vm1-vpc1-ncc」の IP アドレス。

vm1-vpc2-ncc

ping 10.1.1.2

vm1-vpc2-ncc と ping への SSH を確立します「vm1-vpc4-ncc」の IP アドレス。

vm1-vpc2-ncc

ping 240.0.0.2

9. クリーンアップ

Cloud Shell にログインし、ハブとブランチサイトのネットワークの VM インスタンスを削除する

プライベート VPC NAT 構成を削除する

gcloud compute routers nats rules delete 1 \
--nat=ncc2-nat \
--router=private-nat-cr \
--region=us-central1 \
--quiet

gcloud 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

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

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

VPC を削除する

gcloud compute networks delete vpc1-ncc vpc2-ncc vpc3-ncc vpc4-ncc 
--quiet 

10. 完了

Network Connectivity Center のラボが完了しました。

学習した内容

  • NCC ハブを使用してフルメッシュ VPC ピアリング ネットワークを構成した
  • NCC スポーク除外フィルタ
  • プロジェクト間のスポーク サポート
  • VPC 間の Private NAT

次のステップ

©Google, LLC,またはその関連会社All rights reserved. Do not distribute.