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 微服务实战(三):深入微服务架构的进程间通信 微服务实战(四):服务发现的可行方案以及实践案例 微服务实践(五) ...
随机推荐
- 10. Go语言—for循环
一.for循环 for 初始化语句;条件判断;变量修改 for i := 0; i < 100; i++{ fmt.Printf('i=%d\n',i) } // C 的 while 一样 fo ...
- 第50 课C++对象模型分析——成员变量(上)
C++对象模型,其实就是C++中的对象在内存中是如何排布的.C++中的对象包含了成员变量和成员函数,其实就是研究C++中的类对象它的成员变量和成员函数在内存中是如何排布的. 回归本质class 是一种 ...
- Html学习之十三(导航栏的制作)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- getpatch
import time import os import math import sys import os,os.path,shutil import numpy as np import cv2 ...
- ubuntu18.40 rtx2080ti安装显卡驱动/cuda/cudnn/tensorflow-gpu
电脑环境 ubuntu 18.40 gpu rtx2080ti 一.安装显卡驱动 刚开始尝试用手动安装方式安装驱动 下载了驱动程序但是因为没有gcc所以放弃这种方法 后尝试最简单的方式 在 菜单-- ...
- 创建testng.xml文件
简单介绍 运行TestNG测试脚本有两种方式:一种是直接通过IDE运行(例如使用eclipse中的“Run TestNG tests”),另一种是从命令行运行(通过使用xml配置文件).当我们想执行某 ...
- js判断为空
function isEmpty (va){ if("undefined" == va){ return true; } if(null == va ...
- xcode静态库调试
[工程1]:静态库工程,用来生成xxx.a [工程2]:项目工程,需要引入静态库xxx.a 工程2引入静态库的方法是将工程1生成的xxx.a和include头文件目录,加入到工程2中. 而如果需要在工 ...
- JavaScript查找两个数组的相同元素和相差元素
let intersection = a.filter(v => b.includes(v)) 返回交集数组 let difference = a.concat(b).filter(v => ...
- 利用数据库视图实现WEB查询敏感信息接口动态脱敏
前言: 利用数据库视图,实现web接口查询敏感信息时动态脱敏. 具体目标:某接口为用户信息查询接口,返回敏感用户信息(id,姓名.手机号[敏感].身份证号[敏感]),如果web用户为管理员角色,则查询 ...