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

この Codelab について
schedule7 分
subject最終更新: 2024年7月26日
account_circle作成者: Eric Yu, David Tu

このラボでは、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 ハブとは別のプロジェクトに存在する必要があります。
  • [割り当て: ネットワーク] を確認し、必要に応じてネットワークを追加リクエストします(下のスクリーンショットをご覧ください)。

6d1b99c6da87fd84.png

目標

  • 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 とファイアウォール ルールをデプロイします。

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

8acc7651f52e251e.png

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 Hub のデフォルトのルーティング テーブルの内容を一覧表示します。注* スポークが作成されるまで、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」キーワードを使用して、その特定の範囲から /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 Hub のデフォルトのルーティング テーブルの内容を一覧表示します。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 とのネットワーク接続に参加できます。

e1190fa898c5097d.png

プロジェクト間: 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

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 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 間で重複するサブネット範囲にプライベート 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 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 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 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 の執筆時点では、プライベート 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. データパスの接続を確認する

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

424df0ebe4510ebb.png

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

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 間の限定公開 NAT

次のステップ

©Google, LLC or its affiliates. All rights reserved. Do not distribute.