一.什麼是Ingress

K8s的Pod和Service需要通過NodePort把服務暴露到外部, 但是隨著微服務的增多。 埠會變得不好管理。 所以通常情況下 我們會設計一個Ingress來做路由的轉發,方便統一管理。效果如圖:

網路圖

二.Ingress組成

Ingress 主要分為兩部分

  1. Ingress Controller 是流量的入口,是一個實體軟體, 一般是Nginx 和 Haproxy 。
  2. 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遇見的問題

1. 兩地機房eagle集羣轉發問題, 由於中港專線問題, 部分請求為了盡量少專線間不必要的開銷,因此我們希望從一開始就將請求轉發到香港處理

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能方便的幫我們實現熔斷,限流等相關功能。


推薦閱讀:
相關文章