什么是路由(Ingress)
為什么需要Ingress
Service基于TCP和UDP協(xié)議進(jìn)行訪問(wèn)轉(zhuǎn)發(fā),為集群提供了四層負(fù)載均衡的能力。但是在實(shí)際場(chǎng)景中,Service無(wú)法滿足應(yīng)用層中存在著大量的HTTP/HTTPS訪問(wèn)需求。因此,Kubernetes集群提供了另一種基于HTTP協(xié)議的訪問(wèn)方式——Ingress。
Ingress相關(guān)定義
- Ingress資源:一組基于域名或URL把請(qǐng)求轉(zhuǎn)發(fā)到指定Service實(shí)例的訪問(wèn)規(guī)則,是Kubernetes的一種資源對(duì)象,通過(guò)接口服務(wù)實(shí)現(xiàn)增、刪、改、查的操作。
- Ingress Controller:請(qǐng)求轉(zhuǎn)發(fā)的執(zhí)行器,用以實(shí)時(shí)監(jiān)控資源對(duì)象Ingress、Service、End-point、Secret(主要是TLS證書和Key)、Node、ConfigMap的變化,解析Ingress定義的規(guī)則并負(fù)責(zé)將請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的后端Service。
Ingress Controller在不同廠商之間的實(shí)現(xiàn)方式不同,根據(jù)負(fù)載均衡器種類的不同,可以將其分成ELB型和Nginx型。CCE支持上述兩種Ingress Controller類型,其中ELB Ingress Controller基于彈性負(fù)載均衡服務(wù)(ELB)實(shí)現(xiàn)流量轉(zhuǎn)發(fā);而Nginx Ingress Controller使用Kubernetes社區(qū)維護(hù)的模板與鏡像,通過(guò)Nginx組件完成流量轉(zhuǎn)發(fā)。

Ingress Controller工作原理
ELB Ingress Controller工作原理
集群內(nèi)訪問(wèn)表示工作負(fù)載暴露給同一集群內(nèi)其他工作負(fù)載訪問(wèn)的方式,通過(guò)集群的內(nèi)部 IP 暴露服務(wù),選擇該值時(shí)服務(wù)只能夠在集群內(nèi)部CCE自研的ELB Ingress Controller基于彈性負(fù)載均衡服務(wù)ELB實(shí)現(xiàn)公網(wǎng)和內(nèi)網(wǎng)(同一VPC內(nèi))的七層網(wǎng)絡(luò)訪問(wèn),通過(guò)不同的URL將訪問(wèn)流量分發(fā)到對(duì)應(yīng)的服務(wù)。
ELB Ingress Controller部署于Master節(jié)點(diǎn)上,與集群所在VPC下的彈性負(fù)載均衡器綁定,支持在同一個(gè)ELB實(shí)例(同一IP)下進(jìn)行不同域名、端口和轉(zhuǎn)發(fā)策略的設(shè)置。ELB Ingress Controller的工作原理如圖,實(shí)現(xiàn)步驟如下:
1.用戶創(chuàng)建Ingress資源,在Ingress中配置流量訪問(wèn)規(guī)則,包括負(fù)載均衡器、URL、SSL以及訪問(wèn)的后端Service端口等。
2.Ingress Controller感知到Ingress資源發(fā)生變化時(shí),就會(huì)根據(jù)其中定義的流量訪問(wèn)規(guī)則,在ELB側(cè)重新配置監(jiān)聽(tīng)器以及后端服務(wù)器路由。
3.當(dāng)用戶進(jìn)行訪問(wèn)時(shí),流量根據(jù)ELB中配置的轉(zhuǎn)發(fā)策略轉(zhuǎn)發(fā)到對(duì)應(yīng)的后端Service端口,然后再經(jīng)過(guò)Service二次轉(zhuǎn)發(fā)訪問(wèn)到關(guān)聯(lián)的各個(gè)工作負(fù)載。

Nginx Ingress Controller工作原理
Nginx型的Ingress使用彈性負(fù)載均衡(ELB)作為流量入口,并在集群中部署nginx-ingress插件來(lái)對(duì)流量進(jìn)行負(fù)載均衡及訪問(wèn)控制。
說(shuō)明:nginx-ingress插件直接使用社區(qū)模板與鏡像,CCE不提供額外維護(hù),不建議用于商用場(chǎng)景。開(kāi)源社區(qū)地址:https://github.com/kubernetes/ingress-nginx
Nginx型的Ingress Controller通過(guò)pod部署在工作節(jié)點(diǎn)上,因此引入了相應(yīng)的運(yùn)維成本和Nginx組件運(yùn)行成本,其工作原理如圖,實(shí)現(xiàn)步驟如下:
1.當(dāng)用戶更新Ingress資源后,Ingress Controller就會(huì)將其中定義的轉(zhuǎn)發(fā)規(guī)則寫入到Nginx的配置文件(nginx.conf)中。
2.內(nèi)置的Nginx組件進(jìn)行reload,加載更新后的配置文件,完成Nginx轉(zhuǎn)發(fā)規(guī)則的修改和更新。
3.在流量訪問(wèn)集群時(shí),首先被已創(chuàng)建的負(fù)載均衡實(shí)例轉(zhuǎn)發(fā)到集群內(nèi)部的Nginx組件,然后Nginx組件再根據(jù)轉(zhuǎn)發(fā)規(guī)則將其轉(zhuǎn)發(fā)至對(duì)應(yīng)的各個(gè)工作負(fù)載。

常見(jiàn)問(wèn)題
常見(jiàn)問(wèn)題
更多常見(jiàn)問(wèn)題?????????????????????
????????????????????更多常見(jiàn)問(wèn)題