GCP - 多個虛擬私人網路

概述

在本教程中, 你將建立幾個 VPC 網路 以及 VM instances, 並且測試這些網路間的連接。 更準確的說, 你將建立兩個客製化模式的網路 (management 以及 privatenet), 以及各自的防火牆規則跟 VM instances, 如下圖所示:

mynetwork 網路以及它的防火牆規則跟 VM instances (mynet-eu-vm 以及 mynet-us-vm) 在本教程的專案中已經被建立了


目標

在本教程中, 你將會學習到如何完成以下任務

  • 建立一個客製化模式的 VPC 網路以及它的防火牆規則
  • 使用 Compute Engine 建立 VM instances
  • 在不同的 VPC 網路間, 探索 VM instances 之間的連接
  • 使用多重網路介面建立 VM instance




設定及要求

在你按下 Start Lab 按鈕之前

詳讀所有的教學。Labs 是有時間限制的,而且你不可以停止時間倒數。倒數計時器在你按下 Start Lab 按鈕後開始倒數,上面顯示的時間為你還能使用 Cloud 資源的時間。

Qwiklabs 的手把手環境,讓你可以在真實環境中來操作進行 Qwiklabs 上提供的課程,而不是在一個模擬或是展示的環境。我們透過提供你一個全新的、暫時的帳號密碼,在計時器歸零之前,你可以用來登入並存取 Google Cloud Platform。

你需要什麼?

要完成這個 lab ,你需要:

  • 一個一般的網路瀏覽器(推薦 Chrome)
  • 完成這個 lab 的時間

備註: 如果你已經有你自己的個人 GCP 帳號或專案,請不要使用在這一個 lab

現在你已經開始你的 lab, 你將會登入 Google Cloud Shell 主控台,然後開啟命令列工具

如何開始你的 lab ,然後登入 Console?

  • 按下 Start Lab 按鈕。如果你需要付費,會有一個彈出視窗來讓你選擇付費的方式。在左方你會看到一個面板,上面有暫時的帳號密碼,你必須使用這些帳號密碼在此次 lab

  • 複製 username , 然後點擊 Open Google Console。 Lab 會開啟另外一個視窗,顯示選擇帳號的頁面

tip: 開啟一個全新的視窗,然後跟原本的頁面並排

  • 選擇帳號頁面, 點擊 Use Another Account

  • 登入頁面開啟,貼上之前複製的 username 以及 password ,然後貼上

重要:必須使用之前於 Connection Details 面板 取得的帳號密碼,不要使用你自己的 Qwiklabs 帳號密碼。 如果你有自己的 GCP 帳號,請不要用在這裡(避免產生費用)

  • 點擊並通過接下來的頁面:
    • 接受terms以及conditions
    • 不要增加recovery optoinstwo factor authentication (因為這只是一個臨時帳號)
    • 不要註冊免費體驗

稍待一些時候, GCP 控制台將會在這個視窗開啟。

注意:按下左上方位於Google Cloud Platform 隔壁的 Navigation menu ,你可以瀏覽選單,裡面有一系列的 GCP 產品以及服務


啟動 Google Cloud Shell

Google Cloud Shell 是載有開發工具的虛擬機器。它提供了5GB的 home 資料夾,並且運行在 Google Cloud 上。 Google Cloud Shell 讓你可以利用 command-line 存取 GCP 資源

  • GCP 控制台 ,右上的工具列,點擊 Open Cloud Shell 按鈕

  • 在打開的對話框裡,按下 START CLOUD SHELL:

你可以立即按下 START CLOUD SHELL 當對話視窗打開。

連結並提供環境會需要一點時間。當你連結成功,這代表你已成功獲得授權,且此專案已被設為你的專案ID,例如:

gcloudGoogle Cloud Platform 的 command-line 工具,他已事先被安裝在 Cloud Shell 並且支援自動補齊

使用這個 command ,你可以列出有效帳戶名稱:

gcloud auth list

輸出:

Credentialed accounts:
- <myaccount>@<mydomain>.com (active)

範例輸出:

Credentialed accounts:
- google1623327_student@qwiklabs.net

你可以使用以下 command 來列出專案 ID

gcloud config list project

輸出:

