ALB Ingress Controller是一種用於Kubernetes叢集的Ingress Controller,用於將外部流量匯入到叢集內部的服務。當使用ALB Ingress訪問服務時,ALB Ingress Controller會監聽Service和Endpoint資源的變化,即時將後端節點的狀態同步到對應的後端伺服器組中,並將變更同步到ALB控制台。本文介紹在使用ALB Ingress過程中遇到的各種例外狀況事件的診斷和解決方案。
資源同步原理
下方圖片展示了ALB Ingress資源同步的執行過程,具體可以描述為:
通過AlbConfig建立ALB執行個體與監聽listener1和listener2。
通過Ingress建立了兩條轉寄規則rule1和rule2並關聯到監聽listener2上,其中轉寄規則rule1配置了兩個服務,分別為vgroup1和vgroup2,轉寄規則rule2隻將流量轉寄到vgroup2。
通過監聽Service和Endpoint資源的變化,即時將後端節點的狀態同步到對應的後端伺服器組中。
在資源同步過程中,可能會遇到一些限制導致同步失敗。以下介紹如何查看、分析和解決例外狀況事件。
步驟一:查看例外狀況事件
將ALB Ingress Controller組件升級至最新版本。
事件通知會不斷更新,因此診斷前需要將ALB組件升級至最新版本。具體操作,請參見升級ALB Ingress Controller組件。
執行以下命令,查看Ingress的例外狀況事件。
kubectl -n <your-namespace> describe ingress <your-ingress-name>
在輸出結果中尋找以
Events
開頭的模組,該模組包含與Ingress相關的事件資訊。Scheduled for sync
:表明事件開始。Successfully reconciled
:表明事件成功結束。
步驟二:分析和解決例外狀況事件
常見例外狀況事件的報錯原因及解決方案見下表。
報錯資訊 | 報錯原因 | 解決方案 |
listener is not exist, port: 80, protocol: HTTP | 對於2.11.0及以上版本的ALB Ingress Controller組件,Ingress上的監聽只會進行關聯,不會自動建立。若您未在AlbConfig中建立對應的監聽,卻在Ingress中使用了監聽,就會產生報錯資訊。 | 若您使用的是2.11.0及以上版本的ALB Ingress Controller組件,請在AlbConfig中建立Ingress資源所需的監聽。具體操作,請參見通過AlbConfig配置ALB監聽。 |
listener not found for (80/HTTP), with ingresses 1 | 對於2.11.0及以上版本的ALB Ingress Controller組件,如果在AlbConfig中直接移除了Ingress仍在關聯的監聽,將會產生報錯,並顯示缺失的監聽和關聯的Ingress個數。 | 如需移除監聽,請將監聽關聯的Ingress全部移除。 重要 如果移除了預期外的監聽,則需重新添加已移除的監聽。 |
none certificate found for host | 開啟了TLS且有網域名稱使用了自動探索認證功能,但是在認證中心沒有發現該網域名稱可用的認證。 |
|
The param of Rules.1.RuleConditions.2.PathConfig.Values.1 is illegal | 建立或修改轉寄規則時包含非法路徑參數。 |
|
The param of ServerGroupName is illegal | 該報錯說明ALB後端伺服器組命名格式不正確。 | 請按照正確的格式命名伺服器組名稱。 當前伺服器組名稱的產生格式是 |
The specified resource sgp-vz2fb219vv792flx3u is in use | 該報錯說明該託管到ACK的ALB後端伺服器組被另外一個ALB執行個體引用。 | 登入應用型負載平衡ALB控制台,在左側導覽列選擇 ,在伺服器組頁面找到對應的後端伺服器組,根據需求解除關聯的ALB執行個體。 |
Message: 無效參數,請檢查參數輸入 | 常見於AlbConfig指定認證時,認證ID配置錯誤。 | 請檢查認證ID是否使用了資源ID或數字ID,應當使用CertIdentifier指定的認證ID。 |