K8s的api gateway---ambassador实操
对于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
三,安装过程
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实操的更多相关文章
- 第7章使用请求测试-测试API . Rspec: everyday-rspec实操。
测试应用与非人类用户的交互,涵盖外部 API 7.1request test vs feature test 对 RSpec 来说,这种专门针 对 API 的测试最好放在 spec/requests ...
- ambassador kubernetes native api gateway
github 上的介绍: Ambassador is an open source Kubernetes-native API Gateway built on Envoy, designed for ...
- 动手实操(一):如何用七牛云 API 实现相片地图?
实操玩家: 在苹果手机上,我们只要打开定位服务,拍照后便能在相簿中找到地图,地图上显示着在各地拍摄的相片.网站上这种显示方式也并不少见,例如 Flickr.即将关闭的 Panoramio 等. 作为地 ...
- Appium常用Api实操
本文是基于python语言在android上实操的,仅记录(忽略排版~~~) 会不时更新的: from appium import webdriver from selenium.webdriver. ...
- Istio的流量管理(实操一)(istio 系列三)
Istio的流量管理(实操一)(istio 系列三) 使用官方的Bookinfo应用进行测试.涵盖官方文档Traffic Management章节中的请求路由,故障注入,流量迁移,TCP流量迁移,请求 ...
- Istio的流量管理(实操二)(istio 系列四)
Istio的流量管理(实操二)(istio 系列四) 涵盖官方文档Traffic Management章节中的inrgess部分. 目录 Istio的流量管理(实操二)(istio 系列四) Ingr ...
- Istio的流量管理(实操三)
Istio的流量管理(实操三) 涵盖官方文档Traffic Management章节中的egress部分.其中有一小部分问题(已在下文标注)待官方解决. 目录 Istio的流量管理(实操三) 访问外部 ...
- [转载] 构建微服务:使用API Gateway
原文: http://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=206889381&idx=1&sn=478ccb35294c ...
- 微服务实战(二):使用API Gateway
微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服务架构的进程间通信 微服务实战(四):服务发现的可行方案以及实践案例 微服务实践(五) ...
随机推荐
- c# 第33节 类的封装--访问修饰符
本节内容: 1:封装的简介 2:封装怎么实现 3:访问修饰符 1:封装的简介 2:封装怎么实现 3:访问修饰符 4:访问修饰符注意点
- 扎西平措 201571030332 《面向对象程序设计 (JAVA)》第二周 学习总结
面向对象程序设计 (JAVA)>第二周 学习总结 项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这 ...
- 通过Python代码操作MySQL:
pymsql / MySQLdb pymysql支持 py2/py3 MySQLdb支持py2 ORM框架 django orm ( 自己对数据连接有优化机制 ) SQLAlchemy ( 自带数据库 ...
- Python IO 模式
IO 模式 对于 Linux 的 network IO: 一次 IO 访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区 copy 到应用程序的地址空间.所 ...
- mysql 数据库信息常用命令
Mysql查询数据库状态及信息 使用MySQL时,需要了解当前数据库的情况,例如当前的数据库大小.字符集.用户等等.下面总结了一些查看数据库相关信息的命令 1:查看显示所有数据库 mysql> ...
- 【BZOJ5457】城市(线段树合并)
点此看题面 大致题意: 一棵树上每个点有颜色\(a_i\)和权值\(b_i\),求以每个点为根的子树内权值和最大的颜色及其权值和. 线段树合并 这是一道线段树合并板子题. (关于线段树合并,可参考我的 ...
- Paper | Model-blind video denoising via frame-to-frame training
目录 故事 本文方法 流程 训练 实验 发表在2019年CVPR. 核心内容:基于Noise2Noise思想,这篇文章致力于无监督的视频盲去噪:是的,连噪声样本都不需要了. 这篇文章写作和概括太棒了! ...
- jquery模拟点击事件
在某些情况下,我们需要自动执行一些点击事件.比如:一些 tab 一般是通过点击事件来加载不同的数据内容. 而如果要页面加载完直接显示第三个 tab,怎么办呢?此时就需要用到 jQuery 的模拟点击事 ...
- js json字符串与json对象互相转换(最全)
1.json字符串转json对象 使用场景:通常在取json字符串里具体的值时,会用到. var jsonString = '{"name":"Marydon&quo ...
- 解决python 缺少os.fspath
在python3.6下运行pandas会报错缺少os.fspath 升级到python3.7 3.7 安装参考:https://www.cnblogs.com/jifeng/p/11221469.ht ...