Minikube环境Nginx Ingress访问RabbitMQ管理界面队列报未找到错误
问题根因
报错本质是RabbitMQ管理界面默认基于根路径/生成跳转链接和接口请求路径,你当前的Ingress配置仅做了入口路径的重写,没有适配RabbitMQ的路径前缀,也没有处理页面跳转后的路径补全问题,所以点击内部页面时请求路径丢失前缀导致404。port-forward是直接访问根路径服务,所以不会有该问题。
排查步骤
- 打开浏览器开发者工具的「网络」标签,复现点击队列的操作,查看报错请求的完整URL,确认是否缺少
/rabbit前缀 - 执行
kubectl logs <nginx-ingress-controller-pod名称> -n <ingress所在命名空间>,查看404请求的实际转发路径,确认是否转发到了RabbitMQ服务不存在的路径上
解决方法
第一步:修改RabbitMQ部署配置,添加前缀适配参数
给RabbitMQ的Deployment/Pod添加环境变量RABBITMQ_SERVER_PREFIX,值为/rabbit,让RabbitMQ管理界面生成的所有链接都自动带上/rabbit前缀:
env: - name: RABBITMQ_SERVER_PREFIX value: "/rabbit"
如果是用官方Operator部署的RabbitMQ,可在实例配置中添加:
apiVersion: rabbitmq.com/v1beta1 kind: RabbitmqCluster spec: # 其他原有配置保留 env: - name: RABBITMQ_SERVER_PREFIX value: "/rabbit"
第二步:调整Ingress配置
不需要修改当前的rewrite规则,新增proxy-redirect注解修正3xx跳转的路径即可:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: rabbitmq-ingress annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /$2 # 新增下面2条注解修正跳转路径 nginx.ingress.kubernetes.io/proxy-redirect: "http://$host/" "http://$host/rabbit/" nginx.ingress.kubernetes.io/proxy-redirect: "https://$host/" "https://$host/rabbit/" labels: name: rabbitmq-ingress spec: rules: - http: paths: - pathType: Prefix path: /rabbit(/|$)(.*) backend: service: name: rabbitmq-management port: number: 15672
第三步:验证配置
更新完RabbitMQ和Ingress配置后,清空浏览器缓存再访问/rabbit路径,点击队列等内部功能即可正常使用。
内容的提问来源于stack exchange,提问作者Jonathas Garcia
相关产品推荐
相关产品推荐

