星期日, 8月 16, 2020

GCP 平臺建立 Managed instance groups 與 Load balancing 小記

GCP 平臺建立 Managed instance groups 與 Load balancing 小記


今天來整理 GCP 上面使用 Managed instance group 與 Load balancing 的一些操作與想法


情境如下



使用者透過 Load balancer IP 來進行存取, 後端連接 Managed instance group 來提供服務


==== 準備服務主機 ====


先使用 gcloud 指令建立 openSUSE Leap GCE

使用 Portal 上面的 SSH 登入主機

  • 使用 zypper 指令安裝 apache2, 啟用並設定開機啟動 

    • # zypper  install apache2

    • # systemctl start  apache2

    • # systemctl enable apache2


參考網路上網頁顯示主機名稱或是 URL 的方式


將相關網頁存成 /srv/www/htdocs/index.html

網頁呈現如下



  • 這個方法目前沒有很好, 因為在後續 LB 測試的時候只會顯示 LB 的 IP, 後面再找其他的方式來顯示後端主機的 hostname or IP


將主機關機, 等等建立為映像檔


==== 建立主機映像檔 ====


點選 Compute Engine -- > Images -- > CREATE IMAGE



輸入名稱 / 選取 Source disk / 選取 Location ( 我這邊選 Taiwan )

點選 Create 建立



觀察資訊



==== 建立 Instance templates  ====


點選 Compute Engine -- > 點選 Instance templates

點選 Create Instance template



輸入 名稱 / 選取機器的規格



點選 Boot disk 的 change



點選 Custom images

點選 剛剛建立的 image

點選 Select



可以觀察到剛剛的 image 已經被選取

是專案狀況看看要不要調整 networking 或是 security

點選 Create



  • 這邊要注意, 如果 firewall 是採取 tag 的方式, 記得按照需求加上 network tag

  • 也要注意 VPC 的選定是否正確


觀察資訊



==== 建立 Health check  ====


點選 Compute Engine -- > 點選 Health checks

點選 CREATE A HEALTH CHECK



輸入 名稱 -- > 選取 Scope / Protocol 與 port

輸入 檢查區間

點選 CREATE



  • Check Interval 按照實際需求來調整, 但是最好是超過 10 秒以上, 不然後面建立 Instance group 也會被警告

  • Unhealthy threshod 最好也是超過 3 次, 不然也會被警告


觀察相關資訊



==== 建立 Managed instance Group 與設定 Auto scaling  ====


點選 Compute Engine -- > 點選 Instance groups

點選 Create instance group



點選 New managed instance group

輸入 名稱 -- > 選取 Location

選取 剛剛建立的 Instance template


這邊按照需求選取 Auto scaling 的條件, 預設是 CPU 使用率超過 60%

設定 最少最大的 instance 數量

選取 Health check 方式 (使用剛剛建立的 Health check )

點選 Create


觀察相關資訊

Instance groups:


VM instances:



如果有遇到 Health check 沒過的問題


  • 官方文件有提到要針對 130.211.0.0/22 與 35.191.0.0/16 要設定防火牆規則允許通過

    • https://cloud.google.com/load-balancing/docs/https/ext-http-lb-simple

    • 我是設定 Target 針對所有 instance, 然後 130.211.0.0/22 與 35.191.0.0/16 的 TCP port 80 allow, 比較嚴謹的方式當然也可以下 tag 來處理, 但是還要個別打上 tag, 然後 130.211.0.0/22 與 35.191.0.0/16 又是 google 宣告的網段, 所以就先這樣處理