[core]
project = <project_ID>

範例輸出:

[core]
project = qwiklabs-gcp-44776a13dea667a6

gcloud 的完整文件可以參閱 Google Cloud gcloud Overview




建立客製化模式的 VPC 網路以及防火牆規則

建立兩個客製網路 managementnet 以及 privatenet, 以及防火牆規則允許 SSH, ICMP, 以及 RDP 流量進入

建立 managementnet 網路

使用 GCP Console 建立 managementnet 網路

  • 在 Console 內, 到 Navigation menu > VPC network > VPC networks

  • 注意到 default 以及 mynetwork 網路以及它們的子網路
    每一個 GCP 專案都會有一個 default 網路。 另外, mynetwork 網路已經被事先建立, 如同上面的網路圖表呈現。

  • 點擊 Create VPC Network
  • Name 設為 managementnet
  • Subnet creation mode, 點擊 Custom
  • 做如下設定, 其餘留為預設

  • 點擊 Done

  • 點擊 command line

這些指令顯示網路以及子網路是可以使用 Cloud Shell 指令來建立的。 你將使用這些指令以及類似的參數來建立與設定 privatenet 網路

  • 點擊 Close
  • 點擊 Create
    測試進度
    點擊 Check my progress 來確認目前的進度。如果你已經成功建立 managementnet 網路, 你將獲得一個評價分數。


建立 privatenet 網路

使用 Cloud Shell 指令來建立 privatenet 網路:

  • 執行以下指令來建立 privatenet 網路

    gcloud compute networks create privatenet --subnet-mode=custom
  • 執行以下指令來建立 privatesubnet-us 子網路:

    gcloud compute networks subnets create privatesubnet-us --network=privatenet --region=us-central1 --range=172.16.0.0/24
  • 執行以下指令來建立 privatesubnet-eu 子網路

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

測試進度
點擊 Check my progress 來確認目前的進度。如果你已經成功建立 privatenet 網路, 你將獲得一個評價分數。

  • 執行以下指令來列出可用的 VPC 網路:
    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

default 以及 mynetwork 屬於自動模式的網路, 而 managementnet 以及 privatenet 屬於客製化模式網路。 自動模式網路會自動地在某一個 region 建立子網路, 而客製化模式剛建立時是沒有子網路的, 你有著子網路建立的所有控制權

  • 執行以下指令來列出可用的 VPC 子網路(由 VPC 網路分類)
    gcloud compute networks subnets list --sort-by=NETWORK

輸出類似如下 (不要複製; 這個只是範例輸出):

NAME                REGION                   NETWORK        RANGE
default asia-northeast1 default 10.146.0.0/20
default us-west1 default 10.138.0.0/20
default southamerica-east1 default 10.158.0.0/20
default europe-west4 default 10.164.0.0/20
default asia-east1 default 10.140.0.0/20
default europe-north1 default 10.166.0.0/20
default asia-southeast1 default 10.148.0.0/20
default us-east4 default 10.150.0.0/20
default europe-west1 default 10.132.0.0/20
default europe-west2 default 10.154.0.0/20
default europe-west3 default 10.156.0.0/20
default australia-southeast1 default 10.152.0.0/20
default asia-south1 default 10.160.0.0/20
default us-east1 default 10.142.0.0/20
default us-central1 default 10.128.0.0/20
default northamerica-northeast1 default 10.162.0.0/20
managementsubnet-us us-central1 managementnet 10.130.0.0/20
mynetwork asia-northeast1 mynetwork 10.146.0.0/20
mynetwork us-west1 mynetwork 10.138.0.0/20
mynetwork southamerica-east1 mynetwork 10.158.0.0/20
mynetwork europe-west4 mynetwork 10.164.0.0/20
mynetwork asia-east1 mynetwork 10.140.0.0/20
mynetwork europe-north1 mynetwork 10.166.0.0/20
mynetwork asia-southeast1 mynetwork 10.148.0.0/20
mynetwork us-east4 mynetwork 10.150.0.0/20
mynetwork europe-west1 mynetwork 10.132.0.0/20
mynetwork europe-west2 mynetwork 10.154.0.0/20
mynetwork europe-west3 mynetwork 10.156.0.0/20
mynetwork australia-southeast1 mynetwork 10.152.0.0/20
mynetwork asia-south1 mynetwork 10.160.0.0/20
mynetwork us-east1 mynetwork 10.142.0.0/20
mynetwork us-central1 mynetwork 10.128.0.0/20
mynetwork northamerica-northeast1 mynetwork 10.162.0.0/20
privatesubnet-eu europe-west1 privatenet 172.20.0.0/20
privatesubnet-us us-central1 privatenet 172.16.0.0/24

