Kong背后的Keycloak和奇怪的重定向

Posted

技术标签:

【中文标题】Kong背后的Keycloak和奇怪的重定向【英文标题】:Keycloak behind Kong and strange redirect 【发布时间】:2019-08-05 11:25:12 【问题描述】:

设置:

minikube 版本:v0.27.0 Kong(helm install stable/kong)/版本 1.0.2 Keycloak(helm install stable/keycloak)/版本 4.8.3.Final

我的“hello.local”有一个自签名 SSL 证书。

我需要实现的目标:Kong 后面的 Keycloak at "https://hello.local/"。

我的步骤:

1) 新鲜的 minikube

2) 使用 helm 安装 Keycloak,遵循 values.yaml:

keycloak:
    basepath: ""
    replicas: 1
    ...
    extraEnv: |
      - name: PROXY_ADDRESS_FORWARDING
        value: "true"

(这将创建服务auth-keycloak-http

3) 使用 helm 安装 Kong,遵循 values.yaml:

replicaCount: 1
admin:
  ingress:
    enabled: true
    hosts: ['hello.local']
proxy:
  type: LoadBalancer 
  ingress:
    enabled: true
    hosts: ['hello.local']
    tls:
      - hosts:
        - hello.local
        secretName: tls-certificate
    annotations:
      kubernetes.io/ingress.class: "nginx"
      nginx.ingress.kubernetes.io/rewrite-target: /
      nginx.ingress.kubernetes.io/ssl-passthrough: "true"
  tls:
    enabled: true
postgresql:
...

4) 我为 Kong 设置服务和路由

服务:

Protocol: http
Host: auth-keycloak-http
Port: 80

路线:

Hosts: hello.local 

之后我可以打开“https://hello.local”并从 Keycloak 看到欢迎页面,我可以在其中单击管理控制台,然后在浏览器中重定向到“https://hello.local:8443/admin/master/console/”。因此,此时我们不应该使用另一个端口进行重定向。

如果 PROXY_ADDRESS_FORWARDINGtrue,则使用 2 个 docker 映像(Keycloak + Kong)的设置正在工作。

如何使 Keycloak(掌舵图)按预期在 kubernetes 集群中的 Kong(掌舵图)后面工作,而无需重定向?

github issue 1、github issue 2 和 github issue 3 正在讨论这个问题。还有,类似问题on ***

【问题讨论】:

你问什么问题? 已添加问题,以及与此问题相关的额外链接 【参考方案1】:

原答案:

看来,需要在keycloak helm chart的values.yaml中设置如下环境变量:

...
  extraEnv: |
    - name: KEYCLOAK_HTTP_PORT
      value: "80"
    - name: KEYCLOAK_HTTPS_PORT
      value: "443"
    - name: KEYCLOAK_HOSTNAME
      value: example.com
...

所有这些都是必需的,之后,重定向将正常工作。

于 2021 年 9 月添加:

问题weird behavior with redirect to port 8443 进行某些操作(例如通过管理控制台右上角的链接转到帐户管理)。

实际上我们不需要设置任何KEYCLOAK_HTTP_PORT KEYCLOAK_HTTPS_PORT

代理端需要进行一些更改。在代理上,我们需要为此路由设置x-forwarded-port443

在我的例子中,我们使用 Kong:

在暴露Keycloak的路线上,我们需要添加(这个对我有用):

serverless > post function 内容如下:

ngx.var.upstream_x_forwarded_port=443 

More info on KONG and x_forwarded_*

【讨论】:

应该有“hello.local”而不是“example.com”;我说的对吗? 是的,但是取决于您要访问 keycloak 的域 我正在考虑向 keycloak helm 提交关于添加这些的 PR,即使它们已被注释掉,今天花了太长时间试图弄清楚这一点 :) 谢谢!

以上是关于Kong背后的Keycloak和奇怪的重定向的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 奇怪的重定向

grails spring security ui登录有时会出现奇怪的重定向

Spring 4 Security + CORS + AngularJS - 奇怪的重定向

IE6 上的重定向循环

Kong作为重定向服务

LTE中的重定向