Gloo、Kong 等中的反向 URL 转换
Posted
技术标签:
【中文标题】Gloo、Kong 等中的反向 URL 转换【英文标题】:Reverse URL Transformations in Gloo, Kong, etc 【发布时间】:2021-07-14 22:43:34 【问题描述】:我一直在谷歌搜索和谷歌搜索,但我仍在尝试了解 Gloo 或 Kong 等 API 网关的一个方面。我知道您可以配置它们,以便面向外部的 URL “连接”到幕后的内部服务器,这些服务器可能具有完全不同的 URL。这部分似乎是一个简单的映射练习。
但我不明白的是,如果这些服务之一在其响应中返回一个 URL(给它自己或什至其他服务),你会怎么做。我真的看不到很多你将如何处理这个问题的例子。以 Gloo 为例,VirtualService
实例将定义“转发”路由(获取面向公众的 URL 和请求并重写它们以转发到内部服务)。 “内部”的服务不知道这个路由是什么样的,所以他们无法预测面向公众的 URL 是什么。所以我会假设他们会使用他们知道的(唯一)路由返回(例如,JSON)响应,其中包含链接,然后 API 网关将获取响应并重写其中的任何链接。
但我找不到任何关于此的文档?特别是,我感兴趣的是让一个服务返回链接可以解析到其他服务,并确保这些重写也正确完成。据我所知,所需的信息都存储在 VirtualService
中,因此,除了 Gloo 代理之外,没有人可以真正进行这种重写,我没有看到任何证据。
我错过了什么吗?!?
谢谢
【问题讨论】:
您可以使用插件对响应正文进行一些转换,但这非常脆弱。重新映射 url 很快就会变成一场噩梦。 【参考方案1】:Gloo Edge 支持在代理中转换响应,它可以在 VirtualService 中指定。文档显示 the example below 转换响应的 ":status":
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 documentation 找到所有转换选项,这些选项应该支持您更改主机和路径标头(即 URL)的意图。
【讨论】:
以上是关于Gloo、Kong 等中的反向 URL 转换的主要内容,如果未能解决你的问题,请参考以下文章
Google iOS 地理编码 SDK 将经纬度反向转换为 Places ID