如預期般, default 以及 mynetwork 網路在 每一個 region 都有各自的子網路, 因為它們是屬於自動模式網路。 managementnet 以及 priavtenet 網路唯有當你有建立時, 它們才會有子網路, 因為它們是屬於客製化模式網路。

  • 在控制台, 到 Navigation menu > VPC network > VPC networks
  • 你可以看到一樣的網路以及子網路被列在控制台中


建立 managementnet 的防火牆規則

建立防火牆規則來允許 SSH, ICMP, 以及 RDP 流量進入到 managementnet 網路中的 VM instances

  • 在控制台, 到 Navigation menu > VPC network > Firewall rules
  • 點擊 + Create Firewall Rule
  • 做如下設定, 其餘留為預設

請務必確認 Source IP ranges 後面有包含 /0 已指定所有網路

  • 點擊 command line
    這些指令顯示防火牆規則是可以使用 Cloud Shell 指令來建立的。 你將使用這些指令以及類似的參數來建立與設定 privatenet 的防火牆規則
  • 點擊 Close
  • 點擊 Create

測試進度
點擊 Check my progress 來確認目前的進度。如果你已經成功建立 managementnet 的防火牆規則, 你將獲得一個評價分數。


建立 privatenet 的防火牆規則

使用 Cloud Shell 指令來建立 privatenet 網路的防火牆規則

  • 在 Cloud Shell 中, 執行以下指令來建立 privatenet-allow-icmp-ssh-rdp 防火牆規則
    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

輸出類似如下 (不要複製; 這個只是範例輸出):

NAME                           NETWORK     DIRECTION  PRIORITY  ALLOW                 DENY
privatenet-allow-icmp-ssh-rdp privatenet INGRESS 1000 icmp,tcp:22,tcp:3389

測試進度
點擊 Check my progress 來確認目前的進度。如果你已經成功建立 privatenet 網路的防火牆規則, 你將獲得一個評價分數。

  • 執行以下指令來列出所有的防火牆規則 (依 VPC 網路分類)
    gcloud compute firewall-rules list --sort-by=NETWORK

輸出類似如下 (不要複製; 這個只是範例輸出):

NAME                              NETWORK        DIRECTION  PRIORITY  ALLOW                         DENY
default-allow-icmp default INGRESS 65534 icmp
default-allow-internal default INGRESS 65534 tcp:0-65535,udp:0-65535,icmp
default-allow-rdp default INGRESS 65534 tcp:3389
default-allow-ssh default INGRESS 65534 tcp:22
managementnet-allow-icmp-ssh-rdp managementnet INGRESS 1000 icmp,tcp:22,tcp:3389
mynetwork-allow-icmp mynetwork INGRESS 1000 icmp
mynetwork-allow-rdp mynetwork INGRESS 1000 tcp:3389
mynetwork-allow-ssh mynetwork INGRESS 1000 tcp:22
privatenet-allow-icmp-ssh-rdp privatenet INGRESS 1000 icmp,tcp:22,tcp:3389

mynetwork 的防火牆規則已經被建立好了。 你可以在一個防火牆規則中定義多個協定以及 port (privatenet 以及 managementnet), 或是分別用多條規則來定義 (default 以及 mynetwork)

  • 在主控台中, 到 Navigation menu > VPC network > Firewall rules
  • 你可以看到同樣的防火牆規則被列在主控台




建立 VM instances

建立兩個 VM instances:

  • managementsubnet-us 中, managementnet-us-vm
  • privatesubnet-us 中, privatenet-us-vm


建立 management-us-vm instance

