GCP Load balancer後端導向GKE

2024/02/16

GKE設定

ref

透過在service上設定annotation來建立zonal NEGs(network endpoint group)

apiVersion: v1
kind: Service
metadata:
  name: foobar
  annotations:
    cloud.google.com/neg: '{"exposed_ports": {"8000":{"name": "foobar-neg"}}}'

 

apply完service設定後

即可在GCP Console的Compute Engine > Network endpoint group頁面中看到設定的NEG

 

建立固定IP

在GCP Console的VPC Networks > IP Address頁面

建立一個固定IP提供給後續LB使用

並可在這時候先將DNS使用A record指向該IP

 

Firewall

ref

firewall必須允許後續LB health check通過

架設health check的port是8000

則設定如下

 

IP Range

35.191.0.0/16
130.211.0.0/22

image.png

 

LB - Frontend設定

以下範例為強制http轉https

因此只需要建立一個https frontend

並選擇好固定IP

image.png

 

 

Certificate

Certificate的部分就直接用Google-managed certificate最簡單

Domain就設定前面DNS設定的domain即可

image.png

 

最後勾選Enable HTTP to HTTPS redirect

才能讓LB強制將http轉https

 

LB - Backend service設定

Backend的架構如下

一個backend service底下有多個backend

  • Backend service
    • Backend

 

這邊要建立backend service指向前面設定好的GKE NEG

因此Backend type必須選擇Zonal network endpoint group

這邊就可以看到有3個zone的neg

image.png

直接將3個neg都當成backend加入到這個backend service中

讓LB backend service透過health check自行決定要導向哪個backend

image.png

 

health check

health check可以先在Compue Engine>Health check頁面中設定

Port specification可選擇Fixed port或是Serving port

若設定為Serving port將會自動偵測NEG使用的port

 

image.png

 

image.png

完成

完成後需要等待一段時間

LB才會生效

 

常見問題

 

Network endpoint group內無任何endpoint

如果GKE上的service已經使用annotations設定cloud.google.com/neg

並且已經將service發佈到GKE上

但看不到NEGs上看不到任何endpoint

可能是之前有刪除掉cluster

但NEGs沒一併刪除

這是我遇過的情況

那時候我將NEG刪除後

再重新佈署(kubectl apply -f)建立service

NEGs內的endpoint就又長出來了

 

health check設定正確但狀態一直失敗

image.png

如果確定health check的設定都是正確的

但狀態一直失敗

可以檢查一下health check的port是否有在firewall允許的清單內