无法访问 Kubernetes 中的 Keycloak 帐户控制台(403)

问题描述 投票:0回答:4

当部署在 Kubernetes 中时,我发现 Keycloak 有一个奇怪的行为,让我无法理解。

用例:

  • 以管理员身份登录:admin(默认创建)
  • 点击管理帐户

管理帐户对话框截图

我比较了(相同)镜像 (quay.io/keycloak/keycloak:17.0.0) 在 Docker 或 Kubernetes (K3S) 上运行时的行为。

如果我从 Docker 运行它,则会加载帐户控制台。换句话说,我的请求获得了成功(204

GET /realms/master/protocol/openid-connect/login-status-iframe.html/init?client_id=account-console

从部署在 Kubernetes 中的同一镜像中,相同的请求失败并出现错误 403。但是,在同一个应用程序上,我的请求获得了成功(204

GET /realms/master/protocol/openid-connect/login-status-iframe.html/init?client_id=security-admin-console

由于我可以调用 security-admin-console,因此这看起来不像 Kubernetes Ingress 网关的问题,也不像与路由相关的任何问题。

然后我考虑了 Keycloak 访问控制配置问题,但在这两种情况下我都使用默认图像而不进行任何更改。我反复检查以确保,管理员用户和帐户控制台客户端在 docker 和 k8s 应用程序中的配置方式似乎完全相同。

我不知道可能是什么问题,你有什么建议吗?

docker kubernetes keycloak
4个回答
1
投票

尝试将Keycloak数据库中

realm
表中的ssl_required = NONE设置为您的领域(master)


1
投票

我可以使用以下环境变量解决问题,我的 Keycloak 版本是 23.0.4:

        - name: KC_HOSTNAME
          value: subdomain.domain.com
        - name: KC_HOSTNAME_ADMIN_URL
          value: https://subdomain.domain-name.com/
        - name: KC_HTTP_ENABLED
          value: 'false'
        - name: KC_HOSTNAME_STRICT
          value: 'true'
        - name: KC_HOSTNAME_STRICT_HTTPS
          value: 'true'
        - name: KC_PROXY
          value: edge

0
投票

所以我们发现是

nginx
入口控制器导致了很多问题。 虽然我们能够通过
nginx
等方式使其与
X-Forwarded-Proto
一起工作,但它有点复杂和令人费解。改为
haproxy
反而解决了这个问题。另外,请确保您通过
https
与入口控制器连接,否则可能会导致 keycloak 出现问题。

  annotations:
        kubernetes.io/ingress.class: haproxy
  ...

0
投票

我遇到了类似的问题,并使用 Nginx 作为 HTTPS 的代理。 管理 Web 控制台因 403 加载而卡住:

/realms/master/protocol/openid-connect/login-status-iframe.html/init

我通过添加这些用于 KeyCloak 位置配置的 Nginx 行来修复它。

    proxy_set_header X-Forwarded-Host   $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-Port   $server_port;
    proxy_set_header X-Forwarded-Proto  $scheme;
© www.soinside.com 2019 - 2024. All rights reserved.