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 optoins
或two 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,例如:
gcloud 是 Google Cloud Platform
的 command-line 工具,他已事先被安裝在 Cloud Shell
並且支援自動補齊
使用這個 command ,你可以列出有效帳戶名稱:
輸出:
Credentialed accounts:
- @.com (active)
範例輸出:
Credentialed accounts:
- google1623327_student@qwiklabs.net
你可以使用以下 command 來列出專案 ID
輸出:
[core]
project =
範例輸出:
[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 網路
- 執行以下指令來建立 privatesubnet-us 子網路:
- 執行以下指令來建立 privatesubnet-eu 子網路
測試進度 點擊 Check my progress 來確認目前的進度。如果你已經成功建立 privatenet 網路, 你將獲得一個評價分數。
- 執行以下指令來列出可用的 VPC 網路:
輸出類似如下 (不要複製; 這個只是範例輸出):
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 網路分類)
輸出類似如下 (不要複製; 這個只是範例輸出):
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 防火牆規則
輸出類似如下 (不要複製; 這個只是範例輸出):
NAME NETWORK DIRECTION PRIORITY ALLOW DENY
privatenet-allow-icmp-ssh-rdp privatenet INGRESS 1000 icmp,tcp:22,tcp:3389
測試進度 點擊 Check my progress 來確認目前的進度。如果你已經成功建立 privatenet 網路的防火牆規則, 你將獲得一個評價分數。
- 執行以下指令來列出所有的防火牆規則 (依 VPC 網路分類)
輸出類似如下 (不要複製; 這個只是範例輸出):
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 的防火牆規則
- 點擊 Close
- 點擊 Create
測試進度 點擊 Check my progress 來確認目前的進度。如果你已經成功在 managementnet 網路建立 VM instance, 你將獲得一個評價分數。
建立 privatenet-us-vm instance
使用 Cloud Shell 指令來建立 privatenet-us-vm instance
- 在 Cloud Shell 中, 執行以下指令來建立 privatenet-us-vm instance
輸出類似如下 (不要複製; 這個只是範例輸出):
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 分類)
輸出類似如下 (不要複製; 這個只是範例輸出):
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-vm 的 SSH 來啟動一個終端機連線
- 執行以下指令, 將 mynet-eu-vm 替換成外部 IP, 藉此測試 mynet-eu-vm 的外部 IP 連線
ping -c 3
這應該要可以通過
- 執行以下指令, 將 managementnet-us-vm 替換成外部 IP, 藉此測試 managementnet-us-vm 的外部 IP 連線
ping -c 3
這應該也要可以通過
- 執行以下指令, 將 privatenet-us-vm 替換成外部 IP, 藉此測試 privatenet-us-vm 的外部 IP 連線
ping -c 3
這應該也要可以通過
你可以通過 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-vm 的 SSH 來啟動一個終端機連線
- 執行以下指令, 將 mynet-eu-vm 替換成內部 IP, 藉此測試 mynet-eu-vm 的內部 IP 連線
ping -c 3
你可以經由 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
這應該不能通過, 如同資料顯示, 封包 100% 遺失
- 執行以下指令, 將 privatenet-us-vm 替換成內部 IP, 藉此測試 privatenet-us-vm 的內部 IP 連線
ping -c 3
這應該也無法通過, 如同回饋顯示, 封包 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-appliance 的 Internal IP 的 nic0 來打開 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 的網路介面
輸出類似如下 (不要複製; 這個只是範例輸出):
eth0: flags=4163 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
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 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
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 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
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-appliance 的 SSH 終端機
- 執行以下指令, 將 privatenet-us-vm 替換成內部 IP, 藉此測試 privatenet-us-vm 的內部 IP 連線
ping -c 3
這是可以連到的!
- 重複以上步驟, 執行以下指令
你可以 ping 到 privatenet-us-vm 的 name, 因為 VPC 網路有內部 DNS 服務, 這個服務讓我們可以透過 DNS name 來連接到機器, 而不用透過 IP 位址。
- 執行以下指令, 將 managementnet-us-vm 替換成內部 IP, 藉此測試 managementnet-us-vm 的內部 IP 連線
ping -c 3
這是可以連到的!
- 執行以下指令, 將 mynet-us-vm 替換成內部 IP, 藉此測試 mynet-us-vm 的內部 IP 連線
ping -c 3
這是可以連到的!
- 執行以下指令, 將 mynet-eu-vm 替換成內部 IP, 藉此測試 mynet-eu-vm 的內部 IP 連線
ping -c 3
這個無法連到! 再多網路介面 instance 中, 每一個介面都會有一個可以連到它們所在的子網路的路由。 再者, instance 只會有一個預設路由, 這個路由與主要介面 eth0 相關聯。 除非手動設置, 否則任何離開這個 instance 的流量, 不管目的地是哪, 只要不是透過直接連接的子網路, 都將經由這個預設的路由離開。
- 執行以下指令來列出 vm-appliance 的所有路由
輸出類似如下 (不要複製; 這個只是範例輸出):
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 網路)。 你可以設置政策路由來變更這個行為, 可參考文件
最後
人非聖賢, 孰能無過… 阿不是, 是人非草木, 豈能無情… 你清脆的掌聲於我, 有如浪頭與衝浪者的關係! 讓我找到存在的價值…
拍 1 下: 來都來了, 刻個到此一遊吧!
拍 10 下: 覺得小生寫得還可以, 馬馬虎虎普普通通淒淒慘慘戚戚...
拍 20~30 下: 這篇文章有幫助到你, 讓你的概念清晰了百分之零點零零一
拍 40~50 下: 看完覺得心情愉悅, 或是覺得 Ray 很帥
Write Medium in Markdown? Try Markdium!