K8s环境下Quarkus Swagger UI请求异常问题排查
问题解决思路与方案
你遇到的问题核心是:Swagger UI依赖的OpenAPI文档里,接口的基础路径没有包含Ingress配置的/{{ namespace }}前缀,所以点击Swagger UI里的接口发送请求时,会直接调用不带前缀的地址,导致命名空间被移除。而curl能正常请求是因为你手动加上了前缀。
解决方法如下:
1. 给OpenAPI文档指定正确的服务器地址
在Quarkus的application.properties里添加配置,让生成的OpenAPI文档带上Ingress的前缀路径:
# 替换成你的实际外部访问域名和命名空间 quarkus.smallrye-openapi.server-url=https://your-domain/your-namespace
这样Swagger UI加载OpenAPI文档后,所有接口请求都会自动使用这个带前缀的地址,和Ingress的路径规则匹配。
2. 动态适配(避免硬编码)
如果不想固定域名和命名空间,也可以用Quarkus的环境变量或表达式来动态生成:
# 利用K8s注入的命名空间环境变量,结合外部访问地址 quarkus.smallrye-openapi.server-url=${QUARKUS_HTTP_EXTERNAL_URL:-https://default-domain}/${KUBERNETES_NAMESPACE:-default}
这里KUBERNETES_NAMESPACE是K8s自动注入到Pod的环境变量,QUARKUS_HTTP_EXTERNAL_URL可以通过Ingress的Host配置或外部服务发现来设置。
验证
修改配置后重启服务,打开Swagger UI,查看页面顶部的“Servers”选项,确认显示的地址包含/{{ namespace }}前缀。此时再发送请求,URL就会带上命名空间部分,不会再被移除。
内容的提问来源于stack exchange,提问作者Vim
相关产品推荐
相关产品推荐

