Ambassador,雲原生應用的“門神”

目前,行業內基於雲原生思想的開源項目,重點在於管理、控制微服務以及微服務架構下服務之間的通信問題。它們有效的解決了“服務異構化”、“動態化”、“多協議”場景所帶來的east/west流量的管控問題,而針對north/south的流量控制僅僅提供了ingress/egress做流量入口,出口的管理。

 

爲了解決雲原生環境下的north/south流量控制問題,Ambassador開始走入大家的視線。Ambassador是一個網關,其中以Enovy作爲具體策略的執行者,Ambassador抽象到控制平面,下發一些的網關控制指令。具體架構如下所示:

 

 

從架構圖能夠清晰的看到,Ambassador以Enovy基礎擴展而來,實現思路上同樣採取“控制平面”、數據平面想分離的設計思想。在容器生態環境下,無論是對kubernetes的traefik,還是istio下的Ingress-gateway都是強有力的擴展。

 

Ambassador有哪些特性呢?

 

異構化服務支撐

雲原生架構下各個服務要求只要遵循相同的通信規範即可,因此不再強調語言,架構等一致性問題。Ambassador恰好能夠有效的把請求流量導入到異構下的各個服務,並且完成服務的請求的管理控制。

 

支持基於各個服務的配置,更能夠進一步實現“超時”,“速率限制”,“身份驗證策略”等網關級別的細粒度控制。

 

能夠支持不同層級的通信協議,L7協議包括HTTP、HTTP/2、grpc、trpc-web、websocket,L4協議TCP。

 

動態服務

服務更新會導致應用程序不斷變化。Ambassador能夠友好的支撐雲原生應用的動態特性,具備如下特性:

  • 允許在生產測試,支持不同的灰度發佈策略

  • 細化可觀察性指標,有力管控服務行爲

  • 配置信息的無感之變更,不會對最終用戶產生影響

 

分散工作流程

雲原生的應用下,允許不同的服務開發針對其自身的服務進行優化。

 

Ambassador爲了滿足這個特性,能夠允許各個開發團隊自身維護自己的服務,並且獨立接入和使用Ambassador的配置信息,一改之前網關層統一配置變更思路,從而避免影響其他運行服務。

 

Ambassador部署

Ambassador提供了多種不同的部署方式來滿足用戶需求。包括kubernetes yaml部署,helm部署,docker image部署以及docker compose部署等。既可以作爲獨立的程序運行提供網關能力,同樣能夠與kubernetes,istio等雲原生的框架集成,來充當入口流量的管理者。

 

以docker image部署說明Ambassador的部署配置。

 

docker run -it -d -p 8080:8080 --name=ambassador --rm quay.io/datawire/ambassador:0.73.0 --demo

查看Ambassador日誌,確定運行情況。

AMBASSADOR: using '/ambassador/ambassador-demo-config' for configuration
AMBASSADOR: not watching for Kubernetes config
2019-07-17 08:22:55 kubewatch [9 TMainThread] 0.73.0 INFO: No K8s
2019-07-17 08:22:55 kubewatch [9 TMainThread] 0.73.0 DEBUG: cluster ID URL is d6e_id://00000000-0000-0000-0000-000000000000/default
2019-07-17 08:22:55 kubewatch [9 TMainThread] 0.73.0 DEBUG: Kubernetes is not available, so not doing CRD check
2019-07-17 08:22:55 kubewatch [9 TMainThread] 0.73.0 DEBUG: cluster ID is 07eb43c8-1166-5145-a060-45e4dd907e10 (from hardcoded ID)
AMBASSADOR: starting with environment:
====
AMBASSADOR_CLUSTER_ID=07eb43c8-1166-5145-a060-45e4dd907e10
AMBASSADOR_CONFIG_BASE_DIR=/ambassador
AMBASSADOR_NAMESPACE=default
AMBASSADOR_NO_KUBEWATCH=no_kubewatch
AMBASSADOR_ROOT=/ambassador
====
AMBASSADOR: launching worker process: 'env' 'PORT=5050' 'python3' 'demo-services/auth.py'
AMBASSADOR: launching worker process: 'python3' 'demo-services/qotm.py'
AMBASSADOR: starting ads
…………
08:24:00] "GET /auth/v0//ambassador/v0/favicon.ico HTTP/1.1" 200 -
ACCESS [2019-07-17T08:23:59.084Z] "GET /ambassador/v0/diag/ HTTP/1.1" 200 - 0 17012 69 62 "10.20.50.164" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36" "7481ee18-307e-4d23-9c82-e0a623389655" "10.20.1.180:8080" "127.0.0.1:8877"
ACCESS [2019-07-17T08:24:00.254Z] "GET /ambassador/v0/favicon.ico HTTP/1.1" 401 UAEX 0 57 4 - "10.20.50.164" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36" "0013e864-1128-4e03-8814-49ed6e498d11" "10.20.1.180:8080" "-"
ACCESS [2019-07-17T08:24:00.259Z] "GET /ambassador/v0/favicon.ico HTTP/1.1" 200 - 0 1150 8 4 "10.20.50.164" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36" "9b0702c0-3800-4447-90aa-6bebb5a711fb" "10.20.1.180:8080" "127.0.0.1:8877"

基於docker image啓動時,ambassador採用默認的config配置信息完成初始化工作。

訪問Ambassador:

http://{ip}:8080/ambassador/v0/diag/

 

初始化默認用戶名admin,密碼admin。能夠正常的看到訪問頁面

 

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