容器智能運維平臺提供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規則存在問題,例如,使用了正則表達式作路徑,而沒有使用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異常問題排查。 |