我一直在谷歌上搜索,我仍在努力了解Gloo或Kong等API网关的一个方面。我知道你可以配置它们,这样面向外部的URL就可以";连接的";到具有潜在完全不同URL的幕后内部服务器。这部分看起来像是一个简单的映射练习。
但我不明白的是,如果其中一个服务在其响应中返回URL(给它自己甚至其他服务(,该怎么办。我真的看不出你会如何处理这件事的很多例子。以Gloo为例,VirtualService
实例将定义";向前";路由(采用面向公众的URL和请求,并重写它们以转发到内部服务(。";内部";不知道这个路由是什么样子的,所以他们无法预测面向公众的URL会是什么。所以我假设他们会使用他们知道的(唯一(路由返回(例如JSON(响应和其中的链接,然后API网关会接收响应并重写其中的任何链接。
但我找不到任何关于这方面的文件?特别是,我感兴趣的是让一个服务返回解析到其他服务的链接,并确保这些重写也能正确完成。据我所见,所需的信息都存储在VirtualService
中,因此,除了Gloo代理之外,没有人能真正进行这种重写,我看不到任何证据表明它确实进行了重写。
我是不是错过了什么?!?
感谢
Gloo Edge支持在代理中转换响应,并且可以在VirtualService中指定。文档显示了下面的示例,该示例将":"状态";响应:
apiVersion: gateway.solo.io/v1
kind: VirtualService
metadata:
name: update-response-code
namespace: gloo-system
spec:
virtualHost:
domains:
- '*'
routes:
- matchers:
- prefix: /
routeAction:
single:
upstream:
name: postman-echo
namespace: gloo-system
options:
autoHostRewrite: true
options:
transformations:
responseTransformation:
transformationTemplate:
headers:
# We set the response status via the :status pseudo-header based on the response code
":status":
text: '{% if default(data.error.message, "") != "" %}400{% else %}{{ header(":status") }}{% endif %}'
您可以在API文档中找到所有转换选项,这些选项应该支持您更改主机和路径头(即URL(的意图。