我在AKS上部署了两个kubernetes服务,它们从Nginx入口控制器接收流量。这两个服务的端点是https:<dns>/service1
和https:<dns>/service2
。现在,我想为每个服务设置Swagger。以下是我为其中一项服务设置Swagger UI的方法。
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "API V1");
});
使用此配置,我可以通过https:<dns>/service1/swagger
访问招摇。
现在的问题是,在Swagger UI中,当我想通过单击“试用”按钮然后单击“ Excute”按钮来测试api时,Swagger UI访问的URL是https:<dns>/api/v1/contoller
而不是{{1} }。这意味着Swagger UI不知道路径https:<dns>/service1/api/v1/contoller
的存在。我发现了几个与此类似的问题How to change base url of Swagger in ASP.NET core
。但是它们不是解决我问题的方法。我的猜测是我需要为Swagger设置基本路径。如果有人能告诉我如何在ASP.NET core 2.0中为Swagger配置基本路径,将不胜感激。
答案 0 :(得分:0)
基于https://github.com/apigee-127/swagger-tools/issues/342#issuecomment-391940961和https://github.com/springfox/springfox/pull/1217,也许您可以尝试在入口规则中设置X-forwarded-prefix,例如https://github.com/kubernetes/ingress-nginx/pull/1805#issuecomment-366896998
答案 1 :(得分:0)
请输入您的public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
在此之后使用:
app.UseSwaggerUI(c=>
{
c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "Giftaway API V1");
此选项
c.RoutePrefix = "service1";
这会让您https:<dns>/service1/api/v1/controller
答案 2 :(得分:0)
在您的入口中不要使用此注释
nginx.ingress.kubernetes.io/rewrite-target:/
答案 3 :(得分:0)
更改此:
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "API V1");
});
对此:
app.UseSwagger(c =>
{
#if !DEBUG
c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.BasePath = "/service1");
#endif
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("./swagger/v1/swagger.json", "API V1");
});
#if!DEBUG ... #endif 对于访问本地计算机中的swagger ui是必需的。
注意:我假设“ / service1”与头盔图表的values.yaml文件中的值相同。 (请参见下文)
...
ingress:
enabled: true
annotations: {
kubernetes.io/ingress.class: "nginx",
nginx.ingress.kubernetes.io/rewrite-target: /$1
}
path: /service1/?(.*)
hosts:
- your-aks-subdomain.your-azure-region.cloudapp.azure.com
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
hpa:
...