使用 GCP 主控台來建立 management-us-vm instance

  • 在主控台中, 到 Navigation menu > Compute Engine > VM instances
    如同上面的圖表顯示的一樣, mynet-eu-vm 以及 mynet-us-vm 已經被建立好了

  • 點擊 Create instance

  • 做如下設定, 其餘留為預設

  • 點擊 Management, disks, networking, SSH keys

  • 點擊 Networking
  • 點擊鉛筆的圖案來編輯 Network interfaces
  • 做如下設定, 其餘留為預設

  • 點擊 Done

  • 點擊 command line
    這些指令顯示 VM instances 是可以使用 Cloud Shell 指令來建立的。 你將使用這些指令以及類似的參數來建立與設定 privatenet-us-vm 的防火牆規則

    gcloud beta compute --project=qwiklabs-gcp-03-2779af1ddf93 instances create managementnet-us-vm --zone=us-central1-c --machine-type=f1-micro --subnet=managementsubnet-us --network-tier=PREMIUM --maintenance-policy=MIGRATE --service-account=357292195316-compute@developer.gserviceaccount.com --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-9-stretch-v20200210 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-standard --boot-disk-device-name=managementnet-us-vm --reservation-affinity=any
  • 點擊 Close

  • 點擊 Create

測試進度
點擊 Check my progress 來確認目前的進度。如果你已經成功在 managementnet 網路建立 VM instance, 你將獲得一個評價分數。


建立 privatenet-us-vm instance

使用 Cloud Shell 指令來建立 privatenet-us-vm instance

  • 在 Cloud Shell 中, 執行以下指令來建立 privatenet-us-vm instance
    gcloud compute instances create privatenet-us-vm --zone=us-central1-c --machine-type=n1-standard-1 --subnet=privatesubnet-us

輸出類似如下 (不要複製; 這個只是範例輸出):

NAME              ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
privatenet-us-vm us-central1-c n1-standard-1 172.16.0.2 35.184.221.40 RUNNING

測試進度
點擊 Check my progress 來確認目前的進度。如果你已經成功在 privatenet 網路建立 VM instance, 你將獲得一個評價分數。

  • 執行以下指令來列出所有的 VM instances (依 zone 分類)
    gcloud compute instances list --sort-by=zone

輸出類似如下 (不要複製; 這個只是範例輸出):

NAME                 ZONE            MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
mynet-eu-vm europe-west1-c n1-standard-1 10.132.0.2 35.205.124.164 RUNNING
managementnet-us-vm us-central1-c n1-standard-1 10.130.0.2 35.226.20.87 RUNNING
mynet-us-vm us-central1-c n1-standard-1 10.128.0.2 35.232.252.86 RUNNING
privatenet-us-vm us-central1-c n1-standard-1 172.16.0.2 35.184.221.40 RUNNING

  • 在主控台, 到 Navigation menu > Compute Engine > VM instance
  • 你可以看到 VM instances 被列在主控台
  • 點擊 Columns, 然後選擇 Network
    可以看到在 us-central-c 有 3 台 instances, 而在 europe-west1-c 有 1 台 instance 。 然而, 這些 instances 橫跨了三個 VPC 網路 (managementnet, mynetwork 以及 privatenet), 沒有任何一台 instance 是同一個 zone 又同一個網路的。 在下一節中, 你將探索這在內部連線中的影響。




探索不同 VM instances 之間的連線

探索不同 VM instances 之間的連線。 更準確的說, 確定當 VM instances 在同一個 zone 的影響, 以及當他們在同一個 VPC 網路的影響


Ping 外部 IP 位址

藉由 ping VM instances 的外部 IP 位址來確定它們是否可以在公開網路被觸及到。

  • 在控制台, 到 Navigation menu > Compute Engine > VM instances
  • 檢視 mynet-eu-vm, managementnet-us-vm, 以及 privatenet-us-vm 的外部 IP 位址
  • 點擊 mynet-us-vmSSH 來啟動一個終端機連線
  • 執行以下指令, 將 mynet-eu-vm 替換成外部 IP, 藉此測試 mynet-eu-vm 的外部 IP 連線
    ping -c 3 <Enter mynet-eu-vm's external IP here>

