乐趣区

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。能够正常的看到访问页面


退出移动版