Google Code Prettify

2023年1月10日 星期二

GCP: Configuring Networks via gcloud

 準備環境

開啟 Cloud Shell,看一下它是什麼 OS ?

cat /etc/os-release

看來是 Debian,因為這篇是要設定網路組態,需要用到 ping 指令,先執行如下指令安裝:

sudo apt install iputils-ping
進入主題前,先了解以下基本觀念:
  1. VPC (Virtual Private Cloud) 在 GCP 中是彼此隔離的。

  2. 每個 Google Cloud project 建立時,系統會自動建立一個預設的 subnet 網路。

Create network

  • 基礎觀念

  1. VPC 分兩種模式 (mode): auto、custom。

  2. 在同一個 project 裡,VPC 名稱不能重複。

  3. 每個 project 可以有四個 VPC

  • 建立 network

建立一個 custom 模式的網路,指令如下,網路命名為 labnet。

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

上面的指令說明如下:

  1. gcloud: 調用 Cloud SDK 裡的 gcloud 命令

  2. compute: gcloud 指令集之一

  3. network: compute 的指令集之一

  4. create: 執行的動作

  5. labnet: 網路名稱

  6. --subnet-mode=custom: 指定要建立的網路模式為 custom

點選 Google Cloud Console 左邊選單「網路 > 虛擬私有雲網路 > 虛擬私有雲網路」


顯示出如下畫面,確實建立了一個名稱為 labnet 的 Network。

Create a subnetwork

  • 基礎觀念

  1. 一個 project 可以跨好幾個 region

  2. subnetwork 的名稱在同一個 project 的同一個 region 裡不能重複

  3. subnetwork 的名稱在同一個 project 可在不同 region 出現兩次

  4. 每個 subnetwork 要設定一個 IP 網段,這個網段在同一 project 的同一 region 中不可與其它 subnetwork 衝突。

  • 建立 subnetwork

建立 subnetwork 指令如下:

gcloud compute networks subnets create labnet-sub --network labnet --region asia-east1 --range 10.0.0.0/28
這個 subnetwork 的 IP 範圍會是 10.0.0.0 ~ 10.0.0.255
Viewing networks
gcloud compute networks list

顯示出共有兩個網路,一個 default、一個 labnet,與從控制台的「虛擬私有網路」看到是一樣的,要看網路的詳細資料,指令如下:
gcloud compute networks describe labnet
最後一個參數是網路名稱,這裡查看剛剛新建立的 labnet,得到如下結果:

List subnets
gcloud compute networks subnets list
如上指令查看 subnets,得到的結果非常多,找到 labnet-sub 的 subnetwork,內容如下:

內容太多不好找,可以執加過濾條件,如下,只會列出在台灣彰濱機房的 subnetwork。

gcloud compute networks subnets list --filter=“REGION: asis-east1”
Creating firewall rules
  • 基礎觀念
  1. network 的模式 (mode) 為 custom 時,系統不會預設建立任何防火牆規則。

  2. 防火牆規則是定義在 network 層。

  3. 防火牆規則的名稱,在同一個 project 中不可重複。

gcloud compute firewall-rules create labnet-allow-internal --network=labnet --action=ALLOW --rules=icmp,tcp:22 --source-ranges=0.0.0.0/0
  • 建立防火牆規則
上面指令為 network labnet 建立了一條防火牆規則,名為 labnet-allow-internal,允許通過 icmp 及 tcp:22 port,連線來源不設限,說明如下:
  1. firewall-rules: compute 指令的子類別

  2. create: 這次指令要做的事 (動詞)

  3. labnet-allow-internal: 防火牆規則名稱

  4. --network=labnet: 指出這個防火牆規則要套用到那個 network

  5. --action: 有兩個值 ALLOW (允許)、DENY (拒絕),這裡是要開通防火牆,所以用 ALLOW。

  6. --rule=icmp,tcp:22 : 指出要開通的通訊協定 (icmp、tcp) 和 port (22)。

  7. --srouce-ranges=0.0.0.0/0: 規定來源 IP 的範圍

Viewing firewall rules details
gcloud compute firewall-rules describe [FIREWALL_RULE_NAME]
這個指令可以查看防火牆規則的細節,執行後產生的結果如下:

從上面的細節內容 direction: INGRESS,可以看出來,開通的這個防火牆是單向的,只允許由外向內。
Create another network
gcloud compute networks create privatenet --subnet-mode=custom
上面指令,會建立一個名稱為 privatenet 的 network,其 mode=custom,執行結果如下圖,訊息顯示,這個時候這個 network 還沒有套用任何防火牆規則。
gcloud compute networks subnets create private-sub --network=privatenet --region=asia-east1 --range 10.1.0.0/28
上面指令執行結果如下圖,在 network privatent 中建立了一個名稱為 private-sub 的 subnetwork (子網路)。
Create  the firewall rules for privatenet
gcloud compute firewall-rules create privatenet-deny --network=privatenet --action=DENY --rules=icmp,tcp:22 --source-ranges=0.0.0.0/0
這個指令建立的防火牆規則和前面剛好相反,這個規則允許除 icpm、tcp:22 的所有連線通過,執行結果如下:
想看一下這條規則的詳細說明,如下用如下指令:
gcloud compute firewall-rules describe privatenet-deny
到目前建立了兩個 network,可以用以下指令列出來看看
gcloud compute firewall-rules list --sort-by=NETWORK

上面指令包含預設的都會列出來,如果只想列出我們自行建立的,可以加上過濾條件。

gcloud compute firewall-rules list --sort-by=NETWORK --filter=“NETWORK != ‘default’”
Create VM instances

查一下到目前為止,我們建立了那些 subnets。

gcloud compute networks subnets list --filter=“REGION = ‘asia-east1’”

執行結果如下:

接下來要在 labnet-sub 及 privatek-sub 兩個 subnets 中各建立一個 VM,用來測試網路是否有通。
  • Create the pnet-vm instance
gcloud compute instances create pnet-vm --zone=asia-east1-c --machine-type=n1-standard-1 --subnet=private-sub

執行結果如下,在 AZ = asia-east1-c 的機房,在子網路 private-sub 裡建立了名稱為 pnet-vm 的 VM,內部 IP: 10.1.0.2,外部 IP: 35.221.157.5。

  • Create the lnet-vm instance
gcloud compute instances create lnet-vm --zone=asia-east1-c --machine-type=n1-standard-1 --subnet=labnet-sub

執行結果如下,在 AZ = asia-east1-c 的機房,在子網路 labnet-sub 裡建立了名稱為 lnet-vm 的 VM,內部 IP: 10.0.0.2,外部 IP: 34.80.241.172。

檢查上面建立的兩個 VM,列出來看看,指令如下:

gcloud compute instances list --sort-by=ZONE --filter="ZONE='asia-east1-c'"

結果如下, STATUS 都是 RUNNING,正常在運作。

Explore the connectivity

檢查一下防火牆,在自己的電腦開個命令列視窗,ping 上面的兩個外部 IP。

結果是 lnet-vm 可以通,pnet-vm 不通,如預期!

沒有留言:

張貼留言