全部產品
Search
文件中心

Microservices Engine:雲原生網關FAQ

更新時間:Oct 09, 2024

本文介紹MSE雲原生網關使用過程中的常見問題。

MSE雲原生網關支援IPv6嗎?

支援。網關的流量入口是CLB/NLB,只需在基本概覽頁面的網關入口頁簽綁定一個開啟IPv6的CLB或者NLB即可。

雲原生網關支援x-real-ip要求標頭嗎?

預設不支援。x-real-ip是Nginx特有要求標頭,需要使用網關的http-real-ip外掛程式,該外掛程式會根據配置提取用戶端IP然後將其寫入x-real-ip要求標頭中。

雲原生網關支援x-forwarded-for要求標頭嗎?

支援。如果原始請求中攜帶x-forwarded-for要求標頭,網關會將新的IP地址添加到該要求標頭的末尾。該IP是網關前一跳的地址。如果原始請求中沒有x-forwarded-for,網關會添加該要求標頭並將新的IP地址寫入其中。

說明

SpringBoot內建的Tomcat會預設刪除x-forwarded-for頭部中的最後一個地址。通過SpringBoot新增配置server.forward-headers-strategy=none可以避免這種刪除操作。

雲原生網關中轉寄請求出現upstream connect error or disconnect/reset header問題

該問題是由於後端服務的安全性群組不允許網關訪問服務連接埠引起的upstream connect error or disconnect/reset header問題。您可以在網關執行個體的基本概覽頁面,單擊安全性群組授權頁簽,然後單擊授權安全性群組新增安全性群組配置。網關會直接轉寄請求到ACK的Pod IP,安全性群組授權中需要開放Pod使用的連接埠。

雲原生網關中如何使用Header來匹配網域名稱?

建立路由時新增要求標頭Header匹配規則。Header欄位名填 :authority,Header值填具體的網域名稱。

雲原生網關看不到外掛程式日誌

可能的原因有:

  • 外掛程式預設只列印Info及以上層級的日誌,當前記錄層級為Trace或Debug時不會列印。

  • 外掛程式沒有正常啟動,可能是由於編譯問題。可以清空預設日誌查詢語句,以便查看外掛程式啟動階段的報錯日誌。請參考外掛程式開發文檔進行正確的編譯,並在本地使用docker compose模式進行外掛程式調試,以確認外掛程式本身沒有問題,然後再將其上傳到雲原生網關。

雲原生網關請求因為Body太大報錯

該問題是由於網關串連Buffer太小導致的。可以調大Buffer:

  • 如果協議為HTTP 1.x:在控制台調整參數DownstreamConnectionBufferLimits

  • 如果協議為HTTP 2:在控制台調整參數DownstreamConnectionBufferLimitsInitialStreamWindowSize

雲原生網關添加服務來源的限制有哪些?

  • 單個網關執行個體最多隻能關聯3個ACKContainer Service。

  • 單個網關執行個體最多隻能關聯1個Nacos執行個體。

雲原生網關添加服務來源時無法選到已有的Nacos或者ACK?

雲原生網關只能添加同VPC內的Nacos或者ACK,不支援跨VPC添加服務來源。

雲原生網關是否支援自有HTTPS認證?

雲原生網關自身不託管認證,會從阿里雲SSL拉取認證。您可以通過在SSL認證服務上傳自有認證,然後在網關網域名稱中配置。

雲原生網關控制台參數變更會不會對現有流量造成影響?

  • XffTrustedNum修改後,需要重啟網關才會生效。

  • UpstreamIdleTimeout修改後,上遊串連會斷開重連。

  • DownstreamIdleTime修改後,下遊串連會斷開重連。

雲原生網關CLB的443連接埠健康檢測狀態顯示異常

在網關上沒有配置HTTPS網域名稱時,網關不會監聽443連接埠,因此CLB 443連接埠健康檢測顯示異常。您需要在網關上配置HTTPS網域名稱,具體操作,請參見建立網域名稱。如果使用Ingress,具體操作,請參見K8s Ingress

雲原生網關建立服務後,健全狀態檢查狀態顯示異常

網關給後端服務轉寄請求的前提是保證網關與後端服務網路的連通性。服務的健全狀態檢查狀態為異常,一般有以下幾種情況:

  • 對於VPC內的私網服務,請檢查後端服務所在的安全性群組是否已經授權網關訪問對應的連接埠,請參見設定安全性群組規則

  • 對於公網上的服務,請檢查VPC是否具有公網訪問的能力,可嘗試使用公網NAT GatewaySNAT功能訪問互連網,請參見使用公網NAT GatewaySNAT功能訪問互連網

  • 對於HTTP類型的健全狀態檢查,請確保請求路徑和請求網域名稱設定正確。

  • 對於HTTP類型的健全狀態檢查,若後端服務的健全狀態檢查介面需要通過HTTPS來訪問,請在服務的策略配置中設定為單向TLS模式。

  • 對於HTTP類型的健全狀態檢查,若以上步驟均沒問題,可能是健全狀態檢查的間隔時間與後端服務的串連保持時間相同所致,可嘗試調大健全狀態檢查的間隔時間。

