mve*_*ezm 5 swagger swagger-ui spring-boot kubernetes kubernetes-ingress
我们有一个带有 Swagger 和 docker 的 Java Spring Boot 项目。我们将其部署在入口控制器后面的 kubernetes 上。
它在本地主机中正常工作(使用邮递员和 swagger-ui 尝试按钮)。当我们部署它时,问题就来了。
休息控制器:
@ApiOperation(value = "Operation",
notes = "it does something<br />")
@RequestMapping(value="/operation", method=RequestMethod.POST)
@ApiResponses({
@ApiResponse(code = 200, message = "OK")
})
@ResponseBody public ResponseEntity<String> operation(@RequestBody BodyThing thing) {
return new ResponseEntity<>("OK", HttpStatus.OK);
} //operation
Run Code Online (Sandbox Code Playgroud)
现在入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: myapp-ingress
namespace: __NAMESPACE__
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- test.host.com
secretName: key-pair
rules:
- host: test.host.com
http:
paths:
- path: /myapp
backend:
serviceName: myapp-service
servicePort: 8080
Run Code Online (Sandbox Code Playgroud)
然后,在线部署在K8S上的应用程序,使用postman之类的应用程序,我们必须调用:https ://test.host.com/myapp/operation 才能调用API。它工作正常。
如果我们进入 Swagger UI 门户,问题就来了:https : //test.host.com/myapp/swagger-ui.html
如果我们在 swagger UI 中尝试 API 调用,它会尝试调用https://test.host.com/operation并且失败并显示 404 代码。
Swagger-UI 使端点 URL 为:host + basepath + operation_path,即:test.host.com + / + operation
它不会聚合入口路径。
我们该如何处理?当然,这只有在我们使用入口控制器部署它时才会发生,因为我们添加了 /myapp 路径。
谢谢!
问题是如何使 swagger 的基本路径与代理后面使用的路径相匹配。根据https://github.com/springfox/springfox/issues/1443有不止一种解决方案
由于您有一个特定的主机,我建议使用该主机来更改 swagger 根据请求发送到的主机所了解的基本路径。通过这种方式,您可以为本地主机和远程主机进行不同的设置。您需要在 Swagger @Configuration 类的自定义摘要部分中为主机设置relativepathprovider,如https://github.com/springfox/springfox/issues/1443#issuecomment-274540681
| 归档时间: |
|
| 查看次数: |
9505 次 |
| 最近记录: |