云容器引擎支持將Service通過負載均衡ELB向外暴露, 云容器引擎集群內置CCM(Cloud Controller Manager)插件,當Service的類型為LoadBalancer時,CCM插件會為Service配置負載均衡,并根據Service信息配置好負載均衡的后端服務器組、健康檢查和監聽規則等,使得用戶可以通過負載均衡訪問該Service。以下是使用負載均衡的步驟指引。
使用已有負載均衡暴露服務
前提條件
用戶已提前在負載均衡控制臺創建ELB實例,ELB實例需要與Service所在的容器集群在同一個VPC網絡下。
注意事項
不同Service可以同時復用同一個負載均衡實例,復用同一個負載均衡實例需要避免不同Service使用相同的服務端口,否則存在監聽配置被覆蓋的情況
不能復用由CCM自動創建的或集群ApiServer使用的負載均衡實例
當Service刪除時,使用已有的負載均衡不會被刪除
集群Master節點不作為負載均衡實例的后端
操作步驟
登錄 云容器引擎 控制臺,點擊進入想要操作的集群,在左側菜單選擇“網絡” - “服務”;
如下圖,點擊“新建”按鈕新建服務,按照參數說明配置相關的參數;
服務訪問方式:選擇負載均衡
負載均衡:可根據業務需要選擇私網訪問或公網訪問,集群內或同一VPC內訪問建議選擇私網訪問即可;選擇“使用已有負載均衡”;負載均衡實例列表會根據選擇的私網/公網訪問方式顯示出對應的實例,選擇想要使用的負載均衡實例即可
標簽:根據需要可以為服務配置標簽
注解:根據需要可以為服務配置注解
外部流量策略:Cluster或Local。Cluster策略下,集群所有可用工作節點都會掛載到負載均衡實例;Local策略下,只有Service對應的Pod所在節點會掛載到負載均衡實例
端口映射:配置好協議、容器端口及服務端口,其中容器端口為應用本身暴露的端口,服務端口則會作為負載均衡實例的監聽端口
工作負載綁定:選擇服務要關聯的工作負載,也可以配置自定義標簽關聯
創建服務后,在服務列表可以看到該服務,通過服務的集群外訪問地址即可以訪問該服務。
配置Service負載均衡的注意事項
多個Service使用同個負載均衡的同個監聽端口
CCM版本v1.0.7之前,若不同Service監聽同個負載均衡的同個監聽端口,會導致監聽配置相互覆蓋的問題。CCMv1.0.7及之后版本,后創建的Service默認會配置失敗,可通過設置Service注解“service.beta.kubernetes.io/ctyun-loadbalancer-override-listeners”為“true”指定強制覆蓋已有監聽。
存量集群請檢查好CCM版本(通過查看kube-system命名空間下的工作負載ccse-cloud-controller-manager使用的鏡像版本可知),將CCM版本升級到v1.0.7或以上。
LoadBlance類型Service流量走向
訪問LoadBlance類型Service,流量走向主要和外部流量策略及網絡插件類型有關。如下所示:
外部流量策略為cluster
當外部流量策略為cluster時,業務LoadBlance類型Service會把集群所有工作節點添加到LoadBlance實例后端。此時訪問LoadBlance的流量,將均衡到各個工作節點的NodePort,隨后二次轉發到對應的Pod后端,如下圖所示:
外部流量策略為local,網絡插件為calico
當外部流量策略為local,網絡插件為calico時,只有Pod所在節點才會加入LoadBlance實例后端,訪問LoadBlance的流量將均衡到Pod所在節點,不做SNAT處理直接二次轉發到節點上的Pod后端,如下圖所示:
外部流量策略為local,網絡插件為cubecni
cubecni網絡插件為Pod分配VPC地址時,Pod直接加入LoadBlance實例后端組,訪問LoadBlance的流量將直接發送到Pod,不經過Service二次轉發,性能較優,如下圖所示: