对于api gateway,以前总是认知感觉和proxy差不多。

最近几天,撸完了ambassador的官方文档,才比较系统的了解了gateway的功能。

它和传统的nginx proxy或是k8s里的ingress还是有一定差别的。

近期准备在公司用起来。

一,Ambassador 是什么?

ambassador是datawire开源的服务网关,很好的支持kubernetes。具体详细介绍参考官网:https://www.getambassador.io/about/why-ambassador

Ambassador is an open source, Kubernetes-native API Gateway built on Envoy Proxy.

二,为什么先把Ambassador ?

网上关于K8S Ingress的比较文档:

http://tuohuang.info/ambassador-jwt-istio#.XVP-KfluaM8

https://juejin.im/post/5d4919ce5188251dff55b08f

https://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2019/05/21/apigateway-base-envoy-compare.html

https://zhuanlan.zhihu.com/p/61364466

https://blog.csdn.net/hxpjava1/article/details/79375452

https://juejin.im/post/5bacb35b5188255c9e02dc71

http://www.sohu.com/a/314009713_465944

http://tuohuang.info/ambassador-jwt-istio#.XVtCjPkzbRY

https://www.getambassador.io

三,安装过程

1, 预先下载好镜像,应用如下yaml文件

https://getambassador.io/yaml/ambassador/ambassador-rbac.yaml

2, 针对实际情况,启动nodePort作为service。

---
apiVersion: v1
kind: Service
metadata:
  name: ambassador
spec:
  type: NodePort
  ports:
   - port: 80
     targetPort: 8080
  selector:
    service: ambassador

3, 测试nginx跳转

nginx.yaml内容如下(使用annotations 来进行声明式配置,方便分散管理。如果是default的命名空间,mapping中对应服务可省略.namespace后缀):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      name: nginx
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
        - name: nginx
          image: harbor.xxx.com.cn/base/middleware/nginx:1.13-alpine
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind: Mapping
      name: ngnix_mapping
      prefix: /
      service: nginx-service:80
      ---
      apiVersion: ambassador/v1
      kind: Mapping
      name: nginx-backend_mapping
      prefix: /backend/
      service: nginx-service:80
      labels:
        ambassador:
          - request_label:
            - nginx

spec:
  ports:
    - name: nginx
      port: 80
      targetPort: 80
      protocol: TCP
  selector:
    name: nginx

4, 测试tomcat跳转(request_label其实是在service多个port中来作过滤选择的)

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tomcat-deploy
  template:
    metadata:
      labels:
        app: tomcat-deploy
    spec:
      containers:
      - name: tomcat
        image: harbor.xxx.com.cn/official_hub/tomcat:8.5.23.0
        imagePullPolicy: IfNotPresent
        ports:
            - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
    name: tomcat-svc
    annotations:
      getambassador.io/config: |
        ---
        apiVersion: ambassador/v1
        kind: Mapping
        name: tomcat_mapping
        prefix: /tomcat-svc
        service: tomcat-svc.default:8080
        ---
        apiVersion: ambassador/v1
        kind: Mapping
        name: tomcat-backend_mapping
        prefix: /tomcat/
        service: tomcat-svc.default:8080
        labels:
          ambassador:
            - request_label:
              - tomcat
spec:
  ports:
    - name: tomcat
      port: 8080
      targetPort: 8080
  selector:
    app: tomcat-deploy

5, 验证

根据几节的内容,分别访问如下几个url,检测其生效。

http://3.2.10.1:xxxx/ambassador/v0/diag/
http://3.2.10.1:30080/backend/hello.html
http://3.2.10.1:30080/tomcat/

四,ambassador性能监控

1,  zipkin作api调用性能分析

参考url:https://www.getambassador.io/user-guide/tracing-tutorial

---
apiVersion: v1
kind: Service
metadata:
  name: zipkin
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v1
      kind: TracingService
      name: tracing
      service: zipkin:9411
      driver: zipkin
spec:
  selector:
    app: zipkin
  ports:
  - port: 9411
    name: http
    targetPort: http
    nodePort: 32764
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: zipkin
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: zipkin
    spec:
      containers:
      - name: zipkin
        image: harbor.xxx.com.cn/3rd_part/openzipkin/zipkin:2.16
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 9411
http://3.3.10.5:xxx/zipkin

2,  Prometheus,grafana作api的性能展示

参考URL:https://www.getambassador.io/user-guide/monitoring

