容器智能營運平台提供Ingress診斷功能,協助您診斷Ingress常見問題。本文介紹Ingress診斷對應的檢查項以及修複方案。
Ingress診斷套件括Ingress檢查、啟動參數配置、Ingress Pod錯誤記錄檔、Ingress Controller SLB等檢查項。
使用故障診斷功能時,系統將在您的叢集節點上執行資料擷取程式並收集檢查結果。採集的資訊包括系統版本,負載、Docker、Kubelet等運行狀態及系統日誌中嚴重錯誤資訊。資料擷取程式不會採集您的商務資訊及敏感性資料。
Ingress診斷對應的檢查項
根據叢集配置,具體檢查項可能稍有不同。實際結果請以診斷頁面結果為準。
診斷項分組 | 說明 |
檢查叢集Ingress資源可用性等。 | |
檢查Ingress組件啟動參數配置、Ingress Service及Pod等。 | |
檢查Ingress Controller SLB狀態、最大串連數、QPS、健全狀態檢查等。 |
Ingress
檢查項 | 檢查項說明 | 修複方案 |
Ingress存在 | 檢查是否通過提供的資訊找到了對應的Ingress資源。 | 檢查所提供的URL資訊是否有能夠對應的Ingress規則。若URL資訊無誤,可能是Ingress規則存在問題,例如,使用了Regex作路徑,而沒有使用use-regex註解等。 |
使用base-url-scheme | 使用了 | 確認當前Ingress Controller版本,移除該註解或使用其他註解代替。 |
使用grpc-backend | 使用了 | 確認當前Ingress Controller版本,移除該註解或使用其他註解代替。 |
使用mirror-uri | 使用了 | 確認當前Ingress Controller版本,移除該註解或使用其他註解代替。 |
使用secure-backends | 使用了 | 確認當前Ingress Controller版本,移除該註解或使用其他註解代替。 |
使用session-cookie-hash | 使用了 | 確認當前Ingress Controller版本,移除該註解或使用其他註解代替。 |
使用nginx.com/nginx.org註解 | 檢查Ingress上是否使用了商業版Ingress的註解配置(以 | 請使用對應功能的正確用法。關於Ingress更多資訊,請參見Nginx Ingress管理或社區官方文檔Nginx Ingress Controller。 |
啟用Canary | 當使用Canary相關功能時,需要指定 | 如果您需要在該Ingress上開啟Canary功能,請在Ingress規則上添加 |
Addon
檢查項名稱 | 檢查項說明 | 修複方案 |
Ingress就緒Pod百分比 | Ingress Deployment已就緒的Pod百分比,此值小於100表明Ingress Pod可能出現問題導致啟動或健全狀態檢查失敗。 | 請根據錯誤記錄檔尋找問題Pod並修複。關於Ingress異常問題排查,請參見Nginx Ingress異常問題排查。 |
Ingress資源上存在地址 | 檢查Ingress資源被Ingress Controller成功更新了地址。 | 該值不存在時,檢查Ingress的IngressClass是否存在對應的Ingresse Controller,以及Controller是否正常工作。具體問題可查看其他檢查點的檢查結果。 |
Leader Pod存在 | 選主成功,存在Leader Pod。若該值不存在,可能是由於Pod啟動時間過短或Ingress Controller許可權配置問題導致。 | 檢查Ingress Pod是否存在錯誤記錄檔,並修複日誌問題。關於Ingress異常問題排查,請參見Nginx Ingress異常問題排查。 |
Nginx Ingress使用正確的Annotation | 社區版Nginx Ingress Controller使用 | 請設定正確的Annotation。關於Annotation更多資訊,請參見Annotations。 |
Nginx Ingress中rewrite-target配合擷取的群組使用 | 檢查使用了rewrite-target的Nginx Ingress規則是否與擷取的群組一起使用。在0.22.0及以上版本使用rewrite-target時,需要顯式指定擷取的群組,否則會造成流量轉寄異常。 | 請正確配置Ingress。關於Ingress配置更多資訊,請參見Nginx Ingress進階用法。 |
Nginx Ingress灰階規則 | 檢查service-match和service-weight是否指定不超過2個目標服務。service-match和service-weight僅支援2個服務間的流量分發,配置大於2個將導致多出的配置被忽略,出現流量不符合預期的情況。 | 請調整規則中的服務數量。 |
Ingress名稱 | 展示所匹配到的Ingress規則名稱。 | 無。 |
Pod錯誤記錄檔 | Ingress Controller Pod中存在錯誤記錄檔。出現錯誤記錄檔可能表示Ingress Controller工作異常。 | 根據錯誤記錄檔尋找原因並修複。關於Ingress異常問題排查,請參見Nginx Ingress異常問題排查。 |
使用rewrite-target時路徑中使用擷取的群組 | 在0.22.0及以上版本時,使用 | 請正確配置Ingress資訊。有關Ingress更多資訊,請參見配置URL重新導向的路由服務。 |
service-*配置多個目標 | service-weight和service-weight僅支援2個服務之間的流量分發,不支援3個及以上的服務。 | 請正確配置service-weight或service-match。有關配置更多資訊,請參見通過Nginx Ingress實現灰階發布和藍綠髮布。 |
Ingress Service存在 | Ingress啟動參數中指定的Service是否存在。該Service被刪除可能會導致Ingress啟動異常等情況。 | 在Deployment啟動參數中確認被刪除的Service名稱,並修複問題。更多資訊,請參見網路與負載平衡相關高危操作。 |
Ingress Service存在端點 | Ingress Service正確存在端點。若不存在,會導致SLB無法正常將流量轉寄到Ingress Controller中。 | 檢查Service的標籤選取器是否正常。 |
Ingress Service存在事件 | Ingress Service上存在Warning或Error事件。可能是由於SLB配置出現問題導致的。 | 檢查Service例外狀況事件,尋找原因並修複問題。有關Service異常問題排查,請參見Service例外狀況事件及處理方式。 |
Ingress Service外部流量策略 | 外部流量策略影響流量進入叢集後的分發方式。預設為Local,可以更改為Cluster。推薦使用Local模式,在不使用Local模式時,用戶端源IP可能無法正常保留,且會導致SLB健全狀態檢查不準確。 | 若您確認要使用Cluster模式或有叢集內部通過SLB地址訪問Ingress Controller的需求,請忽略該警告。否則,推薦將外部流量策略改為Local。 |
Ingress Service有外部IP地址 | Service上有通過CCM(Cloud Controller Manager)分配的IP地址。若不存在該地址,可能導致Ingress無法通過公網訪問。 | 檢查Service狀態、CCM狀態、SLB配額等指標是否正常。大部分問題通過事件的形式暴露。 |
Ingress Service為LoadBalancer類型 | Ingress啟動參數中指定的Service為LoadBalancer類型。如果不為該類型時,可能會導致Ingress Controller無法被外網訪問。 | 如果確認不需要LoadBalancer類型的Service,可忽略該警告。否則,請將Service類型改為LoadBalancer。 |
使用--force-namespace-isolation | 使用了 | 確認當前Ingress Controller版本,移除該啟動參數。 |
使用--sort-backends | 使用了 | 確認當前Ingress Controller版本,移除該啟動參數。 |
SLB
檢查項名稱 | 檢查項說明 | 修複方案 |
SLB存在 | 檢查Ingress Controller的SLB是否存在。 | 請檢查Ingress Controller Service是否存在,且無例外狀況事件,以及SLB控制台中是否存在對應SLB執行個體。若SLB執行個體被誤刪,可通過重建Service的方式進行恢複。具體操作,請參見誤刪除SLB怎麼辦?。 |
Ingress Controller SLB當前健全狀態檢查狀態 | 檢查當前事件SLB後端的健全狀態檢查狀態。 | 當前SLB後端健全狀態檢查狀態異常。請檢查Ingress Controller Service有無例外狀況事件,組件負載是否過高。關於組件異常問題排查,請參見Nginx Ingress異常問題排查。 |
SLB ID | 展示對應SLB執行個體的ID。 | 無。 |
Ingress Controller SLB最大串連數檢查 | 檢查SLB過去三天最大串連數是否超過上限的80%以上。串連數達到上限後無法建立新串連,可能會導致用戶端無法訪問。 | SLB執行個體串連數過高,為避免業務受損,請提升執行個體規格。具體操作,請參見使用指定的SLB執行個體。 |
Ingress Controller SLB建立串連速率檢查 | 檢查SLB過去三天最大建立串連速率是否超過上限的80%以上。建立串連速率達到上限後,短時間內無法建立新串連,導致用戶端無法訪問。 | SLB執行個體建立串連速率過高,為避免業務受損,請提升執行個體規格。具體操作,請參見使用指定的SLB執行個體。 |
Ingress Controller SLB QPS檢查 | 檢查SLB過去三天最大QPS是否達到上限的80%。QPS達到上限後,可能導致用戶端無法訪問。 | SLB執行個體QPS過高,為避免業務受損,請提升執行個體規格。具體操作,請參見使用指定的SLB執行個體。 |
TLS同時配置Host與SecretName | 配置Ingress TLS規則時,需要同時配置Host和SecretName欄位。 | 請同時配置Host與Secret欄位,並且確保Host與認證資訊對應。 |
Ingress Controller SLB 健全狀態檢查失敗檢查 | 檢查SLB過去三天是否存在健全狀態檢查失敗的情況,可能由於組件負載過高或配置錯誤引起。 | 過去三天記憶體在健全狀態檢查失敗,為避免業務受損,請檢查Ingress Controller Service有無例外狀況事件,組件負載是否過高。關於組件異常問題排查,請參見Nginx Ingress異常問題排查。 |