Swagger plus Ocelot



我正在尝试实现一个网关与ocelot和swagger (https://github.com/Burgyn/MMLib.SwaggerForOcelot)。我能够在本地主机上很好地配置所有内容,现在我需要将我的解决方案部署到kubernetes,但是,由于并行开发了一些功能,我被要求将我的解决方案部署到子目录中,就像这样。

  • https://domain/Feature1/gateway1
  • https://domain/Feature2/gateway2…

他们不知道如何通过特征来拥有子域。

我的配置工作,但有一个问题与swagger UI,因为测试路径是这样映射的。

https://domain/api/service/method

但是我需要像

这样的东西https://domain/Feature1/api/service/method

这可能吗?

我不确定我是否有帮助,但是MMLib。SwaggerForOcelot支持虚拟目录。请试试这个

也许它可以帮助某人,这是我可以使这个设置工作的唯一方法。

到达swagger文档:https://domain/gatewayfeature1

中的api:https://domain/apisfeature1

另一个特性也是如此。

文档https://domain/gatewayfeature2

apihttps://domain/apisfeature2

我使用nginx作为反向代理,ocelot作为我的api和GKE集群的网关。

我最后使用的入口url是this by feature, "apifeature1", "apifeature2",…

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/use-regex: "true"
name: test
namespace: default
spec:
rules:
- host: testdomain
http:
paths:
- backend:
serviceName: gateway-feature1
servicePort: 80
path: /docsfeature1/(.*)
- backend:
serviceName: gateway-feature1
servicePort: 80
path: /(apifeature1/.*)

Ocelot Config by feature "apifeature1", "apifeature2",…

在本例中,我从配置中读取特性名称,因此ocelot配置以如下示例结尾。

{
"UpstreamPathTemplate": "/apifeature1/api/controller/{everything}",
"UpstreamHttpMethod": [ "Get", "Post" ],
"DownstreamPathTemplate": "/{everything}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "apifeature1",
"Port": "80"
}
],
"SwaggerKey": "api"
},

和网关按特性。

app.Use((context, next) =>
{
context.Request.PathBase = new PathString("/apifeature1");
return next();
}); 
.
.
.
app.UseSwaggerForOcelotUI(c =>
{
c.DownstreamSwaggerEndPointBasePath = "/apifeature1/swagger/docs";
c.PathToSwaggerGenerator = "/apifeature1/swagger/docs";
c.DocumentTitle = "DOCUMENT";
});

它可以工作,但是,我认为它可以改进。

相关内容

  • 没有找到相关文章

最新更新