【这是基于prometheus operator安装的,可能要和现在整合】

K8s的api gateway---ambassador实操的更多相关文章

  1. 第7章使用请求测试-测试API . Rspec: everyday-rspec实操。

    测试应用与非人类用户的交互,涵盖外部 API 7.1request test  vs feature test 对 RSpec 来说,这种专门针 对 API 的测试最好放在 spec/requests ...

  2. ambassador kubernetes native api gateway

    github 上的介绍: Ambassador is an open source Kubernetes-native API Gateway built on Envoy, designed for ...

  3. 动手实操(一):如何用七牛云 API 实现相片地图?

    实操玩家: 在苹果手机上,我们只要打开定位服务,拍照后便能在相簿中找到地图,地图上显示着在各地拍摄的相片.网站上这种显示方式也并不少见,例如 Flickr.即将关闭的 Panoramio 等. 作为地 ...

  4. Appium常用Api实操

    本文是基于python语言在android上实操的,仅记录(忽略排版~~~) 会不时更新的: from appium import webdriver from selenium.webdriver. ...

  5. Istio的流量管理(实操一)(istio 系列三)

    Istio的流量管理(实操一)(istio 系列三) 使用官方的Bookinfo应用进行测试.涵盖官方文档Traffic Management章节中的请求路由,故障注入,流量迁移,TCP流量迁移,请求 ...

  6. Istio的流量管理(实操二)(istio 系列四)

    Istio的流量管理(实操二)(istio 系列四) 涵盖官方文档Traffic Management章节中的inrgess部分. 目录 Istio的流量管理(实操二)(istio 系列四) Ingr ...

  7. Istio的流量管理(实操三)

    Istio的流量管理(实操三) 涵盖官方文档Traffic Management章节中的egress部分.其中有一小部分问题(已在下文标注)待官方解决. 目录 Istio的流量管理(实操三) 访问外部 ...

  8. [转载] 构建微服务:使用API Gateway

    原文: http://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=206889381&idx=1&sn=478ccb35294c ...

  9. 微服务实战(二):使用API Gateway

    微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服务架构的进程间通信 微服务实战(四):服务发现的可行方案以及实践案例 微服务实践(五) ...

随机推荐

  1. 【转】带栗子的GDB教程

    带栗子的GDB教程 原文链接:http://www.cprogramming.com/gdb.html作者:Manasij Mukherjee 一个好的调试软件是一个程序猿的工具箱里最重要的工具之一, ...

  2. Vue v-if,v-else-if,v-else的使用

    v-else-if 要紧跟 v-if v-else要紧跟v-else-if 或 v-if 代码: <!doctype html> <html lang="en"& ...

  3. [LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分

    [LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分 题意 给定一个字符串 \(S\), 求有多少种将 \(S\) 的子串拆分为形如 AABB 的拆分方案 \(| ...

  4. Note | MATLAB

    目录 1. 读写文件 简单读写 将rgb保存为yuv文件 从yuv文件中读取Y通道 将TIFF图片拼接为yuv文件 2. 字符串操作 3. 画图 4. 词频统计 1. 读写文件 简单读写 fp = f ...

  5. vue 路由跳转到本页面,ts 监听路由变化

    @Watch('$route') routechange(to: any, from: any) { //参数不相等 if (to.query.name!=from.query.name) { //t ...

  6. 软件工程实践2019——idea表述及组队

    时间:2019-10-08 随堂 欢迎每个有想法的同学都积极参与idea表述,用心呈现你的心中所想.你心中热爱的,希望在软工实践项目中完成的项目作品.每个愿意表达idea的同学,都有一分钟时间来呈现作 ...

  7. Flutter命令突然无响应、vscode突然无法连接到IOS模拟器

    这周过来突然flutter相关命令运行都没有响应, 打开任务管理器,关闭所有dart进程即可解决

  8. CodeForce 117C Cycle DFS

    A tournament is a directed graph without self-loops in which every pair of vertexes is connected by ...

  9. 【MySQL配置参数】sync_binlog和innodb_flush_log_at_trx_commit

    sync_binlog和innodb_flush_log_at_trx_commit这2个参数都是MySQL中,配置日志持久化时机的,但有很大不同,做下对比分析总结. 1.MySQL服务器配置参数:s ...

  10. Mysql 查询表字段数量

    select count(*) from information_schema.`COLUMNS` where TABLE_SCHEMA='dbName' -- 数据库名 and TABLE_NAME ...