Firewall 的規劃可能考量

  • 參考 https://cloud.google.com/load-balancing/docs/https

  • Load Balancer + Instance Group內的GCE 都允許 port 80 存取

    • 設定 130.211.0.0/22 與 35.191.0.0/16 可以存取 tcp port 80

    • 使用 tag 方式, 設定 0.0.0.0/0 可以存取 tcp port 80, 在 instance group template 內加入該 tag

    • 效果

      • 存取 LB IP -- > Pass

      • 存取 後端 Instance Group 產生的 GCE IP -- > Pass

  • 只允許 Load Balancer 轉發 port 80 到 Instance Group 內的 GCE 

    • 設定 130.211.0.0/22 與 35.191.0.0/16 可以存取 tcp port 80

    • 效果: 不希望使用者直接打後端的 node, 避免程式寫死存取某一個 node IP, 只允許存取 Load Balancer 的 IP

      • 存取 LB IP -- > Pass

      • 存取 後端 Instance Group 產生的 GCE IP -- > ERR_CONNECTION_TIMED_OUT


對於 Source IP 說明的截圖 


==== 建立 Load balancing ====


點選 Network services 點選 Load balancing

點選 Create load balancer



點選 HTTP(S) Load Balancing 的 Start configuration

  • 這邊就以實際的狀況來選取



選取外部還是內部的 Load Balancer

點選 Continue


輸入名稱

點選 Backend configuration

下拉選單, 點選 Backend services -- > 點選 Create a backend service



輸入 名稱

New Backend:

選取 剛剛建立 Instance Group

輸入要連接的 port

設定 Balancing mode

點選 Done


  • Backend service 有個 Named port 就是從外部接入的 port 是那一個, 然後 instance group 可以設定 Named port 連接進來後, 要到 instance group 內的機器的對應 port


會觀察到剛剛建立的 Backend 顯示到資訊內

選取 剛剛建立的 Health Check

點選 Create 




點選 Fronted configuration

輸入名稱 / Protocol / Port

點選 Done



觀察資訊

確認 Frontend 已經被建立

點選 Create



觀察資訊



點選剛剛建立的 Load balancer

觀察 LB 的 IP



觀察是否可以存取



最後來聊聊 Load balancing 的組成

這個也是剛接觸最讓我迷惑的部分 :p


Load balancing 組成分為 4 個部分

  • Forwarding rule

    • 如果是透過 portal 設定, 是在 Frontend configuration 被設定, 但是沒有在界面提到這個關鍵字

  • Target HTTP proxy

    • 如果是透過 portal 設定, 是在 Frontend configuration 被設定, 但是沒有在界面提到這個關鍵字

  • URL map

    • 如果是透過 portal 設定, 大部分在建立 Backend Service 的時候就被設定預設,但是沒有在界面提到這個關鍵字

  • Backend Service

    • 非常清楚


如果不是使用 gcloud 指令建立 Load balancer 而是使用 portal 建立的話

會看到 Load balancing 介面預設顯示爲

  • Load balancers

    • 這邊想法上會認為是主體, 這個部分不會有問題

  • Backends

    • 這邊是後端服務, 這個部分不會有問題

  • Frontends

    • 這邊比較會產生困惑, 因為可以看到上面顯示的是 Forwarding rule name



點選 Load balancing 的 advanced menu, 觀察界面

  • Forwarding rules

  • Target proxies

  • Backend services

  • Backend buckets

  • Certificates

  • Target pools



  • Advanced menu 可以觀察 Forwarding rules 與 Target proxies ( Frontend ), Backend 被拆分成 Backend services 與 Backend buckets

  • 可以從剛剛建立的 test20200815-front 觀察

    • Forwarding rule: test20200815-front 有 IP address, 然後指向 test20200815-lb-target-proxy

    • Target Proxy 會對應到 URL map ( 某一個 LB 主體內的 Host and Path )

    • URL map ( LB 主體內的 Host and Path ) 會指定 Backend

    • 指定的 Backend 會對應到後端的服務


如果是透過 gcloud 指令建立, 就比較清楚, 分別爲

  • # gcloud compute health-check create

  • # gcloud compute backend-services create

  • # gcloud compute backend-service add-backend

  • # gcloud compute url-maps create

  • # gcloud compute target-proxies create

  • # gcloud compute forwarding-rule create


今天也算是好好整理之前想整理的部分了


~ enjoy it



Reference:


沒有留言: