全部產品
Search
文件中心

Container Service for Kubernetes:Ingress診斷

更新時間:Jun 19, 2024

容器智能營運平台提供Ingress診斷功能,協助您診斷Ingress常見問題。本文介紹Ingress診斷對應的檢查項以及修複方案。

Ingress診斷套件括Ingress檢查、啟動參數配置、Ingress Pod錯誤記錄檔、Ingress Controller SLB等檢查項。

重要

使用故障診斷功能時,系統將在您的叢集節點上執行資料擷取程式並收集檢查結果。採集的資訊包括系統版本,負載、Docker、Kubelet等運行狀態及系統日誌中嚴重錯誤資訊。資料擷取程式不會採集您的商務資訊及敏感性資料。

Ingress診斷對應的檢查項

說明

根據叢集配置,具體檢查項可能稍有不同。實際結果請以診斷頁面結果為準。

診斷項分組

說明

Ingress

檢查叢集Ingress資源可用性等。

Addon

檢查Ingress組件啟動參數配置、Ingress Service及Pod等。

SLB

檢查Ingress Controller SLB狀態、最大串連數、QPS、健全狀態檢查等。

Ingress

檢查項

檢查項說明

修複方案

Ingress存在

檢查是否通過提供的資訊找到了對應的Ingress資源。

檢查所提供的URL資訊是否有能夠對應的Ingress規則。若URL資訊無誤,可能是Ingress規則存在問題,例如,使用了Regex作路徑,而沒有使用use-regex註解等。

使用base-url-scheme

使用了nginx.ingress.kubernetes.io/base-url-scheme,該註解已在0.22.0版本廢棄。

確認當前Ingress Controller版本,移除該註解或使用其他註解代替。

使用grpc-backend

使用了nginx.ingress.kubernetes.io/grpc-backend,該註解已在0.21.0版本廢棄。

確認當前Ingress Controller版本,移除該註解或使用其他註解代替。

使用mirror-uri

使用了nginx.ingress.kubernetes.io/mirror-uri,該註解已在0.24.0版本廢棄。

確認當前Ingress Controller版本,移除該註解或使用其他註解代替。

使用secure-backends

使用了nginx.ingress.kubernetes.io/secure-backends,該註解已在0.21.0版本廢棄。

確認當前Ingress Controller版本,移除該註解或使用其他註解代替。

使用session-cookie-hash

使用了nginx.ingress.kubernetes.io/session-cookie-hash,該註解已在0.24.0版本廢棄。

確認當前Ingress Controller版本,移除該註解或使用其他註解代替。

使用nginx.com/nginx.org註解

檢查Ingress上是否使用了商業版Ingress的註解配置(以nginx.com/nginx.org開頭),該配置無法在社區版Nginx Ingress Controller上使用。

請使用對應功能的正確用法。關於Ingress更多資訊,請參見Nginx Ingress管理或社區官方文檔Nginx Ingress Controller

啟用Canary

當使用Canary相關功能時,需要指定nginx.ingress.kubernetes.io/canary: "true"。如果沒有指定開啟,Canary功能不會生效。

如果您需要在該Ingress上開啟Canary功能,請在Ingress規則上添加nginx.ingress.kubernetes.io/canary: "true"註解。

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使用nginx.ingress.kubernetes.io開頭的Annotation,而不是以nginx.com/nginx.org開頭。因為使用nginx.com/nginx.org開頭的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及以上版本時,使用nginx.ingress.kubernetes.io/rewrite-target註解時,需要配合擷取的群組一起使用,否則可能會導致轉寄路徑出錯。

請正確配置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

使用了--force-namespace-isolation啟動參數,該參數已經在0.24.0版本廢棄。

確認當前Ingress Controller版本,移除該啟動參數。

使用--sort-backends

使用了--sort-backends啟動參數,該參數已經在0.22.0版本廢棄。

確認當前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異常問題排查