Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

GCP 筆記: Multiple VPC Networks

VPC 是虛擬私有雲 (Virtual Private Cloud) 的縮寫。

建立 managementnet 網路

點擊導覽 > [VPC 網路] > [VPC 網路]。

Lab 中已經建立了 default 與 mynetwork 兩個網路及子網路。

點擊 [建立虛擬私人雲端網路],命名為 managementnet

子網路建立模式選擇 [自訂],命名為 managementnet-us,區域 (Zone) 選擇 us-central1,IP 位址範圍則定義成 10.130.0.0/20。點擊 [完成] 。

點擊 [對等指令列 (Command Line)],可以查看如何透過 Cloud Shell 完成同樣的設定。

gcloud compute networks create managementnet --project=qwiklabs-gcp-00-2612f83e7f96 --subnet-mode=custom --mtu=1460 --bgp-routing-mode=regional

gcloud compute networks subnets create managementnet-us --project=qwiklabs-gcp-00-2612f83e7f96 --range=10.130.0.0/20 --network=managementnet --region=us-central1

gcloud compute networks subnets create NAME --project=qwiklabs-gcp-00-2612f83e7f96 --range=IP_RANGE --network=managementnet --region=REGION

建立 privatenet 網路

執行以下指令建立 privatenet 網路。

gcloud compute networks create privatenet --subnet-mode=custom

gcloud compute networks subnets create privatesubnet-us --network=privatenet --region=us-central1 --range=172.16.0.0/24

gcloud compute networks subnets create privatesubnet-eu --network=privatenet --region=europe-west4 --range=172.20.0.0/20

執行以下指令檢視目前的網路。

gcloud compute networks list

# 結果
NAME           SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
default        AUTO         REGIONAL
managementnet  CUSTOM       REGIONAL
mynetwork      AUTO         REGIONAL
privatenet     CUSTOM       REGIONAL

自動模式會自動於每一地區中建立子網路 (subnets),自訂模式預設不會建立子網路,因此可以自行指定子網路的地區。

執行以下指令檢視子網路。

gcloud compute networks subnets list --sort-by=NETWORK

檢視子網路時,會發現 defaultmynetwork 在各個地區都建立了子網路。

替 managementnet 建立防火牆規則

managementnet 上的 VM 實體建立 SSH、ICMP 與 RDP 流入流量的防火牆規則。

點擊導覽 > [VPC 網路] > [防火牆 (Firewall)]。點擊 [建立防火牆規則],並根據以下規則建立:

屬性
名稱
Name
managementnet-allow-icmp-ssh-rdp
網路
Network
managementnet
目標
Targets
網路中的所有執行個體
All instances in the network
來源篩選器
Source filter
IP 範圍
IP Ranges
來源 IP 範圍
Source IP ranges
0.0.0.0/0
通訊協定和埠
Protocols and ports
TCP: 22, 3389
其他通訊協定:  icmp

點擊 [對等指令列],查看 Cloud Shell 指令。

gcloud compute --project=qwiklabs-gcp-00-2612f83e7f96 firewall-rules create managementnet-allow-icmp-ssh-rdp --direction=INGRESS --priority=1000 --network=managementnet --action=ALLOW --rules=tcp:22,tcp:389,icmp --source-ranges=0.0.0.0/0

替 privatenet 建立防火牆規則

gcloud compute firewall-rules create privatenet-allow-icmp-ssh-rdp --direction=INGRESS --priority=1000 --network=privatenet --action=ALLOW --rules=icmp,tcp:22,tcp:3389 --source-ranges=0.0.0.0/0

執行以下指令檢視所有防火牆規則。

gcloud compute firewall-rules list --sort-by=NETWORK

建立 VM 執行個體

建立 managementnet-us-vm 執行個體

