Kubernetes中Nginx Ingress后部署Keycloak访问/auth端点出现404等错误
问题根因排查与修复方案
1 第一步先验证Keycloak本身服务可用性
先确认Keycloak Pod正常启动且内部可访问,执行以下命令:
# 检查Pod运行状态,确认STATUS为Running kubectl get pods -l app=keycloak # 查看Pod启动日志,排查数据库连接错误、初始化失败等问题 kubectl logs <替换为你的keycloak pod名称> # 集群内直接访问Keycloak服务,验证/auth端点是否正常响应 kubectl run -it --rm --image=curlimages/curl curl -- curl -v http://keycloak:8080/auth
如果内部访问/auth返回404,说明问题出在Keycloak配置,否则为Ingress配置问题。
2 修复已知配置错误
2.1 Deployment配置修正
你使用的Bitnami Keycloak镜像的代理转发环境变量名称需要增加KEYCLOAK_前缀,同时可选显式配置上下文路径:
env: # 替换原来的PROXY_ADDRESS_FORWARDING,Bitnami镜像需要带前缀 - name: KEYCLOAK_PROXY_ADDRESS_FORWARDING value: "true" # 显式指定Keycloak上下文路径为/auth,和你的frontendUrl匹配 - name: KEYCLOAK_HTTP_RELATIVE_PATH value: "/auth"
如果希望Keycloak直接运行在根路径,可将上述路径改为/,同时修改KEYCLOAK_EXTRA_ARGS的frontendUrl为https://my.keycloak.local。
2.2 Ingress配置修正
你的Ingress注解存在两个错误:
- X-Forwarded-For值错误,应该为客户端IP
$remote_addr而非$host - 无需单独写server-snippets,直接使用Ingress Controller原生注解更稳妥
修正后的Ingress配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx nginx.org/proxy-set-headers: | X-Forwarded-For $remote_addr X-Forwarded-Proto $scheme # 如果使用的是K8s社区版ingress-nginx(而非NGINX官方版),注解替换为以下内容 # nginx.ingress.kubernetes.io/proxy-set-headers: "X-Forwarded-For $remote_addr,X-Forwarded-Proto $scheme" # nginx.ingress.kubernetes.io/use-forwarded-headers: "true" name: ingress spec: tls: - hosts: - my.keycloak.local # 补充你的TLS证书Secret名称,避免使用默认证书导致异常 secretName: <替换为你的TLS证书secret名称> rules: - host: my.keycloak.local http: paths: - path: "/" pathType: Prefix backend: service: name: keycloak port: number: 8080
3 验证修复效果
重新应用修改后的Deployment和Ingress配置,等待Pod重启完成后访问https://my.keycloak.local/auth即可正常加载Keycloak页面。
内容的提问来源于stack exchange,提问作者dywan666
相关产品推荐
相关产品推荐