雲原生網關如何判斷請求錯誤原因?

  • 查看響應Header是否包含x-envoy-upstream-service-time頭部。正常情況下,若響應中包含x-envoy-upstream-service-time頭部,則表明網關已將請求轉寄給後端服務處理,後續的請求出錯與後端服務自身邏輯存在很大的關係。

  • 查看網關的訪問日誌中upstream_service_time是否為空白。正常情況下,若訪問日誌中欄位upstream_service_time不為空白,則表明網關已將請求轉寄給後端服務處理,後續的請求出錯與後端服務自身邏輯存在很大的關係。

雲原生網關中更新HTTPS認證後不生效?

該問題通常是由於在網關前面也配置了HTTPS認證,例如CLB、DCDN、WAF、DDoS高防等。請檢查網關前面的節點是否也同步更新了HTTPS認證,最佳實務是只在一個地方做HTTPS認證配置,如果網關前面接了DCDN、WAF,可以只在其上配置HTTPS,後端網關走HTTP即可。

雲原生網關中修改參數配置項不生效?

該問題通常是由於使用了MSE Ingress。在MseIngressConfig中有相關的配置項,MSE Ingress會自動同步MseIngressConfig中的配置項到MSE網關控制台,在控制台修改配置項後有可能出現被MSE Ingress同步資訊覆蓋的情況,建議統一使用MSE Ingress方式修改配置項。

雲原生網關路由優先順序是怎麼排序的?

在網關執行個體路由配置頁面看到的路由配置列表順序就是路由匹配優先順序順序。該順序是由高到低,匹配優先順序分為網域名稱與路由規則。網域名稱匹配是精確網域名稱大於泛網域名稱,例如test.example.com的優先順序大於*.example.com網域名稱。同網域名稱的Path優先順序匹配規則是精確匹配 > 首碼匹配 > 正則匹配,同網域名稱同Path的優先順序匹配規則是匹配條件多 > 匹配條件少(匹配條件:Header、Query匹配條件)。

雲原生網關前面接DCDN後,HTTPS請求訪問失敗?

該問題通常是由於DCDN在回源訪問網關時沒有攜帶SNI引起。請在DCDN的回源配置中設定回源SNI。

雲原生網關前面接WAF後,HTTPS請求訪問失敗?

該問題通常是由於WAF在回源訪問網關時沒有攜帶SNI引起。在WAF中使用CNAME方式接入的,需要修改對應接入網域名稱,在配置轉寄中選擇啟用回源SNI

雲原生網關是否支援Websocket?

支援,且預設開啟Websocket協議支援。

雲原生網關是否支援gRPC?

支援。gRPC使用HTTP 2協議傳輸,請確認網關參數配置中的EnableHttp2 = true

雲原生網關是否支援GZIP解壓縮?

支援。請確認網關參數配置中的EnableGzip = true,壓縮演算法支援Gzip與Brotli,通過參數ZipAlgorithm配置,預設Gzip。

雲原生網關是否支援保留請求/回應標頭的大小寫?

支援。請確認網關參數配置中的PreserveHeaderFormat = true。該參數只對HTTP 1.0或者1.1生效,根據規範HTTP 2協議要求請求/回應標頭全部為小寫。

雲原生網關是否支援HTTP/3?

支援。請確認網關參數配置中的EnableHttp3 = true

雲原生網關是否支援自訂監聽連接埠?

支援。雲原生網關支援HTTP(80連接埠)與HTTPS(443連接埠)。在CLB控制台新增監聽連接埠,例如新增TCP 8080連接埠與80連接埠設定為同一個虛擬伺服器組即可處理HTTP協議。

雲原生網關為什麼請求經過網關後,請求/回應標頭全部變成小寫?

網關預設會將請求/回應標頭全部置為小寫。如果需要保留大小寫,調整網關參數配置中的PreserveHeaderFormat = true

雲原生網關建立了一個DNS網域名稱服務 (DNS),為什麼訪問失敗?

如果配置的DNS網域名稱是公網網域名稱,需要在NAT Gateway中配置SNAT允許網關訪問外網,網關預設無法訪問外網。

雲原生網關請求出現400錯誤

該錯誤通常是由於以下兩種可能原因:

  • 用戶端發送的協議錯誤。查看網關的訪問日誌,日誌中response_flags = DPE

  • 後端服務返回的400。查看網關的訪問日誌,如果日誌中response_flags等於空且upstream_host有值說明是後端服務返回400,網關轉寄的具體後端IP就是upstream_host內容。

建議使用AI診斷功能進行初步分析。

雲原生網關請求出現401錯誤