點擊導覽 > [Compute Engine[ > [VM 執行個體]。

點擊 [建立執行個體],按照 Lab 的指示選擇主機規格。

點擊 [管理、安全性、磁碟、網路、單獨租用 (Management, security, disks, networking, sole tenancy)],選擇 [網路 (Networking)] 分頁。

編輯 [網路介面 (Network interfaces)],選擇 managementnet 作為網路 (Network),選擇 managementsubnet-us 作為子網路 (Subnetwork)。

點擊 [對等指令列],檢視 Cloud Shell 指令。

gcloud beta compute --project=qwiklabs-gcp-00-2612f83e7f96 \
	instances create managementnet-us-vm \
    --zone=us-central1-f \
    --machine-type=f1-micro \
    --subnet=managementsubnet-us \
    --network-tier=PREMIUM \
    --maintenance-policy=MIGRATE \
    --service-account={{SERVICE_ACCOUNT}} \
    --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append \
    --image=debian-10-buster-v20210609 \
    --image-project=debian-cloud \
    --boot-disk-size=10GB \
    --boot-disk-type=pd-balanced \
    --boot-disk-device-name=managementnet-us-vm \
    --no-shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring \
    --reservation-affinity=any

點擊 [建立],建立執行個體。

建立 privatenet-us-vm 執行個體

gcloud compute instances create privatenet-us-vm \
	--zone=us-central1-f \
    --machine-type=n1-standard-1 \
    --subnet=privatesubnet-us

檢視目前所有執行個體。

gcloud compute instances list --sort-by=ZONE

會得出以下結果:

NAME                 ZONE            MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
mynet-eu-vm          europe-west4-c  n1-standard-1               10.164.0.2   xx.xx.xxx.xxx   RUNNING
managementnet-us-vm  us-central1-f   f1-micro                    10.130.0.2   xx.xxx.xxx.xx   RUNNING
mynet-us-vm          us-central1-f   n1-standard-1               10.128.0.2   xx.xxx.xxx.xxx  RUNNING
privatenet-us-vm     us-central1-f   n1-standard-1               172.16.0.2   xx.xxx.xxx.xx   RUNNING

總共有 4 個實體 (mynet-eu-vmmynet-us-vm 是 Lab 預設建立的),分別位於 2 個不同區域與三個不同的 VPC 網路 (managementnetmynetworkprivatenet) 中。

偵測執行個體間的連線能力

偵測外部 IP 連線

點擊 mynet-us-vm 的 [SSH] 按鈕,建立 SSH 連線。

執行以下指令,測試是否可以連線到 mynet-eu-vm 執行個體。

ping -c 3 {{mynet-eu-vm External IP}}

正常執行下,會回傳以下結果:

PING xx.xx.xxx.xxx (xx.xx.xxx.xxx) 56(84) bytes of data.
64 bytes from xx.xx.xxx.xxx: icmp_seq=1 ttl=51 time=113 ms
64 bytes from xx.xx.xxx.xxx: icmp_seq=2 ttl=51 time=113 ms
64 bytes from xx.xx.xxx.xxx: icmp_seq=3 ttl=51 time=113 ms

--- xx.xx.xxx.xxx ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms

同樣的指令測試 managementnet-us-vmprivatenet-us-vm 應該都能正常執行。

偵測內部 IP 連線

ping -c 3 {{mynet-eu-vm Internal IP}}

一樣透過 ping 指令偵測,只是將 IP 改為內部 IP,會得出以下節果:

PING 10.164.0.2 (10.164.0.2) 56(84) bytes of data.
64 bytes from 10.164.0.2: icmp_seq=1 ttl=64 time=110 ms
64 bytes from 10.164.0.2: icmp_seq=2 ttl=64 time=109 ms
64 bytes from 10.164.0.2: icmp_seq=3 ttl=64 time=109 ms

--- 10.164.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 109.469/109.982/110.977/0.703 ms

如果改為其他兩個執行個體的內部 IP,則會回傳 100% pack loss,這是因為位處於不同的網路 (與區域無關,與網路有關)。

建立多網路介面的 VM 執行個體

按照建立 managementnet-us-vm 執行個體的步驟,建立 vm-appliance 執行個體,在 [管理、安全性、磁碟、網路、單獨租用 (Management, security, disks, networking, sole tenancy)] 的 [網路 (Networking)] 中,將網路 default 改為 privatenet

接著,選擇 [新增「網路介面」(Add network interface)],新增 managementnetmynetwork

檢視網路介面詳情

在 VM 執行個體列表中,點選 vm-appliance 內部 IP 中的 [nic0],檢視網路介面詳情資料。

點擊網路介面詳情資料中的 nic0,切換為 nic1,檢視在 managementnet 的組態,切換 nic2 則是 mynetwork

透過 SSH 存取 vm-appliance

sudo ifconfig	
ens4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 172.16.0.3  netmask 255.255.255.255  broadcast 172.16.0.3
        inet6 fe80::4001:acff:fe10:3  prefixlen 64  scopeid 0x20<link>
        ether 42:01:ac:10:00:03  txqueuelen 1000  (Ethernet)
        RX packets 481  bytes 112315 (109.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 468  bytes 49450 (48.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 10.130.0.3  netmask 255.255.255.255  broadcast 10.130.0.3
        inet6 fe80::4001:aff:fe82:3  prefixlen 64  scopeid 0x20<link>
        ether 42:01:0a:82:00:03  txqueuelen 1000  (Ethernet)
        RX packets 5  bytes 2362 (2.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 15  bytes 2234 (2.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 10.128.0.3  netmask 255.255.255.255  broadcast 10.128.0.3
        inet6 fe80::4001:aff:fe80:3  prefixlen 64  scopeid 0x20<link>
        ether 42:01:0a:80:00:03  txqueuelen 1000  (Ethernet)
        RX packets 17  bytes 3250 (3.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 15  bytes 2234 (2.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

接著執行 ip route 檢視會透過哪個網路進行路由傳送。

ip route
default via 172.16.0.1 dev ens4
10.128.0.0/20 via 10.128.0.1 dev ens6
10.128.0.1 dev ens6 scope link
10.130.0.0/20 via 10.130.0.1 dev ens5
10.130.0.1 dev ens5 scope link
172.16.0.0/24 via 172.16.0.1 dev ens4
172.16.0.1 dev ens4 scope link

第二個指令中,看到當我們透過介面 ens4 連接時,會透過 174.16.0.1 進行路由傳送。預設是透過 ens4 介面連接。由於 mynetwork-eu-vm 並不在 IP 範圍中,因此無法進行連線。

Eric Chuang
Eric Chuang

正職是廣告行銷人員,因為 Google Tag Manager 的關係開始踏入網站製作的領域,進一步把 WordPress 當成 PHP + HTML + CSS + JavaScript 的學習教材。此外,因為工作的關係,曾經用 Automattic 的 Underscores (_s) 替客戶與公司官網進行全客製化佈景主題開發。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料