這應該要可以通過

  • 執行以下指令, 將 managementnet-us-vm 替換成外部 IP, 藉此測試 managementnet-us-vm 的外部 IP 連線
    ping -c 3 <Enter managementnet-us-vm's external IP here>

這應該也要可以通過

  • 執行以下指令, 將 privatenet-us-vm 替換成外部 IP, 藉此測試 privatenet-us-vm 的外部 IP 連線
    ping -c 3 <Enter privatenet-us-vm's external IP here>

這應該也要可以通過

你可以通過 VM instances 的外部 IP 位址來 ping 到機器, 儘管他們處於不同的 zone 或是 VPC 網路。 這確認了一件事, 那就是公開網路存取只會由早先建立的 ICMP 防火牆規則所控制


Ping 內部 IP 位址

透過 ping VM instances 的內部 IP 位址來確定在同一個 VPC 網路中的 instances 是否可以互相觸及對方

  • 在控制台, 到 Navigation menu > Compute Engine > VM instances
  • 檢視 mynet-eu-vm, managementnet-us-vm, 以及 privatenet-us-vm 的內部 IP 位址
  • 點擊 mynet-us-vmSSH 來啟動一個終端機連線

  • 執行以下指令, 將 mynet-eu-vm 替換成內部 IP, 藉此測試 mynet-eu-vm 的內部 IP 連線

    ping -c 3 <Enter mynet-eu-vm's internal IP here>

你可以經由 mynet-eu-vm 的內部 IP 位址 ping 到它, 因為它與 ping 的來源機器 (mynet-us-vm) 處於同一個 VPC 網路, 儘管兩台 VM instances 在不同的 zones, regions, 以及 continents

  • 執行以下指令, 將 managementnet-us-vm 替換成內部 IP, 藉此測試 managementnet-us-vm 的內部 IP 連線
    ping -c 3 <Enter managementnet-us-vm's external IP here>

這應該不能通過, 如同資料顯示, 封包 100% 遺失

  • 執行以下指令, 將 privatenet-us-vm 替換成內部 IP, 藉此測試 privatenet-us-vm 的內部 IP 連線
    ping -c 3 <Enter privatenet-us-vm's external IP here>

這應該也無法通過, 如同回饋顯示, 封包 100% 丟失了! 你無法經由 managementnet-us-vm 以及 privatenet-us-vm 的內部 IP 位址來 ping 到對方, 因為它們與來源機器 (mynet-us-vm) 的 VPC 網路不同, 儘管他們都處於同一個 zone us-central1

VPC 網路預設上是獨立的私人網路 domains 。 然而, 除非你有設定一些機制, 像是 VPC peering 或是 VPN, 否則, 網路之間是不允許內部 IP 位址來互相通信的。




建立有著多重網路介面的 VM instances

每一台 VPC 網路內的 instance 都會有一個預設的網路介面。 你可以建立額外的網路介面, 然後附加到你的 VM 上。 多重網路介面可以讓你建立一個設定, 這個設定可以讓一台 instance 直接的連接到多個 VPC 網路 (最多八台 instances, 取決於 instance 的類型)


建立有著多重網路介面的 VM instances

建立一台名為 vm-appliance 的 instance, 這台 instance 會在 privatesubnet-us, managementsubnet-us, 以及 mynetwork 這些網路介面中。 這些子網路的 CIDR 範圍不可互相重疊, 這是建立一台有著多重網路介面控制器 (NICs) 的 VM 的要求之一。

  • 在控制台, 到 Navigation menu > Compute Engine > VM instance
  • 點擊 Create instance
  • 做如下設定, 其餘留為預設

一台機器允許的介面數量取決於機器類型以及 VCPUs 的數量。 n1-standard-4 允許最多 4 個網路介面。 更多資訊可以參考這裏

  • 點擊 Management, disks, networking, SSH keys
  • 點擊 Networking
  • 點擊鉛筆圖案編輯 Network interfaces
  • 做如下設定, 其餘留為預設

  • 點擊 Done

  • 點擊 Add network interface
  • 做如下設定, 其餘留為預設

  • 點擊 Done

  • 點擊 Add network interface
  • 做如下設定, 其餘留為預設

  • 點擊 Done

  • 點擊 Create

