云原生網(wǎng)關(guān)FAQ
本文介紹MSE云原生網(wǎng)關(guān)使用過程中的常見問題。
MSE云原生網(wǎng)關(guān)支持IPv6嗎?
支持。網(wǎng)關(guān)的流量入口是CLB/NLB,只需在基本概覽頁面的網(wǎng)關(guān)入口頁簽綁定一個開啟IPv6的CLB或者NLB即可。
云原生網(wǎng)關(guān)支持x-real-ip請求頭嗎?
默認不支持。x-real-ip
是Nginx特有請求頭,需要使用網(wǎng)關(guān)的http-real-ip插件,該插件會根據(jù)配置提取客戶端IP然后將其寫入x-real-ip
請求頭中。
云原生網(wǎng)關(guān)支持x-forwarded-for請求頭嗎?
支持。如果原始請求中攜帶x-forwarded-for
請求頭,網(wǎng)關(guān)會將新的IP地址添加到該請求頭的末尾。該IP是網(wǎng)關(guān)前一跳的地址。如果原始請求中沒有x-forwarded-for
,網(wǎng)關(guān)會添加該請求頭并將新的IP地址寫入其中。
SpringBoot內(nèi)置的Tomcat會默認刪除x-forwarded-for
頭部中的最后一個地址。通過SpringBoot新增配置server.forward-headers-strategy=none
可以避免這種刪除操作。
云原生網(wǎng)關(guān)中轉(zhuǎn)發(fā)請求出現(xiàn)upstream connect error or disconnect/reset header問題
該問題是由于后端服務(wù)的安全組不允許網(wǎng)關(guān)訪問服務(wù)端口引起的upstream connect error or disconnect/reset header問題。您可以在網(wǎng)關(guān)實例的基本概覽頁面,單擊安全組授權(quán)頁簽,然后單擊授權(quán)安全組新增安全組配置。網(wǎng)關(guān)會直接轉(zhuǎn)發(fā)請求到ACK的Pod IP,安全組授權(quán)中需要開放Pod使用的端口。
云原生網(wǎng)關(guān)中如何使用Header來匹配域名?
創(chuàng)建路由時新增請求頭Header匹配規(guī)則。Header字段名填 :authority
,Header值填具體的域名。
云原生網(wǎng)關(guān)看不到插件日志
可能的原因有:
插件默認只打印Info及以上級別的日志,當前日志級別為Trace或Debug時不會打印。
插件沒有正常啟動,可能是由于編譯問題。可以清空默認日志查詢語句,以便查看插件啟動階段的報錯日志。請參考插件開發(fā)文檔進行正確的編譯,并在本地使用docker compose模式進行插件調(diào)試,以確認插件本身沒有問題,然后再將其上傳到云原生網(wǎng)關(guān)。
云原生網(wǎng)關(guān)請求因為Body太大報錯
該問題是由于網(wǎng)關(guān)連接Buffer太小導致的。可以調(diào)大Buffer:
如果協(xié)議為HTTP 1.x:在控制臺調(diào)整參數(shù)
DownstreamConnectionBufferLimits
。如果協(xié)議為HTTP 2:在控制臺調(diào)整參數(shù)
DownstreamConnectionBufferLimits
和InitialStreamWindowSize
。
云原生網(wǎng)關(guān)添加服務(wù)來源的限制有哪些?
單個網(wǎng)關(guān)實例最多只能關(guān)聯(lián)3個ACK容器服務(wù)。
單個網(wǎng)關(guān)實例最多只能關(guān)聯(lián)1個Nacos實例。
云原生網(wǎng)關(guān)添加服務(wù)來源時無法選到已有的Nacos或者ACK?
云原生網(wǎng)關(guān)只能添加同VPC內(nèi)的Nacos或者ACK,不支持跨VPC添加服務(wù)來源。
云原生網(wǎng)關(guān)是否支持自有HTTPS證書?
云原生網(wǎng)關(guān)自身不托管證書,會從阿里云SSL拉取證書。您可以通過在SSL證書服務(wù)上傳自有證書,然后在網(wǎng)關(guān)域名中配置。
云原生網(wǎng)關(guān)控制臺參數(shù)變更會不會對現(xiàn)有流量造成影響?
XffTrustedNum
修改后,需要重啟網(wǎng)關(guān)才能生效。UpstreamIdleTimeout
修改后,上游連接會斷開重連。DownstreamIdleTime
修改后,下游連接會斷開重連。
云原生網(wǎng)關(guān)CLB的443端口健康檢測狀態(tài)顯示異常
在網(wǎng)關(guān)上沒有配置HTTPS域名時,網(wǎng)關(guān)不會監(jiān)聽443端口,因此CLB 443端口健康檢測顯示異常。您需要在網(wǎng)關(guān)上配置HTTPS域名,具體操作,請參見創(chuàng)建域名。如果使用Ingress,具體操作,請參見K8s Ingress。
云原生網(wǎng)關(guān)創(chuàng)建服務(wù)后,健康檢查狀態(tài)顯示異常
網(wǎng)關(guān)給后端服務(wù)轉(zhuǎn)發(fā)請求的前提是保證網(wǎng)關(guān)與后端服務(wù)網(wǎng)絡(luò)的連通性。服務(wù)的健康檢查狀態(tài)為異常,一般有以下幾種情況:
對于VPC內(nèi)的私網(wǎng)服務(wù),請檢查后端服務(wù)所在的安全組是否已經(jīng)授權(quán)網(wǎng)關(guān)訪問對應(yīng)的端口,請參見設(shè)置安全組規(guī)則。
對于公網(wǎng)上的服務(wù),請檢查VPC是否具有公網(wǎng)訪問的能力,可嘗試使用公網(wǎng)NAT網(wǎng)關(guān)SNAT功能訪問互聯(lián)網(wǎng),請參見使用公網(wǎng)NAT網(wǎng)關(guān)SNAT功能訪問互聯(lián)網(wǎng)。
對于HTTP類型的健康檢查,請確保請求路徑和請求域名設(shè)置正確。
對于HTTP類型的健康檢查,若后端服務(wù)的健康檢查接口需要通過HTTPS來訪問,請在服務(wù)的策略配置中設(shè)置為單向TLS模式。
對于HTTP類型的健康檢查,若以上步驟均沒問題,可能是健康檢查的間隔時間與后端服務(wù)的連接保持時間相同所致,可嘗試調(diào)大健康檢查的間隔時間。
云原生網(wǎng)關(guān)如何判斷請求錯誤原因?
查看響應(yīng)Header是否包含
x-envoy-upstream-service-time
頭部。正常情況下,若響應(yīng)中包含x-envoy-upstream-service-time
頭部,則表明網(wǎng)關(guān)已將請求轉(zhuǎn)發(fā)給后端服務(wù)處理,后續(xù)的請求出錯與后端服務(wù)自身邏輯存在很大的關(guān)系。查看網(wǎng)關(guān)的訪問日志中
upstream_service_time
是否為空。正常情況下,若訪問日志中字段upstream_service_time
不為空,則表明網(wǎng)關(guān)已將請求轉(zhuǎn)發(fā)給后端服務(wù)處理,后續(xù)的請求出錯與后端服務(wù)自身邏輯存在很大的關(guān)系。
云原生網(wǎng)關(guān)中更新HTTPS證書后不生效?
該問題通常是由于在網(wǎng)關(guān)前面也配置了HTTPS證書,例如CLB、DCDN、WAF、DDoS高防等。請檢查網(wǎng)關(guān)前面的節(jié)點是否也同步更新了HTTPS證書,最佳實踐是只在一個地方做HTTPS證書配置,如果網(wǎng)關(guān)前面接了DCDN、WAF,可以只在其上配置HTTPS,后端網(wǎng)關(guān)走HTTP即可。
云原生網(wǎng)關(guān)中修改參數(shù)配置項不生效?
該問題通常是由于使用了MSE Ingress。在MseIngressConfig中有相關(guān)的配置項,MSE Ingress會自動同步MseIngressConfig中的配置項到MSE網(wǎng)關(guān)控制臺,在控制臺修改配置項后有可能出現(xiàn)被MSE Ingress同步信息覆蓋的情況,建議統(tǒng)一使用MSE Ingress方式修改配置項。
云原生網(wǎng)關(guān)路由優(yōu)先級是怎么排序的?
在網(wǎng)關(guān)實例路由配置頁面看到的路由配置列表順序就是路由匹配優(yōu)先級順序。該順序是由高到低,匹配優(yōu)先級分為域名與路由規(guī)則。域名匹配是精確域名大于泛域名,例如test.example.com
的優(yōu)先級大于*.example.com
域名。同域名的Path優(yōu)先級匹配規(guī)則是精確匹配 > 前綴匹配 > 正則匹配,同域名同Path的優(yōu)先級匹配規(guī)則是匹配條件多 > 匹配條件少(匹配條件:Header、Query匹配條件)。
云原生網(wǎng)關(guān)前面接DCDN后,HTTPS請求訪問失敗?
該問題通常是由于DCDN在回源訪問網(wǎng)關(guān)時沒有攜帶SNI引起。請在DCDN的回源配置中設(shè)置回源SNI。
云原生網(wǎng)關(guān)前面接WAF后,HTTPS請求訪問失敗?
該問題通常是由于WAF在回源訪問網(wǎng)關(guān)時沒有攜帶SNI引起。在WAF中使用CNAME方式接入的,需要修改對應(yīng)接入域名,在配置轉(zhuǎn)發(fā)中選擇啟用回源SNI。
云原生網(wǎng)關(guān)是否支持Websocket?
支持,且默認開啟Websocket協(xié)議支持。
云原生網(wǎng)關(guān)是否支持gRPC?
支持。gRPC使用HTTP 2協(xié)議傳輸,請確認網(wǎng)關(guān)參數(shù)配置中的EnableHttp2 = true
。
云原生網(wǎng)關(guān)是否支持GZIP解壓縮?
支持。請確認網(wǎng)關(guān)參數(shù)配置中的EnableGzip = true
,壓縮算法支持Gzip與Brotli,通過參數(shù)ZipAlgorithm配置,默認Gzip。
云原生網(wǎng)關(guān)是否支持保留請求/響應(yīng)頭的大小寫?
支持。請確認網(wǎng)關(guān)參數(shù)配置中的PreserveHeaderFormat = true
。該參數(shù)只對HTTP 1.0或者1.1生效,根據(jù)規(guī)范HTTP 2協(xié)議要求請求/響應(yīng)頭全部為小寫。
云原生網(wǎng)關(guān)是否支持HTTP/3?
支持。請確認網(wǎng)關(guān)參數(shù)配置中的EnableHttp3 = true
。
云原生網(wǎng)關(guān)是否支持自定義監(jiān)聽端口?
支持。云原生網(wǎng)關(guān)支持HTTP(80端口)與HTTPS(443端口)。在CLB控制臺新增監(jiān)聽端口,例如新增TCP 8080端口與80端口設(shè)置為同一個虛擬服務(wù)器組即可處理HTTP協(xié)議。
云原生網(wǎng)關(guān)為什么請求經(jīng)過網(wǎng)關(guān)后,請求/響應(yīng)頭全部變成小寫?
網(wǎng)關(guān)默認會將請求/響應(yīng)頭全部置為小寫。如果需要保留大小寫,調(diào)整網(wǎng)關(guān)參數(shù)配置中的PreserveHeaderFormat = true
。
云原生網(wǎng)關(guān)創(chuàng)建了一個DNS域名服務(wù),為什么訪問失敗?
如果配置的DNS域名是公網(wǎng)域名,需要在NAT網(wǎng)關(guān)中配置SNAT允許網(wǎng)關(guān)訪問外網(wǎng),網(wǎng)關(guān)默認無法訪問外網(wǎng)。
云原生網(wǎng)關(guān)請求出現(xiàn)400錯誤
該錯誤通常是由于以下兩種可能原因:
客戶端發(fā)送的協(xié)議錯誤。查看網(wǎng)關(guān)的訪問日志,日志中
response_flags = DPE
。后端服務(wù)返回的400。查看網(wǎng)關(guān)的訪問日志,如果日志中
response_flags
等于空且upstream_host
有值說明是后端服務(wù)返回400,網(wǎng)關(guān)轉(zhuǎn)發(fā)的具體后端IP就是upstream_host
內(nèi)容。
建議使用AI診斷功能進行初步分析。
云原生網(wǎng)關(guān)請求出現(xiàn)401錯誤
該錯誤通常是由于以下兩種可能原因:
網(wǎng)關(guān)返回說明無訪問憑證。請檢查是否開啟了認證鑒權(quán)或Wasm插件。
后端服務(wù)返回的401。查看網(wǎng)關(guān)的訪問日志,如果日志中
response_flags
等于空且upstream_host
有值說明是后端服務(wù)返回401,網(wǎng)關(guān)轉(zhuǎn)發(fā)的具體后端IP就是upstream_host
內(nèi)容。
建議使用AI診斷功能進行初步分析。
云原生網(wǎng)關(guān)請求出現(xiàn)403錯誤
該錯誤通常是由于以下兩種可能原因:
網(wǎng)關(guān)返回說明無權(quán)限訪問。請檢查是否開啟了IP黑白名單、認證鑒權(quán)或者Wasm插件。
后端服務(wù)返回的403。查看網(wǎng)關(guān)的訪問日志,如果日志中
response_flags
等于空且upstream_host
有值說明是后端服務(wù)返回403,網(wǎng)關(guān)轉(zhuǎn)發(fā)的具體后端IP就是upstream_host
內(nèi)容。
建議使用AI診斷功能進行初步分析。
云原生網(wǎng)關(guān)請求出現(xiàn)404錯誤
該錯誤通常是由于以下兩種可能原因:
網(wǎng)關(guān)中缺少對應(yīng)的路由規(guī)則。查看網(wǎng)關(guān)的訪問日志,如果日志中
response_flags = NR
說明網(wǎng)關(guān)中缺少路由規(guī)則。后端服務(wù)返回的404。查看網(wǎng)關(guān)的訪問日志,如果日志中
response_flags
等于空且upstream_host
有值說明是后端服務(wù)返回404,網(wǎng)關(guān)轉(zhuǎn)發(fā)的具體后端IP就是upstream_host
內(nèi)容。
建議使用AI診斷功能進行初步分析。
云原生網(wǎng)關(guān)請求出現(xiàn)405錯誤
開啟了WAF防護,請求命中了WAF的防護規(guī)則,該狀態(tài)碼為WAF返回。
云原生網(wǎng)關(guān)請求出現(xiàn)413錯誤
該錯誤通常是由于以下兩種可能原因:
請求大小超過網(wǎng)關(guān)的鏈接緩存大小。需要調(diào)大參數(shù)配置中的
DownstreamConnectionBufferLimits
。后端服務(wù)返回的413。查看網(wǎng)關(guān)的訪問日志,如果日志中
response_flags
等于空且upstream_host
有值說明是后端服務(wù)返回413,網(wǎng)關(guān)轉(zhuǎn)發(fā)的具體后端IP就是upstream_host
內(nèi)容。
建議使用AI診斷功能進行初步分析。
云原生網(wǎng)關(guān)請求出現(xiàn)429錯誤
觸發(fā)網(wǎng)關(guān)限流規(guī)則。查看網(wǎng)關(guān)的訪問日志,日志中response_flags = RL
,請檢查網(wǎng)關(guān)限流規(guī)則。
建議使用AI診斷功能進行初步分析。
云原生網(wǎng)關(guān)請求出現(xiàn)502錯誤
該錯誤通常是由于以下兩種可能原因:
后端服務(wù)返回的請求協(xié)議錯誤。查看網(wǎng)關(guān)的訪問日志,日志中
response_flags = UPE
,最常見的情況是后端服務(wù)返回的Header中含有重復的Transfer-Encoding
字段,請檢查后端服務(wù)。后端服務(wù)返回502。查看網(wǎng)關(guān)的訪問日志,如果日志中
response_flags
等于空且upstream_host
有值說明是后端服務(wù)返回502,網(wǎng)關(guān)轉(zhuǎn)發(fā)的具體后端IP就是upstream_host
內(nèi)容。
建議使用AI診斷功能進行初步分析。
云原生網(wǎng)關(guān)請求出現(xiàn)503錯誤
該錯誤通常是由于以下可能原因:
網(wǎng)關(guān)中配置的路由規(guī)則中的目標服務(wù)沒有健康的IP地址。查看網(wǎng)關(guān)的訪問日志,日志中
response_flags = UH
。網(wǎng)關(guān)轉(zhuǎn)發(fā)請求時鏈接被后端服務(wù)關(guān)閉。查看網(wǎng)關(guān)的訪問日志,日志中
response_flags = UC
,通常是由于后端服務(wù)的連接空閑時間idle timeout
小于網(wǎng)關(guān)UpstreamIdleTimeout
引起,請在網(wǎng)關(guān)的參數(shù)配置中調(diào)小UpstreamIdleTimeout
。網(wǎng)關(guān)無法連接后端服務(wù)IP。查看網(wǎng)關(guān)的訪問日志,日志中
response_flags = UF
或response_flags = URX
,通常是由于后端服務(wù)安全組不允許網(wǎng)關(guān)訪問,請排查后端服務(wù)所在的安全組是否已經(jīng)授權(quán)網(wǎng)關(guān)訪問對應(yīng)的端口,請參見設(shè)置安全組規(guī)則。網(wǎng)關(guān)中沒有對應(yīng)的后端服務(wù)。查看網(wǎng)關(guān)的訪問日志,日志中
response_flags = NC
,通常是由于以下幾種原因:對應(yīng)的服務(wù)已經(jīng)不存在。
若后端服務(wù)有多個端口,在路由配置選擇目標服務(wù)時需要選擇一個固定端口,不能選擇動態(tài)端口。
后端服務(wù)選擇了某個固定端口,但是服務(wù)的端口已經(jīng)改變。
后端服務(wù)返回503。如果日志中
response_flags
等于空且upstream_host
有值說明是后端服務(wù)返回503,網(wǎng)關(guān)轉(zhuǎn)發(fā)的具體后端IP就是upstream_host
內(nèi)容。
建議使用AI診斷功能進行初步分析。
日志中的response_code字段為0
日志中看到response_code字段為0,表明客戶端沒有收到response code。
該錯誤通常是由于以下兩種可能原因:
客戶端提前關(guān)閉連接。例如,客戶端在移動網(wǎng)絡(luò)信號較弱的情況下,或者后端響應(yīng)時間過長時,可能會出現(xiàn)客戶端提前關(guān)閉連接的情況。在日志中,可以通過檢查response_flags字段的值是否等于"DC"來確認此情況。
HTTPS請求沒有攜帶SNI(TLS擴展字段,用于攜帶域名信息),且沒有給*域名配置HTTPS證書。在日志中,可以通過檢查requested_server_name字段是否為空來確認此情況。
建議使用AI診斷功能進行初步分析。