作者: Colin Jao 饒康立 – VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化、分散式安全防護技術與新應用遞送方案的介紹與推廣。

在Kubernetes內基本上標準的API並沒有直接控制太多負載平衡功能。應用管理者依據需求呼叫LoadBalancer Service或是Ingress,相關的底層LoadBalancer / Ingress Controller構件依據對應YAML檔內的參數各自進行配置。

那麼在標準的Kubernetes API內能配置多少東西呢?其實很少。大家可以參考相關Kubernetes文件,比如說LoadBalancer Service的範例在 https://kubernetes.io/docs/concepts/services-networking/service/ ,Ingress的範例在https://kubernetes.io/docs/concepts/services-networking/ingress/ 。如果檢視配置內容,其實不外乎就是

  • LoadBalancer Service: 使用哪個protocol,前端接收哪個port,後面轉送給哪個port,後端要丟給哪些pod (用label選擇),要不要指定前端IP地址
  • Ingress: 服務的hostname是什麼,採用HTTP還是HTTPS,憑證是哪個,後端要丟給哪個服務,基本的URL轉送配置 (path / pathtype) 等等

請問大家一個問題:既然YAML檔內主要可以配置的參數都一樣,這時候,底層是用哪種負載平衡器,是企業等級的還是開源的還是公有雲自建的,在功能上重要嗎?基本上,應用管理者就只能用上面那幾個配置,下面的負載平衡 / Reverse-Proxy方案只要可以做得出這些功能就好。用哪個方案根本沒有差別對吧。那…幹嘛買你們家的產品呢?

像我們這些不同的負載平衡廠商就需要拉出差異性。在本系列文的前面,我試圖與大家說明在架構面、效能面、維運面等與傳統或開源方案的區別,比如說使用Avi是採用虛機/實體機而非容器來作加解密而且可以AA橫向擴充,日誌功能強大,在不同種類公有雲都可部署而且維運介面與功能相同,可以同樣的方案內用WAF…等等的。

但是在『負載平衡本身的功能』呢?比如說舉個例,客戶的應用雖然是用容器做了但仍然希望能夠做到連線堅持 (Session-Persistence / Sticky / Session-Affinity),我們的方案有支持這個功能,但在標準YAML檔內沒有這個配置,要怎麼啟用呢?

不同的廠商有不同的做法,以便在基本LoadBalancer Service / Ingress的標準參數外,再加上額外的功能配置。通常做法有四種:

  • 採用Kubernetes內的”annotations”功能,在annotations內把需求的額外參數/功能配置放入。這是個常見的做法,比如說nginx就是用這個方式提供擴充參數輸入
  • 採用Kubernetes的CRD (Customized Resource Definition),簡單的說,廠商提供擴充的Kubernetes API與物件,採用自訂的YAML語法來呼叫這些功能。這是AKO的做法,等下我們和大家會進行介紹。
  • 自己做個不一樣的輸入command,比如說各位如果是用Openshift,就不需要用”Ingress”而可以用”Routes”。雖然不是Kubernetes標準功能,但Routes內可配置的參數就遠多於Ingress了。
  • 用圖形介面或產品本身的command line…簡而言之就是放棄和Kubernetes整合了,要特殊功能就到產品上面來配置。

在Avi Networks早期的Kubernetes/Openshift Cloud(目前已停止支援),以及NSX-T Load Balancer搭配NCP (NSX Container Plugin) 內是用annotations的機制,但這些現在都是歷史了。目前AKO的持續支持做法會採用CRD的方式。這邊的發展以及功能擴張很快,以目前來說,主要支持的CRD物件有三個:

  • HostRule:對應到Ingress前端的Virtual Service擴充功能配置。比如說對應的特定Application Profile,要不要開WAF,SSL Profile要改成哪個這些
  • HTTPRule:對應到Ingress後端的Pool擴充功能配置,比如說是否要額外採用特定的Health Monitor,是否要啟用Session Persistence,往後端Pod之間要不要開加密這類的。
  • AviInfraSetting:對應到底層資源配置,舉例來說,一個重要的核心應用是不是要有獨立的服務引擎來運作。

下篇內我們就上述的各個物件內容進行介紹,以及一些基本的展示。