对于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. Vue生命周期钩子---2

    vue生命周期简介 咱们从上图可以很明显的看出现在vue2.0都包括了哪些生命周期的函数了. 生命周期探究 对于执行顺序和什么时候执行,看上面两个图基本有个了解了.下面我们将结合代码去看看钩子函数的执 ...

  2. Jquery的一些总结点

    $("#a").attr("hidden", false); //显现内容

  3. mq代替db

    系统有个很严重的性能问题,法国人浪费了半年多都没有解决,他们试图从sql的角度分析哪里能有改善,大方向错了,再努力也没用. 我接手以后,也走了点弯路,一上手觉得肯定能用cache解决问题,结果cach ...

  4. asp.net mvc 系统操作日志设计

    第一步.系统登录日志 通过signalr来管理用户的登录情况,并保存用户的登录记录. 第二步 通过mvc过滤器,来横切路由访问记录. 保存方式:通过httpclient异步请求webapi 数据通过m ...

  5. python-10-列表、元组嵌套

    前言 元组.列表前面章节有讲解实例,本节内容是列表.元组的多嵌套. 一.列表嵌套 1.列表嵌套操作1 # 列表的嵌套 li = ['xiaolong', '小林', ['小龙', 'xiaol'], ...

  6. PHP自动加载-spl_autoload_register

    spl_autoload_register 自动加载spl : Standard PHP library (标准PHP库) 首先来了解 __autoload print.class.php <? ...

  7. 五、原子操作(CAS)

    原子操作(CAS) 一.CAS(Compare And Set) ​ Compare And Set(或Compare And Swap),CAS是解决多线程并行情况下使用锁造成性能损耗的一种机制,C ...

  8. Uboot启动流程分析(二)

    1.前言 在前面的文章Uboot启动流程分析(一)中,链接如下: https://www.cnblogs.com/Cqlismy/p/12000889.html 已经简单地分析了low_level_i ...

  9. Oracle 增删改(INSERT、DELETE、UPDATE)语句

    Ø  简介 本文介绍 Oracle 中的增删改语句,即 INSERT.DELETE.UPDATE 语句的使用.是时候展现真正的技术了,快上车: 1.   插入数据(INSERT) 2.   修改数据( ...

  10. Docker学习(六)-Kubernetes - Spring Boot 应用

    接上一篇 https://www.cnblogs.com/woxpp/p/11872155.html 新建 k8s-demo.yaml apiVersion: apps/v1beta2 kind: D ...