线上k8s环境swagger2调用接口失败

本文解决了一个在Kubernetes环境下集成Swagger2时遇到的404问题,详细介绍了如何正确配置Swagger2的host参数,以确保不同开发环境下的正确调用。通过将配置放入Kubernetes的环境变量,避免了不同环境共用同一配置的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近后端项目集成了swagger2,浏览器正常打开了swagger-ui.html,但是调用接口时却报404错误,仔细一看是接口调用地址和浏览器访问地址并不相同。

分析了下接口调用地址的host,它竟然是k8s环境中的后端应用的service。

由于当前项目通过k8s部署,前端和后端app均以容器的形式运行在pod之中,pod之间通过service指定的host和端口号来进行访问,所以浏览器打开swagger-ui.html后,swagger2实际调用的接口地址的host也变成了service,所以会出现404。

解决这个问题的方案很简单,即为swagger2指定host:

初始化Docket对象时通过host方法指定swagger2的host:

@Value("${swagger.host}")
private String swaggerHost;

new Docket(DocumentationType.SWAGGER_2).host(swaggerHost)
        .groupName("demo")
        .apiInfo(getApiInfo())
        .select()...

将接口地址配置在application.properties中:

swagger.host=xxx.biz/api

这种方案虽然可行,但是不推荐。

由于当前后端应用部署在k8s环境中,镜像挂载到不同namespace中,不同的namespace就是不同的开发环境,而所有镜像都使用了同一个配置文件,所以这就意味着不同开发环境的swagger2调用了同一个地址,显然不合理。如果要避免这个情况,则每次发版打镜像时都需要修改application.properties中的host,很不方便。

所以当前项目决定将swagger2的host配置到k8s的环境变量里面,由于不同开发环境创建Deployment对象的配置文件不同,所以避免了不同环境共用同一个host的情况。

最终解决方案:

在application.properties中添加:

swagger.host=${SERVER_HOST}

在创建Deployment对象的配置文件aws-k8s-devx.yaml中添加:

- name: SERVER_HOST
  value: xxx.biz/api            

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alphathur

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值