該錯誤通常是由於以下兩種可能原因:

  • 網關返回說明無訪問憑證。請檢查是否開啟了認證鑒權或Wasm外掛程式。

  • 後端服務返回的401。查看網關的訪問日誌,如果日誌中response_flags等於空且upstream_host有值說明是後端服務返回401,網關轉寄的具體後端IP就是upstream_host內容。

建議使用AI診斷功能進行初步分析。

雲原生網關請求出現403錯誤

該錯誤通常是由於以下兩種可能原因:

  1. 網關返回說明無許可權訪問。請檢查是否開啟了IP黑白名單、認證鑒權或者Wasm外掛程式。

  2. 後端服務返回的403。查看網關的訪問日誌,如果日誌中response_flags等於空且upstream_host有值說明是後端服務返回403,網關轉寄的具體後端IP就是upstream_host內容。

建議使用AI診斷功能進行初步分析。

雲原生網關請求出現404錯誤

該錯誤通常是由於以下兩種可能原因:

  • 網關中缺少對應的路由規則。查看網關的訪問日誌,如果日誌中response_flags = NR說明網關中缺少路由規則。

  • 後端服務返回的404。查看網關的訪問日誌,如果日誌中response_flags等於空且upstream_host有值說明是後端服務返回404,網關轉寄的具體後端IP就是upstream_host內容。

建議使用AI診斷功能進行初步分析。

雲原生網關請求出現405錯誤

開啟了WAF防護,請求命中了WAF的防護規則,該狀態代碼為WAF返回。

雲原生網關請求出現413錯誤

該錯誤通常是由於以下兩種可能原因:

  • 請求大小超過網關的連結緩衝大小。需要調大參數配置中的DownstreamConnectionBufferLimits

  • 後端服務返回的413。查看網關的訪問日誌,如果日誌中response_flags等於空且upstream_host有值說明是後端服務返回413,網關轉寄的具體後端IP就是upstream_host內容。

建議使用AI診斷功能進行初步分析。

雲原生網關請求出現429錯誤

觸發網關限流規則。查看網關的訪問日誌,日誌中response_flags = RL,請檢查網關限流規則。

建議使用AI診斷功能進行初步分析。

雲原生網關請求出現502錯誤

該錯誤通常是由於以下兩種可能原因:

  • 後端服務返回的請求協議錯誤。查看網關的訪問日誌,日誌中response_flags = UPE,最常見的情況是後端服務返回的Header中含有重複的Transfer-Encoding欄位,請檢查後端服務。

  • 後端服務返回502。查看網關的訪問日誌,如果日誌中response_flags等於空且upstream_host有值說明是後端服務返回502,網關轉寄的具體後端IP就是upstream_host內容。

建議使用AI診斷功能進行初步分析。

雲原生網關請求出現503錯誤

該錯誤通常是由於以下可能原因:

  • 網關中配置的路由規則中的目標服務沒有健康的IP地址。查看網關的訪問日誌,日誌中response_flags = UH

  • 網關轉寄請求時連結被後端服務關閉。查看網關的訪問日誌,日誌中response_flags = UC,通常是由於後端服務的串連空閑時間idle timeout小於網關UpstreamIdleTimeout引起,請在網關的參數配置中調小UpstreamIdleTimeout

  • 網關無法串連後端服務IP。查看網關的訪問日誌,日誌中response_flags = UFresponse_flags = URX,通常是由於後端服務安全性群組不允許網關訪問,請排查後端服務所在的安全性群組是否已經授權網關訪問對應的連接埠,請參見設定安全性群組規則

  • 網關中沒有對應的後端服務。查看網關的訪問日誌,日誌中response_flags = NC,通常是由於以下幾種原因:

    • 對應的服務已經不存在。

    • 若後端服務有多個連接埠,在路由配置選擇目標服務時需要選擇一個固定連接埠,不能選擇動態連接埠。

    • 後端服務選擇了某個固定連接埠,但是服務的連接埠已經改變。

  • 後端服務返回503。如果日誌中response_flags等於空且upstream_host有值說明是後端服務返回503,網關轉寄的具體後端IP就是upstream_host內容。

建議使用AI診斷功能進行初步分析。

日誌中的response_code欄位為0

日誌中看到response_code欄位為0,表明用戶端沒有收到response code。

該錯誤通常是由於以下兩種可能原因:

  • 用戶端提前關閉串連。例如,用戶端在移動網路訊號較弱的情況下,或者後端回應時間過長時,可能會出現用戶端提前關閉串連的情況。在日誌中,可以通過檢查response_flags欄位的值是否等於"DC"來確認此情況。

  • HTTPS請求沒有攜帶SNI(TLS擴充欄位,用於攜帶網域名稱資訊),且沒有給*網域名稱配置HTTPS認證。在日誌中,可以通過檢查requested_server_name欄位是否為空白來確認此情況。

建議使用AI診斷功能進行初步分析。