什么是路由(Ingress)
為什么需要Ingress
Service基于TCP和UDP協(xié)議進(jìn)行訪問轉(zhuǎn)發(fā),為集群提供了四層負(fù)載均衡的能力。但是在實際場景中,Service無法滿足應(yīng)用層中存在著大量的HTTP/HTTPS訪問需求。因此,Kubernetes集群提供了另一種基于HTTP協(xié)議的訪問方式——Ingress。
Ingress相關(guān)定義
- Ingress資源:一組基于域名或URL把請求轉(zhuǎn)發(fā)到指定Service實例的訪問規(guī)則,是Kubernetes的一種資源對象,通過接口服務(wù)實現(xiàn)增、刪、改、查的操作。
- Ingress Controller:請求轉(zhuǎn)發(fā)的執(zhí)行器,用以實時監(jiān)控資源對象Ingress、Service、End-point、Secret(主要是TLS證書和Key)、Node、ConfigMap的變化,解析Ingress定義的規(guī)則并負(fù)責(zé)將請求轉(zhuǎn)發(fā)到相應(yīng)的后端Service。
Ingress Controller在不同廠商之間的實現(xiàn)方式不同,根據(jù)負(fù)載均衡器種類的不同,可以將其分成ELB型和Nginx型。CCE支持上述兩種Ingress Controller類型,其中ELB Ingress Controller基于彈性負(fù)載均衡服務(wù)(ELB)實現(xiàn)流量轉(zhuǎn)發(fā);而Nginx Ingress Controller使用Kubernetes社區(qū)維護(hù)的模板與鏡像,通過Nginx組件完成流量轉(zhuǎn)發(fā)。
Ingress Controller工作原理
ELB Ingress Controller工作原理
集群內(nèi)訪問表示工作負(fù)載暴露給同一集群內(nèi)其他工作負(fù)載訪問的方式,通過集群的內(nèi)部 IP 暴露服務(wù),選擇該值時服務(wù)只能夠在集群內(nèi)部CCE自研的ELB Ingress Controller基于彈性負(fù)載均衡服務(wù)ELB實現(xiàn)公網(wǎng)和內(nèi)網(wǎng)(同一VPC內(nèi))的七層網(wǎng)絡(luò)訪問,通過不同的URL將訪問流量分發(fā)到對應(yīng)的服務(wù)。
ELB Ingress Controller部署于Master節(jié)點上,與集群所在VPC下的彈性負(fù)載均衡器綁定,支持在同一個ELB實例(同一IP)下進(jìn)行不同域名、端口和轉(zhuǎn)發(fā)策略的設(shè)置。ELB Ingress Controller的工作原理如圖,實現(xiàn)步驟如下:
1.用戶創(chuàng)建Ingress資源,在Ingress中配置流量訪問規(guī)則,包括負(fù)載均衡器、URL、SSL以及訪問的后端Service端口等。
2.Ingress Controller感知到Ingress資源發(fā)生變化時,就會根據(jù)其中定義的流量訪問規(guī)則,在ELB側(cè)重新配置監(jiān)聽器以及后端服務(wù)器路由。
3.當(dāng)用戶進(jìn)行訪問時,流量根據(jù)ELB中配置的轉(zhuǎn)發(fā)策略轉(zhuǎn)發(fā)到對應(yīng)的后端Service端口,然后再經(jīng)過Service二次轉(zhuǎn)發(fā)訪問到關(guān)聯(lián)的各個工作負(fù)載。
Nginx Ingress Controller工作原理
Nginx型的Ingress使用彈性負(fù)載均衡(ELB)作為流量入口,并在集群中部署nginx-ingress插件來對流量進(jìn)行負(fù)載均衡及訪問控制。
說明:nginx-ingress插件直接使用社區(qū)模板與鏡像,CCE不提供額外維護(hù),不建議用于商用場景。開源社區(qū)地址:https://github.com/kubernetes/ingress-nginx
Nginx型的Ingress Controller通過pod部署在工作節(jié)點上,因此引入了相應(yīng)的運維成本和Nginx組件運行成本,其工作原理如圖,實現(xiàn)步驟如下:
1.當(dāng)用戶更新Ingress資源后,Ingress Controller就會將其中定義的轉(zhuǎn)發(fā)規(guī)則寫入到Nginx的配置文件(nginx.conf)中。
2.內(nèi)置的Nginx組件進(jìn)行reload,加載更新后的配置文件,完成Nginx轉(zhuǎn)發(fā)規(guī)則的修改和更新。
3.在流量訪問集群時,首先被已創(chuàng)建的負(fù)載均衡實例轉(zhuǎn)發(fā)到集群內(nèi)部的Nginx組件,然后Nginx組件再根據(jù)轉(zhuǎn)發(fā)規(guī)則將其轉(zhuǎn)發(fā)至對應(yīng)的各個工作負(fù)載。