一.什麼是Ingress
K8s的Pod和Service需要通過NodePort把服務暴露到外部, 但是隨著微服務的增多。 埠會變得不好管理。 所以通常情況下 我們會設計一個Ingress來做路由的轉發,方便統一管理。效果如圖:
二.Ingress組成
Ingress 主要分為兩部分
三.Ingress作用
1. 基於http-header 的路由
2.基於 path 的路由
3.單個ingress 的 timeout
4.請求速率limit
5.rewrite 規則
四. Ingress Controller 概念 在eagle的實現
Ingress是K8S的一個概念。 但很遺憾公司內部的基於k8s的eagle平臺這項能力開放給應用側。
如上圖所示,同一命名空間下所有的Pod都通過統一的gateway來提供服務。
而gateway則使用一套統一的rewrite規則分發到響應的pod處理.
而我們的服務在使用eagle gateway遇見的問題
2.lb和路由規則分發問題。 eagle本身不提供rancher 自帶的haproxy功能且垮集羣之間也不支持以前的服務調度方式。
因此考慮以上兩點, 我們結合eagle的gateway服務,統一封裝一套 eagle ingress的概念。
五.業務架構背景
1. 核心依賴後端業務系統,僅在香港部署(恒生,GTP,香港)
2.垮專線介面調用時延不穩定,中港專線太小(8mbps)。
解決思路:
eagle hk ingress (自研edge service+ eagle gateway)微服務網關, 通過自定義路由控制 減少部分業務垮中港網路的介面調用次數。
實現效果:
通過環境變數修改路由配置
部署效果:
六.微服務網關 eagle hk ingress(spring cloud gateway+eagle gateway)
eagle hk ingress 實際就是在 eagle gateway前面 利用spring cloud gateway寫了一套自定義路由的網關。
Gateway的實現原理如下:
Predicate:
目前我們只是在 Gateway Handler Mapping中 利用 gateway的 predicate功能快速實現一套路由轉發的網關,它的易用性也是我選擇它的主要原因之一
predicate功能如下圖
filter:
filter是gateway的另一強大功能。 filter的第一感覺類似中間件。
filter的默認實現同樣頁非常強大
filter能方便的幫我們實現熔斷,限流等相關功能。