文章段落
在《GCP – Cloud Load Balancing 之分類與選擇》一文中,我們介紹了各種 GCP Load Balancer 的選擇標準,而這次將深入介紹 GCP HTTP(S) Load Balancer 這款負載平衡器。如果對 GCP Load Balancer 的種類及架構還不熟悉,可先閱讀《什麼是負載平衡?原理、6大 GCP Load Balancer 完整介紹》這篇介紹。
GCP HTTP(S) Load Balancer 可以讓多個網域,或同個網域但不同路徑,都指向同一個Load Balancer,再依照URL去分流到不同目的地。詳情可看以下文章:
https://cloud.google.com/load-balancing/docs/url-map
因為分流是依照URL,而 Public DNS需額外去購買,所以為了節省相關費用和設定上的方便,可用 Internal Load Balancer 和 Cloud DNS 的 Private Zone 來設定DNS,如果要看網頁是否生效,就在GCP同一個subnet來建立VM,透過內部IP去確認即可。
建立2台要分流的主機
先建立一台VM名為ap1,在zone a:
![先建立一台VM名為ap1](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_vm_ap1-898x1024.png)
作業系統選擇 Ubuntu:
![作業系統選擇 Ubuntu](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_vm_with_Ubuntu_16.png)
網路的部分,內部IP不用管,外部IP則是因為你要先讓 Ubuntu 安裝 Apache,所以先暫時用一下外部IP。
![外部IP則是因為你要先讓 Ubuntu 安裝 Apache,所以先暫時用一下外部IP](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_vm_with_ephemeral_public_ip.png)
防火牆的部分,針對要開放的協定來勾選
![防火牆針對要開放的協定來勾選](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/setup_firewall_on_vm.png)
第二台依此類推:
![建建第二台VM ap2](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_2nd_vm-897x1024.png)
直接點選SSH就可以連線
![直接點選SSH就可以連線](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/ssh_to_vm_to_install_apache-1024x150.png)
更新可安裝的package列表
![更新可安裝的package列表](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/sudo_apt_update-1024x578.png)
安裝apache
![安裝apache](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/install_apache-1024x228.png)
我們直接點 External IP就能打開網頁
![直接點 External IP就能打開網頁](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/ssh_to_vm_to_install_apache-2-1024x150.png)
但是如果看到這個
![點擊時帶的是 HTTPS 的協定,所以會看到拒絕連線](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/click_url_but_refuse_connection.png)
是因為你點擊時,它帶的是 HTTPS 的協定,你要手動把 URL中的”S”拿掉,例如
這樣才能看到歡迎頁面:
![看到Apache歡迎頁面](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/Apache_welcome_page-1024x708.png)
接下來更改主頁內容,以利分辨目前造訪的VM是AP1還是AP2.
![更改主頁內容](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/sudo_vim_index.png)
更改這裡:
![](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/modify_title.png)
改完重新整理頁面,會看到網頁更新了:
![改完重新整理頁面,會看到網頁更新了](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/refresh_web_page-1024x282.png)
AP2也一樣:
![AP2也一樣](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/modify_and_refresh_ap2-1024x248.png)
如果把外部IP拿掉,也可以在GCP內建一台Linux VM使用CURL去內部IP確認:
![如果把外部IP拿掉,也可以在GCP內建一台Linux VM使用CURL去內部IP確認](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/confirm_web_page_with_curl.png)
建立 Cloud DNS Private Zone
接下來去 Cloud DNS
建立一個 Private Zone,在這裡你想要用什麼 Domain 都可以,我取名 aaronweb.com
![Cloud DNS Private Zone](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_private_dns_zone-1024x1022.png)
接下來建立Record也很簡單,直接輸入主機名稱和對應的IP就好,真的跟外部DNS代管廠商的頁面差不多:
![接下來建立Record也很簡單,直接輸入主機名稱和對應的IP就好](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_a_record-1024x602.png)
第二台的DNS
![](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_2nd_record-1024x696.png)
用一台內網的Windows VM去連連看。
AP1可以連:
![AP1可以連](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/access_ap1_with_private_dns.png)
AP2也可以連,超快就設好,簡單到我很驚訝!
![AP2也可以連](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/access_ap2_with_private_dns.png)
建立 Instance Group
接下來我們要把VM建成 Unmanaged Instance Group:
![接下來我們要把VM建成 Unmanaged Instance Group](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_instance_group-1024x795.png)
另一個ap2也是,就不多放截圖。
![](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/instance_groups-1024x333.png)
另外有一個東西要先建,叫做 Name Port,也要在 instance group建,點擊Edit:
![Name Port,也要在 instance group建](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_name_port-1024x511.png)
注意要展開隱藏選單,Add item:
![注意要展開隱藏選單,Add item](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_port_name_mapping.png)
Port Name取個簡單易懂的名字就好
![Port Name取個簡單易懂的名字就好](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/input_port_name_mapping.png)
ap2也照做
![ap2也照做](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_name_port_for_ap2.png)
建立 Internal HTTP Load Balancer
接下來要建 Internal HTTP Load Balancer,碰到要建 Proxy-only subnet的要求,它是 Internal HTTP Load Balancer 特有的一個 proxy,它會依照 URL Map的描述來判斷進來的 request 要導向哪裡去,詳細文章可以看這裡:
https://cloud.google.com/load-balancing/docs/l7-internal/proxy-only-subnets
![接下來要建 Internal Load Balance,碰到要建 Proxy-only subnet的要求](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_internal_load_balancer_require_proxy_subnet-1024x805.png)
看一下現有的subnet,找一段不會重疊的IP Range:
![看一下現有的subnet,找一段不會重疊的IP Range](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/checking_current_ip_range-1024x149.png)
建一段10.141.0.20/24:
![](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/add_proxy_subnet_with_10_141.png)
想說沒有重疊到就沒關係,但是:
![](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_proxy_subnet_error_auto_subnet_overlap.png)
因為default VPC Network佔了 10.120.0.0/9 非常大的IP Range,如果要避免重疊,乾脆把整個 VPC 直接從default轉custom
![從default轉custom](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/convert_vpc_network_to_custom-1024x322.png)
轉換VPC Network前的警告:
![轉換VPC Network前的警告](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/switching_vpc_network_mode-1024x472.png)
接下來建 Load Balancer:
![接下來建 Load Balancer](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_http_load_balancer-1024x514.png)
因為是內部的,要選 Only between my VMs:
![因為是內部的,要選 Only between my VMs](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/only_between_my_vms-1024x514.png)
成功建立 proxy-subnet 了:
![成功建立 proxy-subnet](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_proxy_subnet_successfully.png)
接下來進入後端,選擇 ig-ap1 這個instance group,來建立backend service
![建立backend service](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_bk1.png)
然後也要建立 Health Check:
![建立 Health Check](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_health_check.png)
確認後建立 Health Check:
![確認後建立 Health Check](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/confirm_health_check_and_create-1024x488.png)
第二個也是:
![建立 Health Check](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_bk2-865x1024.png)
接下來的Routing Rules是分流的關鍵:
![Routing Rules是分流的關鍵](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_routing_rules-1024x506.png)
接著建立 Frontend:
![接著建立 Frontend](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/create_fe1.png)
建好之後,會取得Frontend IP,那我們再去Cloud DNS ,把原本指向 VM IP的記錄改成指向 Frontend IP。
![把原本指向 VM IP的記錄改成指向 Frontend IP](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/modify_dns_record-1024x416.png)
變這樣
(PS.我建2個Frontend IP是為了其他用途,正常情況一個IP就好)
![](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/DNS_record-1024x220.png)
這樣就完成了!
測試分流效果
接下來測試,把 ap1和ap2的外部IP拿掉,然後用一台Windows VM,直接在瀏覽器輸入網址:
![直接在瀏覽器輸入網址](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/access_url1.png)
再確認第二台:
![再確認第二台](https://storage.googleapis.com/cloudace-tw-blog/1/2021/05/access_url2.png)
看到2台VM在Load Balance後面依照網址進行分流,這樣就代表 Load Balance 分流成功了。
以上是這次的分享,完整的 Internal HTTP(S) Load Balancer 概念大家可以參考以下文章:《Internal HTTP(S) Load Balancing overview》。而如果針對負載平衡或 GCP 有任何想詢問的內容,也都可以直接聯繫我們喔!
▋延伸閱讀:
・什麼是負載平衡?原理、6大 GCP Load Balancer 完整介紹
・[ GCP 教學] 打造彈性、快速且安全的雲端基本服務架構 – 負載平衡 Load Balancer 和 Instance Group
・在 GCP Load Balancer 上設定 logging 以及 monitoring 功能 – TCP Load Balancer dashboard & Email 告警設定教學
・如何透過 GCP HTTP(S) Load Balancing 來實現 HTTP Redirect HTTPS
・GCP – Cloud Load Balancing 之分類與選擇
![Cloud Ace 研討會主頁](https://storage.googleapis.com/cloudace-tw-blog/1/2021/06/免費報名研討會-快速了解-GCP.png)