也许它可以帮助某人,这是我可以使这个设置工作的唯一方法。
访问以下位置的 swagger 文档:
https://domain/gatewayfeature1
还有以下 API:
https://domain/apisfeature1
另一个功能也是如此。
文档
https://domain/gatewayfeature2
API
https://domain/apisfeature2
我使用 nginx 作为反向代理,使用 ocelot 作为我的 apis 和 GKE 集群的网关。
我最终使用的入口 yaml 是 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 按功能“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";
});
它有效,但是,我认为它可以改进。