当前位置: 首页 > 知识库问答 >
问题:

Swagger UI尝试一下!对库伯内特斯不起作用

张鸿志
2023-03-14

我们有一个JavaSpring启动项目,其中包括Swagger和docker。我们将其部署在入口控制器后面的kubernetes上。

它在localhost中正常工作(使用postman和swagger ui尝试按钮)。当我们部署它时,问题就来了。

Rest控制器:

@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

现在入口:

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

然后,在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使用:host basepath operation_path生成endpointURL,即:test。主办com/操作

它不聚合入口路径。

我们怎么处理呢?当然,只有在使用入口控制器部署它时才会发生这种情况,因为我们添加了/myapp路径。

谢谢

共有1个答案

颜新
2023-03-14

问题是如何使swagger的基本路径与代理后面正在使用的路径匹配。根据,存在多个解决方案https://github.com/springfox/springfox/issues/1443

因为您有一个特定的主机,所以我建议您使用该主机根据请求到达的主机更改swagger知道的基本路径。通过这种方式,可以对本地主机和远程主机进行不同的设置。您需要在Swagger@Configuration类的自定义摘要部分为主机设置RelativePathProvider,如中所示https://github.com/springfox/springfox/issues/1443#issuecomment-274540681

 类似资料:
  • 据我所知,作业对象应该在一定时间后收获豆荚。但是在我的GKE集群(库伯内特斯1.1.8)上,“kubectl get pods-a”似乎可以列出几天前的豆荚。 所有这些都是使用乔布斯API创建的。 我确实注意到在使用 kubectl 删除作业后,pod 也被删除了。 我在这里主要担心的是,我将在批量作业中在集群上运行成千上万个pod,并且不想让内部待办系统过载。

  • 我在windows 10中创建了两个在我的minikube环境中运行的POD。一个POD带有Spring boot应用程序容器,另一个POD带有mysql容器。对于Spring boot应用程序,服务类型为nodePort,对于MYSQL pod,服务类型为club sterIP。这意味着Mysql pod只需要在集群内部进行通信。但是对于Spring boot应用程序,需要从浏览器访问,所以我配

  • 我假设没有愚蠢的问题,所以这里有一个我找不到直接答案的问题。 现在的情况 我目前有一个运行1.15的Kubernetes集群。AKS上的x,通过Terraform部署和管理。AKS最近宣布Azure将在AKS上停用Kubernetes的1.15版本,我需要将集群升级到1.16或更高版本。现在,据我所知,直接在Azure中升级集群不会对集群的内容产生任何影响,即节点、豆荚、秘密和当前在那里的所有其他

  • 我正在尝试在Kubernetes集群(Azure AKS)中部署Flink作业。作业群集在启动后立即中止,但任务管理器运行正常。 docker镜像创建成功,没有任何异常。我可以运行docker镜像,也可以SSHdocker镜像。 我已经按照以下链接中提到的步骤: https://github.com/apache/flink/tree/release-1.9/flink-container/kub

  • 我在Kubernetes是个新手。我想知道在kubernetes环境中最好的生产部署场景是什么。 在过去的学派中,我习惯于将Web服务器(例如Nginx或Apache)放在DMZ层,而将其放在其他层(我们称之为层)。这样,只有web服务器在DMZ上,恶意攻击只能在web服务器VM上进行。 据我所知,K8S部署不再需要这种方法;这是因为K8S自己处理网络、吊舱和流量。所以我在考虑最确定的部署方案。

  • 我试图设置Kubernetes入口,将外部http流量路由到前端pod(路径/)和后端pod(路径/rest/*),但我总是得到400错误,而不是主nginx索引。html。 所以我在第https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer页尝试了谷歌库伯内特斯的例子,但我总是得到400个错误。有什么想法吗?