You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx Ingress路径匹配异常 访问Keycloak控制台报404

问题根因

出现管理员控制台404的核心原因是反向代理路径适配逻辑不匹配:

  • 当前Nginx Ingress配置了/auth-svc前缀路径,搭配rewrite-target: /$2规则会把请求路径里的/auth-svc前缀剥离后再转发给后端Keycloak服务。但Keycloak默认生成的内部跳转链接(包括管理员控制台入口地址)是基于自身服务根路径生成的,不会自动感知外层Ingress加的/auth-svc前缀,点击跳转时请求会直接发往/auth/admin/xxx路径,匹配不到Ingress上配置的/auth-svc开头的路由规则,直接返回404。
  • 测试把Ingress路径改成根路径/、或者直接用LoadBalancer暴露服务直连时功能全部正常,已经可以排除Keycloak服务本身故障,问题完全出在反向代理的路径适配环节。
解决方案

根据部署需求二选一即可:

方案1:根路径直接暴露(最简单,和直连LoadBalancer效果一致)

直接去掉路径重写规则,把Ingress匹配路径改成根路径,配置参考:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: awesome-ingress
spec:
  ingressClassName: nginx
  rules:
    - http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: auth-service-svc
              port:
                number: 80

配置生效后直接访问http://<ingress-ip>/auth/即可进入首页,所有内部跳转都不会出现路径丢失问题。

方案2:保留/auth-svc访问前缀(需同步修改Keycloak配置)

如果业务要求必须保留/auth-svc的访问前缀,需要同时调整两处配置:

  1. 修改Keycloak启动参数,让它生成的所有跳转链接自动带上/auth-svc前缀:
    在auth-service-svc对应的工作负载(Deployment/StatefulSet)中添加环境变量:
    env:
    - name: KEYCLOAK_HTTP_RELATIVE_PATH
      value: /auth-svc/auth
    - name: PROXY_ADDRESS_FORWARDING
      value: "true"
    
    如果使用的是Quarkus架构之前的旧版WildFly Keycloak,把上面的KEYCLOAK_HTTP_RELATIVE_PATH替换为KEYCLOAK_FRONTEND_URL,值设置为实际访问地址http://<访问IP或域名>/auth-svc/auth即可
  2. 调整Ingress配置,添加必要的代理转发头,保证Keycloak能正确识别外层代理信息,配置参考:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: awesome-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
        nginx.ingress.kubernetes.io/configuration-snippet: |
          proxy_set_header X-Forwarded-Proto $scheme;
          proxy_set_header X-Forwarded-Host $host;
    spec:
      ingressClassName: nginx
      rules:
        - http:
            paths:
            - path: /auth-svc(/|$)(.*)
              pathType: Prefix
              backend:
                service:
                  name: auth-service-svc
                  port:
                    number: 80
    

配置完成后重启Keycloak Pod,再访问http://<ingress-ip>/auth-svc/auth/,点击管理员控制台即可正常跳转到登录页。


内容的提问来源于stack exchange,提问作者Yashvardhan Nathawat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:54:23