測試進度
點擊 Check my progress 來確認目前的進度。如果你已經成功建立多網路介面的 VM, 你將獲得一個評價分數。


探索多網路介面細節

在主控台以及 VM’s 終端機探索 vm-appliance 的多網路介面細節

  • 在主控台, 到 Navigation menu > Compute Engine > VM instances
  • 點擊 vm-applianceInternal IPnic0 來打開 Network interface details 頁面
  • 確認 nic0 有被附加到 privatesubnet-us, 在子網路 (172.16.0.0/24) 中有被分配一組內部 IP, 以及已有生效的防火牆規則
  • 點擊 nic0, 選擇 nic1
  • 確認 nic1 有被附加到 managementsubnet-us, 在子網路 (10.130.0.0/20) 中有被分配一組內部 IP, 以及已有生效的防火牆規則
  • 點擊 nic1, 選擇 nic2
  • 確認 nic2 有被附加到 mynetwork, 在子網路 (10.128.0.0/20) 中有被分配一組內部 IP, 以及已有生效的防火牆規則
    每一個網路介面有它們自己的內部 IP 位址, 所以 VM instance 可以與他們溝通

  • 在控制台, 到 Navigation menu > Compute Engine > VM instances

  • 點擊 SSH 啟動 vm-appliance 的終端連線
  • 執行以下指令來列出 VM instance 的網路介面
    sudo ifconfig

輸出類似如下 (不要複製; 這個只是範例輸出):

