ALB Ingress Controller是一種用於Kubernetes叢集的Ingress Controller,用於將外部流量匯入到叢集內部的服務。當使用ALB Ingress訪問服務時,ALB Ingress Controller會監聽Service關聯的Endpoint資源的變化,即時將後端節點的狀態同步到對應的後端伺服器組中,並將變更同步到ALB執行個體。本文介紹在使用ALB Ingress過程中遇到的各種例外狀況事件的診斷和解決方案。
工作原理
通過ALB Ingress訪問服務時,ALB Ingress Controller組件會監控各類資源的變更,並將變更同步至關聯的ALB執行個體。同步過程中可能會因為各項限制或配置錯誤導致同步過程失敗,不同資源的邏輯對應關係和同步情況如下圖所示。
步驟一:查看例外狀況事件
控制台方式:在左側導覽列,選擇。選擇目標命名空間,單擊目標Ingress名稱進入基本資料頁面,然後切換到事件頁簽。
kubectl方式:
kubectl describe ingress <ingress-name> -n <namespace>預期輸出:
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedBuildModel 2m28s (x10 over 6m43s) ingress listener is not exist in alb, port: 443, protocol: HTTPS Normal Sync 19s (x32 over 11d) ingress Scheduled for sync Normal SuccessfullyReconciled 4s (x20 over 11d) ingress Successfully reconciled
在事件詳細描述或者Message中尋找與Ingress相關的事件資訊。
Scheduled for sync:表明事件開始。Successfully reconciled:表明完成調諧(reconciled),事件成功結束。Warning類型的報錯資訊請參考步驟二排查。若無例外狀況事件,但是變更未生效,請參見ALB Ingress無例外狀況事件,但是變更不生效怎麼辦?
步驟二:分析和解決例外狀況事件
常見例外狀況事件的報錯原因及解決方案見下表。
為避免老版本ALB Ingress Controller組件不相容新功能導致的例外狀況事件,診斷前可參考發布記錄將組件升級至目標版本。
報錯資訊(Message) | 報錯原因 | 解決方案 |
listener is not exist in alb, 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。 |
Message: Failed to create SSL Certificate with name default-https-secret-1-b585e6 ({namespace}-{name}-{identity}). Error: 認證已經到期。 | Secret認證已到期。異常資訊中認證名稱由三部分組成:
|
詳細配置方式,請參見配置HTTPS認證以實現加密通訊。 |
failed to createSSLCertificateWithName: XXX ErrorCode: NameRepeat Message: 名稱重複,請重新輸入。 | Ingress使用Secret認證,認證到期後使用配置AlbConfig方式上傳認證會複用到期認證的名稱,導致SSL認證名稱重複。 | |
invalid server group Cookie: |
| 使用重寫Cookie方式時,需配置實際的Cookie值: 更多參數說明,請參見通過註解實現會話保持。 |
| 通過組件管理升級ALB Ingress Controller組件。 | |
The quota of alb_quota_server_added_num is exceeded for resource eni-xxxx, usage 202/200 | 觸發了ALB的 | 通過配額中心提升伺服器組配額。 |
常見問題
ALB Ingress無例外狀況事件,但是變更不生效怎麼辦?
當出現未執行AlbConfig相關的調諧事件,或者變更事件沒有成功處理時,原因可能是IngressClass和AlbConfig的綁定關係錯誤。請參考使用IngressClass關聯AlbConfig與Ingress檢查IngressClass中指定的spec.parameters參數是否關聯了正確的AlbConfig資來源物件名稱。