基本服务-使用大使网关

这是我对Knative服务进行实验的延续,这次是围绕在Knative服务应用程序之上构建网关。 这是基于我之前的两篇文章- 使用Knative部署Spring Boot App以及在Knative中进行服务到服务的调用 。

为什么在Knative应用程序之上使用网关

为了解释这一点,让我谈谈我以前的博客文章。 假设在Kubernetes环境中已经可以使用Knative服务 ,则部署应用程序的方法是使用清单,如下所示:

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:name: sample-boot-knative-servicenamespace: default
spec:runLatest:configuration:revisionTemplate:spec:container:image: bijukunjummen/sample-boot-knative-app:0.0.3-SNAPSHOTenv:- name: ASAMPLE_ENVvalue: "sample-env-val"

现在要调用此应用程序,我必须通过Knative服务创建的入口进行调用,可以在minikube环境中通过以下方式获得该入口:

export GATEWAY_URL=$(echo $(minikube ip):$(kubectl get svc knative-ingressgateway -n istio-system -o 'jsonpath={.spec.ports[?(@.port==80)].nodePort}'))

现在,请求必须经过入口,并且入口使用Host http标头将请求路由到应用。 可以使用以下bash脚本获取已部署服务的主机头:

export APP_DOMAIN=$(kubectl get services.serving.knative.dev sample-boot-knative-service  -o="jsonpath={.status.domain}")

然后使用CURL通过knative入口网关进行以下调用:

curl -X "POST" "http://${GATEWAY_URL}/messages" \-H "Accept: application/json" \-H "Content-Type: application/json" \-H "Host: ${APP_DOMAIN}" \-d $'{"id": "1","payload": "one","delay": "300"
}'

或使用httpie :

http http://${GATEWAY_URL}/messages Host:"${APP_DOMAIN}" id=1 payload=test delay=1

通过knative入口调用应用程序涉及太多步骤:

大使网关

我在这篇文章中的目的是通过使用诸如Ambassador之类的网关来简化向应用程序拨打电话的用户体验。

驻基纳大使

将大使安装到Knative环境并没有什么特别的, 这里提供的出色说明在我的minikube环境中可以正常工作。

现在,此图概述了我的网关目标:

大使网关

有了大使之后,用户要做的就是将请求发送到大使网关,在向Knative Ingress提出请求之前,它将负责插入Host标头。

那么,这是如何工作的,相当容易! 假设有适当的大使,它所需要的就是一个配置,该配置可以通过以下方式在Kubernetes服务上搭载:

---
apiVersion: v1
kind: Service
metadata:name: sample-knative-app-gatewayannotations:getambassador.io/config: |---apiVersion: ambassador/v0kind:  Mappingname: sample-boot-knative-appprefix: /messagesrewrite: /messagesservice: knative-ingressgateway.istio-system.svc.cluster.local host_rewrite: sample-boot-knative-service.default.example.com
spec:type: LoadBalancerports:- name: ambassadorport: 80targetPort: 80selector:service: ambassador

在这里,我通过Service注释提供配置,拦截对/ messages uri的所有调用,并将这些请求转发到knative ingressgatway服务(knative-ingressgateway.istio-system.svc.cluster.local),并添加“ sample- boot-knative-service.default.example.com”。

现在,从用户的角度来看,交互要简单得多,我要做的就是使用以下bash脚本在minikube环境中获取此新服务的url并进行api调用:

export AMB_URL=$(echo $(minikube ip):$(kubectl get svc sample-knative-app-gateway -n default -o 'jsonpath={.spec.ports[?(@.port==80)].nodePort}'))http http://${AMB_URL}/messages id=1 payload=test delay=1

在真实的代码上尝试此操作可能会更容易,可在我的github存储库中找到该代码。

翻译自: https://www.javacodegeeks.com/2018/09/knative-serving-using-ambassador-gateway.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql function 表名作为参数_mysql 常用的分组聚合函数

mysql 常用的分组聚合函数1.聚合运算一般情况下,需要的聚合数据(和,平均值,最大,最小等)并不总是存储在表中,但是可以执行存储数据的计算来获取它.根据定义,聚合函数对一组值执行计算并返回单个值.MySQL提供了许多聚合函数,包括AVG,COUNT,SUM,MIN,MAX等.除COUNT函数外,其它聚合…

java加减乘除运算顺序_java 实现加减乘除混合运算

初衷:解决小学一年级到四年级 基本加减乘除混合运算基本思路:表达式:10032-200(10000/5(100/2))此类表达式我们称之为中缀表达式(运算符在数字的中间),如果我们稍加转换,转化为100, 3, , 2, , 200, -, 10000, 5, /, 100, 2, /, , …

java integer valueof_对 Java Integer.valueOf() 的一些了解

从一道选择题开始分析选项A选项A中比较的是i01和i02,Integer i0159这里涉及到自动装箱过程,59是整型常量,经包装使其产生一个引用并存在栈中指向这个整型常量所占的内存,这时i01就是Integer 的引用。而int i0259由于int是基本类型…

java web 伪静态_【Java Web】使用URLRewrite实现网站伪静态

大部分搜索引擎都会优先考虑收录静态的HTML页面,而不是动态的*.jsp、*.php页面。但实际上绝大部分网站都是动态的,不可能全部是静态的HTML页面,因此互联网上大部分网站都会考虑伪静态——就是将*.jsp、*.php这种动态URL伪装成静态的HTML页面。…

