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安装的,可能要和现在整合】
最新文章
- 窥探Swift编程之强大的Switch
- [Bug] 解决透明 Activity 在 Android 6.0 背景不透明
- android studio fetching android sdk component information
- GNU C 内联汇编介绍
- linux 查看剩余内存数
- weblogic 下载安装部署说明
- WebBrowserControl
- java中对浮点数精度的处理DecimalFormat
- (转)从集中到分布,解读网络视频IT架构变迁
- 注意:php5.4删除了session_unregister函数
- Xtrabackup每周增量备份脚本程序
- makefile:4: *** missing separator. Stop.
- M端页面-绝对定位布局
- 使用sqlite保存数据返回主键
- [置顶] Objective-C编程之道iOS设计模式单例解析(2)
- 最小点集覆盖=最大匹配<;二分图>;/证明
- 使用WordPress制作微信小程序
- [Swift]LeetCode12. 整数转罗马数字 | Integer to Roman
- NSRunLoop 在mac command line tool上的部分运用
- Linux下MySQL在知道密码的情况下修改密码