Express Gateway,如何根据URL模式选择服务端点?
我试图在网关后面的同一个域上获得一组单独的服务器。目前,外部世界可以通过多个名称访问这些服务器。我们的销售团队希望为客户提供一个唯一的url,因此,如果一台服务器为10位客户服务,我们就有10条指向它的CNAME记录 如您所见,对于5台或6台服务器,Express Gateway,如何根据URL模式选择服务端点?,express,api-gateway,express-gateway,Express,Api Gateway,Express Gateway,我试图在网关后面的同一个域上获得一组单独的服务器。目前,外部世界可以通过多个名称访问这些服务器。我们的销售团队希望为客户提供一个唯一的url,因此,如果一台服务器为10位客户服务,我们就有10条指向它的CNAME记录 如您所见,对于5台或6台服务器,apidendpoints的数量相当大。最重要的是,可以在任何给定的时间创建新的CNAME,这使得硬编码的apidentpoints成为管理的难题 是否可以有一个动态的serviceEndpointurl。我的想法是这样的: apiEndpoints
apidendpoints
的数量相当大。最重要的是,可以在任何给定的时间创建新的CNAME,这使得硬编码的apidentpoints
成为管理的难题
是否可以有一个动态的serviceEndpoint
url。我的想法是这样的:
apiEndpoints:
legacy:
host: '*.mydomain.com'
paths: '/v1/*'
serviceEndpoints:
legacyEndPoint:
url: '${someVarWithValueofStar}.internal.com'
pipelines:
default:
apiEndpoints:
- legacy:
policies:
- proxy:
- action:
serviceEndpoint: legacyEndPoint
基本上,我想要实现的是将所有x.mydomain.com
重定向到x.internal.com
,其中x
可以是任何内容
我可以在url字符串中使用变量吗?有没有办法获取与主机中的通配符匹配的字符串?有没有其他办法来解决这个问题呢?谢谢你的提问,我想在接下来的几个月里会有很多人问这个问题 Express Gateway支持环境变量;不幸的是,目前,
apiEndpoint
只能是一个定义良好的端点,没有任何替换功能
这是我们在不久的将来可能会改变的事情——使用代理表API,您可以插入一些更难的模板
如果这对您来说很紧迫,我会邀请您这样做,以便团队中的每个人都知道这样的功能,并且我们可以有效地对其进行优先级排序
同时,不幸的是,您将不得不处理大量的API端点
V.为了满足我的需要,我最终破解了一个代理插件。非常基本,需要更多的工作和测试,但这是我开始的: 代理插件(我的代理) gateway.config.xml
http:
port: 8080
apiEndpoints:
legacy:
host: '*.external.com'
paths: '/v1/*'
serviceEndpoints:
legacy_end_point:
url: 'https://*.internal.com'
policies:
- my-proxy
pipelines:
default:
apiEndpoints:
- legacy
policies:
- my-proxy:
- action:
serviceEndpoint: legacy_end_point
changeOrigin: true
这一切都归结为regex解析
apidendpoints
和serviceEndpoints
主机和URL中的通配符,到目前为止还没有什么特别之处。我查看了内置代理插件的源代码,我认为我的天真方法不太适合,但它可以满足我的需要。感谢您的反馈。起初我想提出一个问题,但不知道如何陈述。我想我现在知道了。就我的问题而言,我已经解决了,我创建了自己的代理策略,知道如何解析serviceEndPoint
URL中的通配符,并用请求主机名中的服务器名称替换通配符。它非常粗糙,只适用于我的用例,如果我有时间想出一个更优雅的解决方案,我会创建一个PR。嘿,太好了。如果你能给我指一下你修改/编写的代码,我很想看看是否有机会在我们的主要分支中找到它。谢谢我已经添加了我自己的答案来描述我的解决方案。顺便说一句,我在这里创建了一个功能请求,非常棒。我们会调查的!
http:
port: 8080
apiEndpoints:
legacy:
host: '*.external.com'
paths: '/v1/*'
serviceEndpoints:
legacy_end_point:
url: 'https://*.internal.com'
policies:
- my-proxy
pipelines:
default:
apiEndpoints:
- legacy
policies:
- my-proxy:
- action:
serviceEndpoint: legacy_end_point
changeOrigin: true