Isito - 404問題總結

1.預發佈環境404問題

現象:

服務配置未做改動,重啓服務後,在該服務內去調用別的服務報404,

並且該服務對應istio-proxy訪問日誌報response_flag爲NR(No route configured for a given request in addition to 404 response code.)

並且在被調用的服務中未看到tomcat訪問日誌

原因:

NR即服務沒有對應的Istio配置,考慮到可能是istio中負責服務發現與分發的組件pilot發生異常,通過查看istio-pilot發現如下日誌:

如上標紅日誌即提示:域名mx-gas-station-boot.tsp不唯一,發生衝突,即存在多處mx-gas-station-boot.tsp域名的定義;
通過kiali查看mx-gas-station-boot的相關配置,發現存在ServiceEntry.mx-gas-station定義如下:

 

其中標紅域名與K8s中Service.mx-gas-station-boot域名發生衝突,導致pilot無法生成完整服務路由信息,

進而影響到新啓動的服務無法獲得服務路由信息,所以發生服務調用時均提示404 NR,而老服務由於之前緩存過路由信息,

所以依舊可以通過緩存的路由信息去調用別的服務;

解決方法:

刪除ServiceEntry.mx-gas-station-boot並檢查其他ServiceEntry,查看是否還有類似域名衝突;

解決域名衝突後服務間即可正常調用;

在Isito中Gateway、ServiceEntry中的域名必須唯一綁定,且不能相互間重複發生衝突;

Gateway中定義的域名爲集羣內服務的對外入口域名綁定;

ServiceEntry用於定義集羣外部服務的域名,用於集羣內服務想要通過Istio路由訪問外部服務,例如預發環境想要訪問測試環境域名,測試環境想要訪問本地開發IP:Port;

2.測試環境404問題

現象:

服務配置未做改動,重啓服務後,在該服務內去調用別的服務報404,並且該服務對應istio-proxy訪問日誌報response_flag爲-

並且在被調用的服務中看到如下tomcat訪問日誌而直接通過k8s Service進行服務調用是可以成功的(即直接通過serviceName.namespaces,不走Istio路由)

原因:

Isito路由不生效(即通過Istio路由s267.tsp/256進行訪問,而實際到達應用的path仍爲/256,並沒有按照Isito路由被轉換爲/context_path),而K8s服務路由生效;

考慮到之前對Istio sidecar統一設置過excludeOutboundIPRanges(解決ELK協議不匹配問題),因此導致了服務的sidecar跳過了部分服務請求,導致path沒有被轉換,進而引發了404;

 

 

解決方法:

使用includeOutboundIPRanges代替excludeOutboundIPRanges,僅對K8s Service、Pod所對應的IP Range進行sidecar攔截,避免錯過集羣內服務請求的攔截,且對集羣外IP不進行攔截(兼容ELK);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章