全部產品
Search
文件中心

Container Service for Kubernetes:Ingress概述

更新時間:Jun 21, 2025

在Kubernetes叢集中,Ingress管理外部存取到叢集內部服務的流量,提供七層負載平衡能力。本文介紹Ingress基本概念、工作原理和使用說明。

索引

Ingress基本概念

在Kubernetes叢集中,Ingress作為叢集內服務對外暴露的訪問存取點,幾乎承載著叢集內服務訪問的所有流量。Ingress是Kubernetes中的一個資來源物件,用來管理叢集外部存取叢集內部服務的方式。您可以通過Ingress資源來配置不同的轉寄規則,從而實現根據不同的規則設定訪問叢集內不同的Service所對應的後端Pod。關於ACK中Ingress對比的詳細內容,請參見Nginx Ingress、ALB Ingress和MSE Ingress對比

Nginx Ingress Controller

當前Kubernetes官方維護的是Nginx Ingress Controller,ACK基於社區版的Nginx Ingress Controller進行了最佳化。ACK的Nginx Ingress Controller與社區版完全相容,支援社區所有的Annotation。

工作原理

為了使Nginx Ingress資源正常工作,叢集中必須要有一個Nginx Ingress Controller來解析Nginx Ingress的轉寄規則。Nginx Ingress Controller收到請求,匹配Nginx Ingress轉寄規則,將請求轉寄到後端Service所對應的Pod,由Pod處理請求。Kubernetes中的Service、Nginx Ingress與Nginx Ingress Controller有著以下關係:

  • Service是後端真實服務的抽象,一個Service可以代表多個相同的後端服務。

  • Nginx Ingress是反向 Proxy規則,用來規定HTTP/HTTPS請求應該被轉寄到哪個Service所對應的Pod上。例如根據請求中不同的Host和URL路徑,讓請求落到不同的Service所對應的Pod上。

  • Nginx Ingress Controller是Kubernetes叢集中的一個組件,負責解析Nginx Ingress的反向 Proxy規則。如果Nginx Ingress有增刪改的變動,Nginx Ingress Controller會及時更新自己相應的轉寄規則,當Nginx Ingress Controller收到請求後就會根據這些規則將請求轉寄到對應Service的Pod上。

Nginx Ingress Controller通過API Server擷取Ingress資源的變化,動態地產生負載平衡(例如Nginx)所需的設定檔(例如nginx.conf),然後重新載入負載平衡(例如執行nginx -s reload重新載入Nginx)來產生新的路由轉寄規則。S2

Nginx Ingress Controller可通過配置LoadBalancer類型的Service來建立SLB,因此可以從外部通過SLB訪問到Kubernetes叢集的內部服務。根據Nginx Ingress配置的不同規則,可以訪問不同的服務。

Nginx Ingress相關文檔

ALB Ingress Controller

ALB Ingress基於阿里雲應用型負載平衡ALB(Application Load Balancer)之上提供更為強大的Ingress流量管理方式,相容Nginx Ingress,具備處理複雜業務路由和認證自動探索的能力,支援HTTP、HTTPS和QUIC協議,完全滿足在雲原生應用情境下對超強彈性和大規模七層流量處理能力的需求。

警告

ALB Ingress Controller所屬的ALB執行個體由Controller完全託管,請勿在ALB控制台上面進行配置,否則可能造成Ingress服務的異常。

工作原理

ALB Ingress Controller通過API Server擷取Ingress資源的變化,動態地產生AlbConfig,然後依次建立ALB執行個體、監聽、路由轉寄規則以及後端伺服器組。Kubernetes中Service、Ingress與AlbConfig有著以下關係:

  • Service是後端真實服務的抽象,一個Service可以代表多個相同的後端服務。

  • Ingress是反向 Proxy規則,用來規定HTTP/HTTPS請求應該被轉寄到哪個Service上。例如,根據請求中不同的Host和URL路徑,讓請求轉寄到不同的Service上。

  • AlbConfig是在ALB Ingress Controller提供的CRD資源,使用AlbConfig CRD來配置ALB執行個體和監聽。一個AlbConfig對應一個ALB執行個體。

ALB Ingress相關文檔

MSE Ingress Controller

MSE Ingress是在MSE雲原生網關之上提供更為強大的Ingress流量管理方式,相容Nginx Ingress以及50多個Nginx Ingress的註解,覆蓋90%以上的Nginx Ingress業務情境,支援多服務版本同時灰階發布、靈活的服務治理能力以及全方位的安全防護保障,能夠滿足大規模雲原生分布式應用的流量治理訴求。

工作原理

組成部分

  • MSE Ingress Controller

    MSE Ingress Controller本身不是網路資料平面,它是管理MSE雲原生網關執行個體以及配置的控制平面。即MSE Ingress Controller不處理任何業務請求流量,它位於流量旁路,管理著處理業務流量的MSE雲原生網關執行個體。

    您需要在ACK或者ACK Serverless叢集中安裝MSE Ingress Controller,通過使用該組件提供的MseIngressConfig的CRD資源以聲明式配置的方式來管理雲原生網關執行個體,以及設定網關對Ingress資源的監聽選項。

    關於如何安裝MSE Ingress Controller組件,請參見管理MSE Ingress Controller組件

  • MSE雲原生網關:由MSE Ingress Controller根據使用者配置的MseIngressConfig資源建立,包含控制面(Control Plane)和資料面(Data Plane)。

    • 控制面(Control Plane):控制面監聽您已關聯的ACK叢集中的Ingress、IngressClass、Service等資源,經內部解析後即時下發給網關資料面。

    • 資料面(Data Plane):資料面是流量治理配置的實施者,按照控制面下發的治理規則處理外部請求,並轉寄到後端目標服務。

工作機制

MSE Ingress Controller負責監聽叢集中建立的MseIngressConfig資源,即時動態維護該資源對應的雲原生網關執行個體的生命週期以及該網關與ACK叢集的關聯關係。

MSE雲原生網關的控制面通過關聯的ACK叢集的API Server擷取Ingress資源的變化,然後動態更新MSE雲原生網關的路由規則。當MSE雲原生網關收到請求時,匹配Ingress轉寄規則將請求轉寄到後端Service所對應的Pod。

Kubernetes中Service、Ingress、IngressClass、MseIngressConfig和MSE Ingress Controller存在以下關係:

  • Service:是後端真實服務的抽象,一個Service可以代表多個相同的後端服務。

  • Ingress:是反向 Proxy規則,用來規定HTTP和HTTPS請求應該被轉寄到哪個Service上。例如,根據請求中不同的Host和URL路徑,使請求轉寄到不同的Service上。

  • IngressClass:是Ingress處理器的描述,用於在K8s叢集中聲明一個Ingress處理器實現,關聯該IngressClass的Ingress資源會被該Ingress處理器解析。此外,需要通過IngressClass的Parameter欄位關聯一個MseIngressConfig(MSE雲原生網關),用於實施被解析的Ingress資源描述的流量管理規則。

  • MseIngressConfig:是由MSE Ingress Controller提供的CRD,用於描述雲原生網關執行個體的基本資料。

  • MSE Ingress Controller:本身不是網路資料平面,它是管理MSE雲原生網關執行個體以及配置的控制平面。MSE Ingress Controller負責監聽叢集中的MseIngressConfig資源,協調MSE雲原生網關執行個體用於實施Ingress資源描述的流量管理規則。

下圖是MSE Ingress Controller工作示意圖。

ingress的應用情境

MSE Ingress相關文檔