eth0: 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 626 bytes 171556 (167.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 568 bytes 62294 (60.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: 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 7 bytes 1222 (1.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17 bytes 1842 (1.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth2: 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 2014 (1.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17 bytes 1862 (1.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

sudo ifconfig 這個指令列出了 Linux VM 的網路介面以及這些介面的內部 IP


探索網路介面的連線

我們可以藉由 ping 這些子網路來演示一下 vm-appliance 是與 privatesubnet-us, managementsubnet-us 以及 mynetwork 互相連接的

  • 在主控台, 到 Navigation menu > Compute Engine > VM instances
  • 注意一下 privatenet-us-vm, managementnet-us-vm, mynet-us-vm, 以及 my-eu-vm 的內部 IP 位址
  • 回到 vm-applianceSSH 終端機
  • 執行以下指令, 將 privatenet-us-vm 替換成內部 IP, 藉此測試 privatenet-us-vm 的內部 IP 連線
    ping -c 3 <Enter privatenet-us-vm's internal IP here>

這是可以連到的!

  • 重複以上步驟, 執行以下指令
    ping -c 3 privatenet-us-vm

你可以 ping 到 privatenet-us-vm 的 name, 因為 VPC 網路有內部 DNS 服務, 這個服務讓我們可以透過 DNS name 來連接到機器, 而不用透過 IP 位址。

  • 執行以下指令, 將 managementnet-us-vm 替換成內部 IP, 藉此測試 managementnet-us-vm 的內部 IP 連線
    ping -c 3 <Enter managementnet-us-vm's internal IP here>

這是可以連到的!

  • 執行以下指令, 將 mynet-us-vm 替換成內部 IP, 藉此測試 mynet-us-vm 的內部 IP 連線
    ping -c 3 <Enter mynet-us-vm's internal IP here>

這是可以連到的!

  • 執行以下指令, 將 mynet-eu-vm 替換成內部 IP, 藉此測試 mynet-eu-vm 的內部 IP 連線
    ping -c 3 <Enter mynet-eu-vm's internal IP here>

這個無法連到! 再多網路介面 instance 中, 每一個介面都會有一個可以連到它們所在的子網路的路由。 再者, instance 只會有一個預設路由, 這個路由與主要介面 eth0 相關聯。 除非手動設置, 否則任何離開這個 instance 的流量, 不管目的地是哪, 只要不是透過直接連接的子網路, 都將經由這個預設的路由離開。

  • 執行以下指令來列出 vm-appliance 的所有路由
    ip route

輸出類似如下 (不要複製; 這個只是範例輸出):

default via 172.16.0.1 dev eth0
10.128.0.0/20 via 10.128.0.1 dev eth2
10.128.0.1 dev eth2 scope link
10.130.0.0/20 via 10.130.0.1 dev eth1
10.130.0.1 dev eth1 scope link
172.16.0.0/24 via 172.16.0.1 dev eth0
172.16.0.1 dev eth0 scope link

主要介面 etho 有其預設路由 (預設經由 172.16.0.1 dev eth0), 以及所有三個介面 eth0, eth1, eth2 都有通往其各自子網路的路由。 因為 mynet-eu-vm (10.132.0.0/20) 的子網路並沒有被包含在這台 instance 的路由表中, 當我們 ping 這台機器時, 請求會離開 eth0 的 vm-appliance** (這是在一個不同的 VPC 網路)。 你可以設置政策路由來變更這個行為, 可參考文件




恭喜

你已經完成本教程!




Questions And Answers

  • 解釋以下 GCP command

    • command:

      gcloud compute networks create privatenet --subnet-mode=custom
    • Answer:

      • 建立一個 GCP network
      • 子網路的模式為, custom
  • 解釋以下 GCP command

    • command:

      gcloud compute network subnets create privatesubnet-eu --network=privatenet --region=europe-west1 --range=172.20.0.0/20
    • Answer:

      • 建立一個 GCP 子網路
      • 上層網路的名稱為 privatenet
      • 地區為 europe-west1
      • 確切網域範圍為 172.20.0.0/20
  • 解釋以下 GCP command

    • command:

      gcloud compute networks list
    • Answer:
      列出所有網路, 不包含子網路

  • 解釋以下 GCP command

    • command:

      gcloud compute networks create privatenet --subnet-mode=custom
    • Answer:

      • 建立一個 GCP network
      • 子網路的模式為, custom
  • 以下的 GCP Command 中, –subnet-mode 預設為 auto 還是 custom?

    • Example:

      gcloud compute networks create privatenet --subnet-mode=custom
    • Answer:
      auto

  • 解釋以下 GCP command

    • Command:

      gcloud compute networks subnets list --sort-by=NETWORK
    • Answer:

      • 列出所有 subnets
      • 以 network 排列
  • 解釋以下 GCP command

    • Command:

      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
    • Answer:

      • 建立一個 firewall-rules
      • 名稱為 *privatenet-allow-icmp-ssh-rdp
      • 方向為 INGRESS, 即外到內
      • –priority 為優先性, 數字介於 0 ~ 65535, 數字越小優先性越高
      • –action 為 ALLOW, 也可設為 DENY
      • –rules 為規則, 可設定多種協議
      • –source-ranges 為此 rule 作用到的來源 IP 範圍, 預設為 0.0.0.0/0, 即全部
  • 解釋以下 GCP command

    • Command:

      gcloud compute firewall-rules list --sort-by=NETWORK
    • Answer:

      • 列出所有的 firewall-rules
      • NETWORK
  • 解釋以下 GCP command

    • Command:

      gcloud compute instances create privatenet-us-vm \
      --zone=us-central1-c \
      --machine-type=n1-standard-1 \
      --subnet=privatesubnet-us
    • Answer:

      • 建立一台 vm, 名為 privatenet-us-vm
      • 將該 vm 掛在 privatesubnet-us 這個子網路下
  • 解釋以下 GCP command

    • Command:

      gcloud compute instances list --sort-by=zone
    • Answer:

      • 列出所有 instances
      • 以 zone 排列
  • 假如我有三台 VM, 分別位於不同的子網路下, 在不考慮防火牆的因素下, 我可以經由各自的 External IP ping 到對方嗎
    可以
  • 假如我有兩台 VM, 分別位於 GCP 不同的子網路, 但相同的 network 下, region 跟 zone 都不同的情況下, 在不考慮防火牆的因素下, 我可以經由各自的 Internal IP ping 到對方嗎
    可以
  • GCP VM Instances 當中, NIC 的上限是多少?
    8 個
  • GCP VM Instances 當中, 如果 vCPU 的數量不超過 2, 則 NIC 的數量限制為多少?
    2 個
  • GCP VM Instances 當中, 如果 vCPU 的數量超過 2, 則每多一個 CPU, 可以提高幾個 NIC 上限?
    1 個
Configure a Pod to Use a ConfigMap <未完成> 命令行的藝術

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×