# GCP 負載平衡器配置說明 所謂的負載平衡器,其實是由多個組件組合而成 抽象來說,就是 `Frontend` 及 `Backend` Frontend 指的是前端暴露到網際網路上的端口,`可能是 http(s)` ,`tcp` 或 `udp` Backend 指的是實際處理請求的對象,可能是一個(或多個)實例,或者是一個抽象的 k8s `service` 因此在設定上,我們有不同的選擇,視需求而定: --- ## 自動配置 首先示範第一種設定方式,也是比較方便的: 直接**建立負載平衡器** 先到 **網路服務 > 負載平衡** 點選最上方的**建立負載平衡器** ![](https://i.imgur.com/Rafdea8.png) ![](https://i.imgur.com/paW83FE.png) 這邊要符合我們的需求,選 `TCP 負載平衡器` ![](https://i.imgur.com/PtQTDe3.png) ![](https://i.imgur.com/eJHTF0q.png) 設定內容如上圖,後端類型請選擇**後端服務**(for k8s) :::info 若是使用 VM,這邊的後端類型就可以選**目標集區(多台)或目標執行個體(單一台)** ::: 首先設定後端服務: ![](https://i.imgur.com/TKsAI9P.png) 地區選擇 k8s cluster 所在地 **執行個體群組(Instance Group)** 選擇我們的 pomelo 所在的群組 :::info :musical_note: gcp 的 k8s 服務在建立實體 node 之前,會要求先建立`Instance Group`,就是一組實體機器,可以預先設定 node 數量的上下限,方便自動擴展,之後在建立 pod 資源時可以選擇是否要指定在哪個群組上 ::: 按下完成,接著建立**健康狀態檢查** 因為已經有現成的,所以我們直接套用 ![](https://i.imgur.com/2Anvy4w.png) >關於[健康狀態檢查](https://cloud.google.com/load-balancing/docs/health-check-concepts?_ga=2.113868545.-769677821.1606265965) 接下來建立**前端設定**: 這邊的 IP 可以選擇臨時,或者是之前已經建立的靜態 IP 也可以選擇新增一組靜態 IP ![](https://i.imgur.com/Un8KZm8.png) 通訊埠編號就看你的後端服務預計要開放哪些 ![](https://i.imgur.com/8yqbu4n.png) :::warning :exclamation: 這邊有個很麻煩的地方,就是一個前端服務**最多只能提供5組 port**,對於 pomelo connector 這類多 port 的服務,這會很不方便 ::: 設定完成後按下**建立**,等個一會兒服務就完成了 ![](https://i.imgur.com/D9pEgvF.png) 如果需要開放的 port 超過5個,但是又不想因此開啟多個 Load Balancer 浪費 IP,我們可以在建立 **TCP 負載平衡器**時的選項,將後端服務改為**目標集區或目標執行個體**,換句話說,我們不再依賴 k8s 提供的 `service` ,而是依賴 pod 所在的 `Instance(Group)` ![](https://i.imgur.com/JQxj835.png) 這麼一來,我們在前端設定時,就可以用 `start-end` 的格式來設定開放 port 的範圍 ![](https://i.imgur.com/Y5WDxdi.png) :::danger :warning: 這邊要稍微說明一下,基於資安原因,官方較不建議用這個方式來設定後端服務,而且也不符合 k8s 的設計理念,因此 google 已將這個選項列為 `legacy` ,我們是為了要讓 k8s 相容於 pomelo 才這樣做 ::: --- ## 手動配置 接下來介紹一下比較 hardcore 的做法,手動建立 `Load Balacer` 的組件: 如同前面提到的 `Load Balacer` = `Frontend` + `Backend` GCP 也提供了一系列的組件讓我們可以自行拼湊出 Load Balacer 一樣到 **網路服務 > 負載平衡**,拉到最下方,點選**進階選單** 首先要建立**目標集區**,也就是提供後端服務的實體 >這邊的實體是指抽象的概念,它可以是 k8s service,也可以是 Instance(Group) 點下建立**目標集區**: ![](https://i.imgur.com/3jm6Erl.png) :::info **地區**請選擇 gke cluster 所在的地區 **健康狀態檢查**也是直接套用既有的 然後**選取現有執行個體群組**,選擇我們的 k8s service 所在的群組 ::: ![](https://i.imgur.com/Nnp2f9k.png) >這邊可以選擇個體(單一台)或群組(多台),端看我們的 k8s node 的配置而定 好了就按下**建立** 再來是建立**轉送規則**,也就是**前端 proxy** 同樣在進階選單: ![](https://i.imgur.com/Kt2H7JQ.png) 這邊我們要選擇**建立轉送規則** :::info 通用轉送規則是包含了一些常見的服務 port,例如 redis 的 6379,或是 elasticsearch 的 9200 9300,我們要配置的是 pomelo connector 開放的 port ,所以不能選通用規則 ::: ![](https://i.imgur.com/O1XwqYD.png) `外部 IP` 可以選擇建立臨時或是靜態 IP,也可選擇之前已經建立過的靜態 IP `通訊埠/範圍` 可以指定單一或多個 >範圍格式 : 22-30050 `目標集區` 就選擇剛才建立的那個 按下建立,load balancer 就建立完成了 ###### tags: `GCP` `k8s`