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 转换的主要内容,如果未能解决你的问题,请参考以下文章

如何将C++中的反向函数代码转换成Java

带有参数的 Django 反向 url 到基于类的视图

Google iOS 地理编码 SDK 将经纬度反向转换为 Places ID

ES6---扩展运算符和rest‘...’(三点运算符),在数组函数set/map等中的应用

RARP反向地址转换协议

使用正交矩阵将 3D 坐标转换为 2D 屏幕坐标