使用Spring WebFlux从Corda节点流式传输数据

自上次发布以来已经有一段时间了,但我终于回来了! 由于我仍在我的项目中,因此我将再次撰写有关使用Corda的文章。 这次,我们将不再关注Corda,而是将Spring与Corda结合使用。 更具体地说,Spring WebFlux。 为…

mysql 批量加索引_mysql优化:按期删数据 + 批量insert + 字符串加索引为何很傻

嗯,犯了一个很低级的错误,最近暴露出来了。html背景:mysql1. 内部平台,接口间断性无返回,查询日志注意到失败时,接口耗时达到4000(正常状态:100ms)git2. 增长日志打点,在关键步骤插入…

MySQL中引入存储引擎意义是_mysql学习九:存储引擎、存储过程和函数的引入

存储引擎:存储引擎是mysql特有的,共有7种,常用的有myisam、memory、innodb查看表的存储引擎:show create table 表名;修改表的存储引擎:alter table 表名 engine存储引擎名称;1.myisam存储引擎:可转换为压缩…

python土味情话_土味情话表情包下载

喵星人土味情话表情包是一款很甜的表情图片,现在的聊天模式三句话离不开表情包,而且小编带来的这款表情包非常的适合情侣日常撩,最新的土味情话,需要的朋友可以前来本站下载。土味情话大全一、“对不起。”“你永远都不要和我说对…

多云互操作性!=云服务聚合

多云定义为一种方法,它将来自多个云供应商的多个云(公共云或私有云)组合在一起。 但是,这不是来自不同供应商的各种服务的集合,它需要一种强制性的胶合剂–云不可知的方法,并在所有提供商之间实现互操作性。…

如何在Spring中将@RequestParam绑定到对象

您是否在请求映射方法中用RequestParam注释了多个参数,并认为它不可读? 当请求中需要一个或两个输入参数时,注释看起来非常简单,但是当列表变长时,您可能会感到不知所措。 您不能在对象内部使用RequestParam批注&…

webstorm前端调用后端接口_软件测试面试题:怎么去判断一个bug是前端问题还是后端问题...

大家好,在软件测试面试过程中,经常有面试官问到这个问题,那我们应该如何回答才好呢?少废话,直接看答案:答案:在页面上发现bug之后,要想判断这个问题属于后端还是前端,我就…

首次适应算法_CVPR 2020丨?商汤TSD目标检测算法获得Open Images冠军

编者按:此前,在文章《商汤科技57篇论文入选ICCV 2019,13项竞赛夺冠》里,商汤君报道了商汤科技荣获Open Images Object Detection Challenge 2019 冠军。由Google AI主办的Open Images大赛是目前通用物体检测和实例分割两个领域中数…

玩JDK 12的Switch表达式

在博客文章“操作中的JDK语言功能预览:切换表达式 ”中,我讨论了JEP 325 [“切换表达式( 预览 )”)如何作为指定的“ 预览语言功能 ”的早期应用,如JEP 12所述。预览语言和VM功能”]。 JEP 325 适用于JDK 1…

python 验证码_4行Python代码生成图像验证码

点击上方蓝色字体,关注我们最近无意看到网上有人使用Python编写几十行代码生成图像验证码,感觉很是繁琐,这里为各位朋友推荐两种方法,使用4行Python代码即可生成验证码。1captcha库第1步:安装captcha库pip install cap…

python3 多线程_Python3多线程爬虫实例讲解

多线程概述多线程使得程序内部可以分出多个线程来做多件事情,充分利用CPU空闲时间,提升处理效率。python提供了两个模块来实现多线程thread 和threading ,thread 有一些缺点,在threading 得到了弥补。并且在Python3中废弃了thread…

java多条件组合查询6_elasticsearch组合多条件查询实现restful api以及java代码实现

elasticsearch组合多条件查询实现restful api以及java代码实现实际开发中,基本都是组合多条件查询。elasticsearch提供bool来实现这种需求;主要参数:must文档 必须 匹配这些条件才能被包含进来。must_not文档 必须不 匹配这些条件才能被包含进…

基于java家教管理系统_基于jsp的家教信息管理-JavaEE实现家教信息管理 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的家教信息管理, 该项目可用各类java课程设计大作业中, 家教信息管理的系统架构分为前后台两部分, 最终实现在线上进行家教信息管理各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类家教信息管理相关的实体…

如何从云功能调用外部REST API

在之前的博客文章中,我展示了如何创建您的第一个云功能 (以及一个视频 )。 您的云函数很可能需要调用外部REST API。 以下教程将向您展示如何创建此类功能(非常简单)。 登录到IBM Cloud帐户 点击目录 删除标签&…

机器学习分类算法_机器学习分类算法

人们曾在自身的神经元得到启发,将机器学习中给出的特征输入与权重之积作为输出与阈值作比较,得到0或者1的输出。这就是我们感知器的实现原理感知器在实现过程中的步骤如下:①将权值初始化称为一个很小的向量②迭代训练所有样本:计…

apache camel_Apache Camel –从头开始开发应用程序(第1部分/第2部分)

apache camel开始之前 前段时间,我写了一篇关于Spring Integration的教程,以演示如何在受现实发票处理系统启发的示例应用程序中使用Spring Integration。 我对此非常满意,因此我决定向您展示如何使用Apache Camel(Spring Integra…