一文搞懂 Ingress Controller 本質(zhì)
今天我們來(lái)聊一下云原生生態(tài)核心技術(shù)之流量管理—— Kubernetes Ingress Controller。

什么是 Ingress Controller ?
在云原生生態(tài)中,通常來(lái)講,入口控制器( Ingress Controller )是 Kubernetes 中的一個(gè)關(guān)鍵組件,用于管理入口資源對(duì)象。
Ingress 資源對(duì)象用于定義來(lái)自外網(wǎng)的 HTTP 和 HTTPS 規(guī)則,以控制進(jìn)入集群內(nèi)服務(wù)的流量。而 Ingress Controller 則是真正實(shí)現(xiàn) Ingress 規(guī)則的組件。

從更為準(zhǔn)確的角度而言,入口控制器( Ingress Controller )管理 L4 和 L7 層請(qǐng)求的南北向流量,也就是我們所說(shuō)的從集群外部進(jìn)入或離開(kāi)集群的流程。它通過(guò)解析 Ingress資源對(duì)象,配置負(fù)載調(diào)度規(guī)則,將外部請(qǐng)求按照域名、路徑等規(guī)則轉(zhuǎn)發(fā)到集群內(nèi)后端服務(wù) Pod 上。
而集群內(nèi)服務(wù)之間的東西向流量,則由服務(wù)發(fā)現(xiàn)機(jī)制進(jìn)行管理。例如 Pod 根據(jù)服務(wù)名稱查詢對(duì)方 Pod IP 進(jìn)行通信。
我們可以從更廣泛的視角來(lái)理解這兩種流量:
- 南北向流量指集群與外部網(wǎng)絡(luò)交互的流量。入口控制器( Ingress Controller )負(fù)責(zé)將外部請(qǐng)求路由到集群,同時(shí)支持外部訪問(wèn)集群內(nèi)服務(wù)。
- 東西向流量指集群內(nèi)各個(gè)微服務(wù)之間的調(diào)用流量。這里不需要顧慮網(wǎng)絡(luò)安全隔離問(wèn)題,負(fù)載由服務(wù)發(fā)現(xiàn)機(jī)制直接調(diào)度實(shí)現(xiàn)。
在整個(gè)網(wǎng)絡(luò)拓?fù)浼軜?gòu)中,兩者各司其職,形成了完整流量治理體系。入口控制器( Ingress Controller )統(tǒng)一入口,服務(wù)發(fā)現(xiàn)則實(shí)現(xiàn)內(nèi)部流量的松耦合通訊。這樣既保證了外部訪問(wèn)安全,也實(shí)現(xiàn)了集群內(nèi)各服務(wù)的高可用調(diào)用。這對(duì)于 Kubernetes 原生應(yīng)用架構(gòu)調(diào)優(yōu)和流量管控都大有利處。
從更為專業(yè)的角度進(jìn)行補(bǔ)充:Ingress 本身只是一個(gè) API 對(duì)象,定義了集群外部流量如何進(jìn)入集群內(nèi)各個(gè)服務(wù)的路由規(guī)則,但是它本身無(wú)法直接實(shí)現(xiàn)這些路由。
這里需要一個(gè)控制平面組件-入口控制器( Ingress Controller ),它監(jiān)聽(tīng) Ingress 資源對(duì)象的變更,并根據(jù) Ingress 規(guī)則進(jìn)行配置。一般來(lái)說(shuō),入口控制器實(shí)現(xiàn)了反向代理功能,例如 Nginx Ingress 或 Traefik 等。
入口控制器( Ingress Controller )通過(guò)監(jiān)聽(tīng)節(jié)點(diǎn)的某個(gè)端口,接收集群外部流量。它將根據(jù) Ingress 定義的規(guī)則,如域名、URL路徑、主機(jī)名等進(jìn)行匹配,然后利用負(fù)載均衡技術(shù)將流量轉(zhuǎn)發(fā)至后端對(duì)應(yīng)的 Pod 服務(wù)實(shí)例上。
同時(shí),入口控制器( Ingress Controller )也可以提供更豐富的流量管理能力,諸如基于IP或用戶名密碼的訪問(wèn)控制;超時(shí)重試與隔離;跨區(qū)域流量管理等。它通過(guò)對(duì)外提供統(tǒng)一入口,為內(nèi)部服務(wù)提供安全可靠的對(duì)外訪問(wèn)表現(xiàn)層。
一定需要入口控制器 (Ingress Controller)嗎 ?
通常,在容器云平臺(tái),尤其是私有云環(huán)境下,Kubernetes Cluster 內(nèi)各個(gè) Pod 僅能互相訪問(wèn),但外部網(wǎng)絡(luò)無(wú)法直接訪問(wèn)到集群內(nèi)的 Pod,這樣保證了集群的安全性。
當(dāng)需要對(duì)外提供服務(wù)時(shí),我們可以創(chuàng)建 Ingress 資源對(duì)象來(lái)定義路由規(guī)則,比如基于域名或 URL 路徑將流量轉(zhuǎn)發(fā)到后端不同服務(wù)上。
但是 Ingress 資源本身只是一個(gè)聲明,無(wú)法直接實(shí)現(xiàn)流量轉(zhuǎn)發(fā)這一功能。此時(shí)需要部署一個(gè)控制平面組件 入口控制器( Ingress Controller ) Pod(如 Nginx 或者 Traefik ),它會(huì)檢測(cè) Ingress 對(duì)象的變更,并根據(jù) Ingress 規(guī)則配置負(fù)載均衡設(shè)備或自身作反向代理。
入口控制器( Ingress Controller )以 Pod 形式運(yùn)行在集群內(nèi),從集群外部流入的請(qǐng)求通過(guò) 入口控制器( Ingress Controller ) 入口被轉(zhuǎn)發(fā)到后端服務(wù)上。
同時(shí),入口控制器( Ingress Controller ) 不僅可以實(shí)現(xiàn)單純的循環(huán)請(qǐng)求分配,也支持根據(jù)目標(biāo) URL 或域名提供虛擬主機(jī)、HTTPS、認(rèn)證等附加能力,充分利用其作為入口的功能。
因此,只有通過(guò)入口控制器( Ingress Controller ),才能真正意義上實(shí)現(xiàn) Ingress 定義的復(fù)雜流量管理規(guī)則,同時(shí)也通過(guò)統(tǒng)一入口對(duì)外提供安全可靠的服務(wù)訪問(wèn)能力,這就是 Ingress 實(shí)現(xiàn)外部訪問(wèn)的標(biāo)準(zhǔn)解決方案。
入口控制器 (Ingress Controller)工作原理 ?
通常而言,入口控制器( Ingress Controller )的一般工作原理,注涉及如下,具體:
- 定義 Ingress 規(guī)則:管理員通過(guò) Kubernetes 的 Ingress 資源對(duì)象定義流量的路由規(guī)則。Ingress 規(guī)則通常包括主機(jī)名、路徑、服務(wù)端口等信息,用于描述流量應(yīng)該如何被路由。
- Ingress Controller 監(jiān)聽(tīng) Ingress 資源:入口控制器( Ingress Controller )會(huì)監(jiān)聽(tīng) Kubernetes Cluster 中的 Ingress 資源對(duì)象的變化。它通過(guò)與 Kubernetes API 服務(wù)器進(jìn)行交互,獲取 Ingress 規(guī)則的更新和創(chuàng)建。
- 配置負(fù)載均衡器:入口控制器( Ingress Controller )根據(jù) Ingress 規(guī)則中定義的信息配置負(fù)載均衡器,以便將流量分發(fā)到后端服務(wù)。這通常涉及到負(fù)載均衡器的配置和更新,以反映 Ingress 規(guī)則的變化。
- 路由流量到后端服務(wù):一旦負(fù)載均衡器配置完畢,入口控制器( Ingress Controller )會(huì)根據(jù) Ingress 規(guī)則將流量路由到相應(yīng)的后端服務(wù)。它可能使用反向代理、 DNS 解析等技術(shù)來(lái)實(shí)現(xiàn)流量的轉(zhuǎn)發(fā)。
入口控制器 (Ingress Controller)能夠解決哪些問(wèn)題?
通常而言,入口控制器(Ingress Controller)是一個(gè)在 Kubernetes Cluster 中運(yùn)行的組件,用于管理和控制流入集群的網(wǎng)絡(luò)流量。其主要解決了以下幾個(gè)關(guān)鍵問(wèn)題:
- 負(fù)載均衡和流量路由:入口控制器(Ingress Controller)作為反向代理,通過(guò)負(fù)載均衡和流量路由機(jī)制將流量分發(fā)到后端服務(wù)。它可以根據(jù)請(qǐng)求的主機(jī)名、路徑、標(biāo)頭等條件將流量導(dǎo)向不同的服務(wù),實(shí)現(xiàn)靈活的流量管理。通過(guò)負(fù)載均衡和路由,入口控制器確保服務(wù)的可用性、可靠性和性能優(yōu)化。
- SSL/TLS 終止和證書(shū)管理:入口控制器(Ingress Controller)可以處理入站請(qǐng)求的 SSL/TLS 終止,即將加密的流量解密并轉(zhuǎn)發(fā)到后端服務(wù)。它支持在集群內(nèi)部生成、管理和更新 SSL/TLS 證書(shū),或與外部證書(shū)頒發(fā)機(jī)構(gòu)(如 Let's Encrypt)集成,實(shí)現(xiàn)自動(dòng)化的證書(shū)管理。通過(guò) SSL/TLS 終止和證書(shū)管理,入口控制器提供了安全的通信渠道,保護(hù)用戶數(shù)據(jù)的機(jī)密性和完整性。
- 訪問(wèn)控制和安全策略:入口控制器(Ingress Controller)提供了訪問(wèn)控制機(jī)制,允許管理員定義和強(qiáng)制執(zhí)行網(wǎng)絡(luò)流量的安全策略。它可以基于 IP 地址、網(wǎng)絡(luò)段、標(biāo)頭、請(qǐng)求方法等條件來(lái)限制對(duì)后端服務(wù)的訪問(wèn)。通過(guò)訪問(wèn)控制和安全策略,入口控制器可以防止未經(jīng)授權(quán)的訪問(wèn)和惡意請(qǐng)求,提高系統(tǒng)的安全性。
- 域名管理和多租戶支持:入口控制器(Ingress Controller)允許管理員輕松管理多個(gè)域名,并將其映射到不同的服務(wù)和路徑上。這對(duì)于支持多租戶環(huán)境非常有用,可以為每個(gè)租戶分配獨(dú)立的域名和訪問(wèn)路徑,實(shí)現(xiàn)隔離和定制化。通過(guò)域名管理和多租戶支持,入口控制器使得在同一個(gè)集群中托管多個(gè)應(yīng)用程序或服務(wù)更加靈活和可管理。
- 觀測(cè)及可見(jiàn)性:入口控制器(Ingress Controller)通常提供豐富的監(jiān)控和日志記錄功能,用于跟蹤和分析流入集群的網(wǎng)絡(luò)流量。它可以記錄請(qǐng)求和響應(yīng)的詳細(xì)信息,包括響應(yīng)時(shí)間、狀態(tài)碼、請(qǐng)求量等指標(biāo)。通過(guò)監(jiān)控和日志記錄,入口控制器幫助管理員了解流量模式、識(shí)別潛在問(wèn)題,并進(jìn)行系統(tǒng)性能優(yōu)化。
































