我正在尝试实现一个网关与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";
});
它可以工作,但是,我认为它可以改进。