EKS集群中NGINX Ingress对接Keycloak无限重定向问题求解
解决方案
1. 修正Keycloak环境变量配置
路径跳转404问题核心是Keycloak默认上下文路径为/auth,和你期望的/v1/auth不匹配,无限重定向是因为代理头传递不完整,需根据你使用的Keycloak版本补充配置:
- 若使用WildFly版本Keycloak(16及更早),补充上下文路径参数,修正后的
extraEnv如下:
extraEnv: | - name: PROXY_ADDRESS_FORWARDING value: "true" - name: KEYCLOAK_HOSTNAME value: "ab12de4e5e0014cce978ff01da712b39-630471733.eu-west-1.elb.amazonaws.com" - name: KEYCLOAK_FRONTEND_URL value: "http://ab12de4e5e0014cce978ff01da712b39-630471733.eu-west-1.elb.amazonaws.com/v1/auth" - name: KEYCLOAK_HTTP_RELATIVE_PATH value: "/v1/auth"
- 若使用Quarkus版本Keycloak(17及更高),旧的
PROXY_ADDRESS_FORWARDING参数已失效,替换为代理模式配置:
extraEnv: | - name: KC_PROXY value: "edge" - name: KC_HOSTNAME value: "ab12de4e5e0014cce978ff01da712b39-630471733.eu-west-1.elb.amazonaws.com" - name: KC_HOSTNAME_STRICT_HTTPS value: "false" - name: KC_HTTP_RELATIVE_PATH value: "/v1/auth"
2. 修正Nginx Ingress配置
添加必要注解保证代理头正确传递,避免重定向循环,路径匹配无需额外rewrite(已调整Keycloak上下文路径),参考配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: keycloak-ingress annotations: nginx.ingress.kubernetes.io/proxy-buffer-size: "128k" nginx.ingress.kubernetes.io/ssl-redirect: "false" # 当前使用HTTP访问需保留,HTTPS场景可删除 nginx.ingress.kubernetes.io/use-regex: "true" spec: ingressClassName: nginx rules: - host: ab12de4e5e0014cce978ff01da712b39-630471733.eu-west-1.elb.amazonaws.com http: paths: - path: /v1/auth(/|$)(.*) pathType: Prefix backend: service: name: keycloak-service port: number: 80
3. 验证Service配置正确性
确认你编写的Service的selector和Keycloak Pod标签完全匹配,执行以下命令校验:kubectl get pods -l app=keycloak-dev-cluster-0
如果返回结果为空,说明标签不匹配,调整Service的selector为Keycloak Pod实际标签即可。
4. 配置生效验证
- 先通过
kubectl port-forward连接Keycloak Pod,访问http://localhost:8080/v1/auth,确认可以正常打开控制台,说明Keycloak侧上下文路径配置生效 - 再直接访问ELB地址的
/v1/auth路径,验证重定向逻辑正常
内容的提问来源于stack exchange,提问作者Phil O'Dowd
相关产品推荐
相关产品推荐

