使用ALB Ingress時,您需要在叢集中建立多種資源以配置由ALB Ingress到後端Pod的完整轉寄路徑。您可以參考本文快速部署樣本後端應用,並建立ALB Ingress以對外提供服務。
注意事項
如果您使用的是Flannel網路外掛程式,則ALB Ingress後端Service服務僅支援NodePort和LoadBalancer類型。
AlbConfig、Namespace、Ingress和Service這些資源的名稱不能以aliyun開頭。
低版本Nginx Ingress Controller無法識別Ingress資源中的
spec:ingressClassName
欄位。如果叢集中同時存在Nginx Ingress和ALB Ingress,會存在ALB Ingress被低版本Nginx Ingress Controller調諧的風險。因此,請及時升級Nginx Ingress Controller版本,或通過Annotation註解項指定ALB Ingress對應的ingressClass。具體操作,請參見升級Nginx Ingress Controller組件或ALB Ingress服務進階用法。
使用說明
在您開始建立ALB Ingress之前,建議先通過ALB Ingress管理,瞭解它的原理和要求。確保滿足以下資源條件:
ACK專有叢集中使用ALB Ingress,需要為ALB Ingress Controller授權。相關操作請參見為ACK專有叢集授予ALB Ingress Controller存取權限。
在安裝ALB Ingress組件時,您可以選擇不同的ALB雲原生網關執行個體來源,這將影響操作結果:
(推薦)選擇建立或使用已有:
Controller會自動建立名為
alb
的AlbConfig和相應的IngressClass資源。在AlbConfig中,預設配置一個監聽連接埠為80、協議為HTTP的監聽。選擇暫不建立:
在建立ALB Ingress之前,您需要先手動建立AlbConfig和IngressClass,因為Controller不會自動建立這些資源。
AlbConfig和IngressClass
AlbConfig:
用於管理ALB執行個體,其參數決定了ALB執行個體的配置。一個AlbConfig對應一個ALB執行個體。更多配置請參見通過AlbConfig配置ALB執行個體。
IngressClass:
需要關聯一個AlbConfig,從而實現與一個ALB執行個體的關聯。在建立ALB Ingress時可以通過指定該IngressClass來引用相應的AlbConfig配置,從而實現特定的應用路由配置和負載平衡策略。
建立樣本應用和Service
Service:為具有相同功能的Pod提供了一個穩定、統一的入口。在建立ALB Ingress時需要配置路由規則將外部流量轉寄到對應的Service。
本文樣本介紹安裝ALB Ingress組件時ALB雲原生網關執行個體將選擇建立。然後將部署名為coffee
和tea
的應用及對應Service,並為其建立一個網域名稱為demo.domain.ingress.top
的ALB Ingress。在完成DNS網域名稱解析後,您將能夠訪問該應用。
安裝組件
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇
。在組件管理頁面,單擊網路頁簽,在網路組件地區,在ALB Ingress Controller組件卡片的右下角單擊安裝。
在安裝組件 ALB Ingress Controller對話方塊,在ALB 雲原生網關執行個體來源中根據情況選擇建立,然後單擊確定。
執行個體來源
描述
結果說明
建立
網路類型:根據需要可選擇建立公網或私網的ALB執行個體,計費詳情請參見ALB計費規則。
專用網路:預設值,與叢集中專用網路相同。
虛擬交換器:展示此專用網路下ALB支援的可用性區域對應的虛擬交換器。需要指定2個不同可用性區域的交換器,若不指定,則自動挑選2個可用交換器。您也可以通過單擊建立虛擬交換器建立新的交換器。
Controller會自動建立名為
alb
的AlbConfig和相應的IngressClass資源。在AlbConfig中,預設配置一個監聽連接埠為80、協議為HTTP的監聽。關於監聽擴充請參見建立HTTPS監聽。使用已有
您可以從下拉式功能表中選擇已有的ALB執行個體進行複用。不支援使用基礎版ALB執行個體。詳情請參見複用已有ALB執行個體。
暫不建立
暫時不建立ALB執行個體,僅安裝ALB Ingress Controller組件。
Controller將不會建立相應資源,您需手動建立AlbConfig和建立IngressClass。
建立樣本應用和Service
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
單擊使用YAML建立資源。
樣本模板:選擇自訂。
模板:輸入YAML設定檔代碼。該設定檔用於部署兩個名稱分別為
coffee
和tea
的Deployment,以及兩個名稱分別為coffee-svc
和tea-svc
的Service。
配置完成後單擊建立,頁面將提示建立成功。
檢查Deployment和Service建立成功:
在左側導覽列,選擇工作負載 > 無狀態。可查看到名稱為coffee和tea的Deployment已部署。
在左側導覽列,選擇網路 > 服務。可查看到名稱為coffee-svc和tea-svc的Service已部署。
kubectl
建立並拷貝以下內容到cafe-service.yaml檔案中,用於部署兩個名稱分別為
coffee
和tea
的Deployment,以及兩個名稱分別為coffee-svc
和tea-svc
的Service。執行以下命令,部署兩個Deployment和兩個Service。
kubectl apply -f cafe-service.yaml
預期輸出:
deployment "coffee" created service "coffee-svc" created deployment "tea" created service "tea-svc" created
執行以下命令,查看應用和服務的狀態。
執行以下命令,查看應用的狀態。
kubectl get deployment
預期輸出:
NAME READY UP-TO-DATE AVAILABLE AGE coffee 1/2 2 1 2m26s tea 1/1 1 1 2m26s
執行以下命令,查看服務的狀態。
kubectl get svc
預期輸出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE coffee-svc NodePort 172.16.XX.XX <none> 80:32056/TCP 9m38s tea-svc NodePort 172.16.XX.XX <none> 80:31696/TCP 9m38s
建立ALB Ingress
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在路由頁面,單擊建立 Ingress,在建立 Ingress對話方塊配置路由。
配置項
說明
樣本值
網關類型
可按需選擇ALB Ingress、MSE Ingress和Nginx Ingress三種網關類型。
關於三種網關的差異,請參見Nginx Ingress、ALB Ingress和MSE Ingress對比。
ALB Ingress
名稱
自訂路由名稱。
cafe-ingress
Ingress Class
選擇關聯AlbConfig的資源類。
alb
規則
單擊+ 添加規則可新增多個路由規則。
網域名稱:自訂網域名。
路徑映射:配置如下配置項。
路徑:指定服務訪問的URL路徑。
匹配規則:
首碼匹配(Prefix):匹配請求URL路徑的首碼部分。
完整匹配(Exact):完全符合請求URL路徑。
預設(ImplementationSpecific):由Ingress控制器實現的具體邏輯決定。
更多詳情請參見基於URL路徑轉寄請求。
服務名稱:選擇目標服務,即K8s內的Service。
連接埠:選擇服務需要暴露的連接埠。
Ingress支援同一個網域名稱下配置多條路徑。單擊+ 添加路徑新增路徑。
網域名稱:demo.domain.ingress.top
路徑映射:
路徑:/tea
匹配規則:首碼匹配(Prefix)
服務名稱:tea-svc
連接埠:80
路徑映射:
路徑:/coffee
匹配規則:首碼匹配(Prefix)
服務名稱:coffee-svc
連接埠:80
其他配置保持預設,參數詳情請參見配置擴充。
配置完成,在建立Ingress頁面的左下角,單擊確定。
檢查Ingress建立成功並複製端點:
在左側導覽列,選擇網路 > 路由。可查看到名稱為
cafe-ingress
的Ingress已部署。在
cafe-ingress
的端點列,複製其對應的ALB DNS端點名稱。
kubectl
建立並拷貝以下內容到cafe-ingress.yaml檔案中,用於建立Ingress。
可調整參數說明如下:
參數
是否必填
說明
metadata.name
是
Ingress的名稱。
說明Ingress的名稱在叢集中必須是唯一的。因此,在建立Ingress時,您需要確保Ingress名稱的唯一性,以避免命名衝突。
spec.ingressClassName
是
關聯的IngressClass的名稱。
spec.rules.host
否
HTTP頭部host欄位網域名稱資訊,需要配置為您的自有網域名稱。
當您在瀏覽器中訪問您的自有網域名稱時,例如“http://demo.domain.ingress.top”,瀏覽器會在發送HTTP請求時自動添加一個“Host: demo.domain.ingress.top”的頭部欄位。這樣,伺服器就可以根據該頭部欄位來識別請求的目標主機名稱。在Kubernetes中,Ingress規則中的host欄位會與來自請求的Host頭部欄位進行匹配。當匹配成功時,Ingress規則就會將請求路由到相應的後端服務進行處理。
說明此處如果配置了自有網域名稱,需要確保該自有網域名稱完成備案,否則可能訪問時無法解析。具體操作,請參見ICP備案流程。
此處如果未配置,那麼該Ingress規則將匹配所有到達Ingress Controller的請求。
spec.rules.http.paths.path
是
轉寄路徑URL。
spec.rules.http.paths.pathType
是
URL匹配規則。詳情可參考基於URL路徑轉寄請求。
spec.rules.http.paths.backend.service.name
是
填寫您此前建立的Service名稱。
spec.rules.http.paths.backend.service.port.number
是
填寫您此前建立的Service的服務連接埠號碼。
這個連接埠號碼的設定非常重要,因為它決定了在路由到後端服務時使用的連接埠。確保連接埠號碼正確設定,以確保請求可以正確路由到後端服務並被處理。
執行以下命令,配置
coffee
和tea
服務對外暴露的網域名稱和path
路徑。kubectl apply -f cafe-ingress.yaml
預期輸出:
ingress.networking.k8s.io/cafe-ingress created
(可選)執行以下命令擷取ALB執行個體DNS地址。
kubectl get ingress
預期輸出:
NAME CLASS HOSTS ADDRESS PORTS AGE cafe-ingress alb demo.domain.ingress.top alb-m551oo2zn63yov****.cn-hangzhou.alb.aliyuncs.com 80 50s
佈建網域名解析
登入網域名稱解析控制台。
在權威網域名稱解析頁面單擊添加網域名稱。
在添加網域名稱對話方塊中輸入您的網域名稱,然後單擊確認。
重要您的主機網域名稱需已完成TXT記錄驗證。
在目標網域名稱的操作列單擊解析設定。
在解析設定頁面單擊添加記錄。
在添加記錄面板配置以下資訊完成CNAME解析配置,然後單擊確認。
配置項
說明
記錄類型
在下拉欄中選擇CNAME。
主機記錄
您的網域名稱的首碼,例如
www
。解析請求來源
選擇預設。
記錄值
輸入欄位名對應的CNAME地址,即您複製的ALB DNS端點。
TTL
全稱Time To Live,表示DNS記錄在DNS伺服器上的緩衝時間,本文使用預設值。
測試流量轉寄
在瀏覽器中輸入“測試網域名稱+URL路徑”,測試流量轉寄是否正確。
測試網域名稱以demo.domain.ingress.top
為例
在瀏覽器中輸入
demo.domain.ingress.top/coffee
,將返回coffee-svc
對應的後端服務介面。在瀏覽器中輸入
demo.domain.ingress.top/tea
,將返回tea-svc
對應的後端服務介面。
(可選)配置擴充
配置項 | 參數說明 | 相關文檔 |
TLS配置 | 開啟TLS配置開關,配置安全的路由服務。
單擊+ 新增TLS配置,可配置多條TLS。 | |
更多配置 | ||
自訂轉寄規則 |
常見問題
如果遇到問題,您可以對ALB Ingress異常問題進行排查,以下是常見問題。
AlbConfig資源報錯listener is not exist in alb, port: xxx?
預設的AlbConfig只配置了連接埠80的監聽,需要建立其他監聽請參見建立監聽。
配置AlbConfig的HTTP和HTTPS監聽後,如何在Ingress資源中同時監聽HTTP和HTTPS協議的監聽?
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress annotations: alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]' # 使用多個監聽時需要添加annotation使ALB Ingress正常工作。 spec: #...