为什么我在使用Keycloak管理控制台时看到了一个空白页面?

7

我正在使用Dockerfile创建 Keycloak 自定义镜像,具体如下:

FROM quay.io/keycloak/keycloak:18.0.2 as builder

ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true
ENV KC_DB=postgres
# Install custom providers
RUN curl -sL https://github.com/aerogear/keycloak-metrics-spi/releases/download/2.5.3/keycloak-metrics-spi-2.5.3.jar -o /opt/keycloak/providers/keycloak-metrics-spi-2.5.3.jar
RUN /opt/keycloak/bin/kc.sh build

FROM quay.io/keycloak/keycloak:18.0.2
COPY --from=builder /opt/keycloak/ /opt/keycloak/
WORKDIR /opt/keycloak
ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start"]

通过这个docker-compose文件,我可以运行Keycloak:

version: "3.9"
services:

  keycloak_db:
    image: postgres
    environment:
      - POSTGRES_USER=$DB_USER
      - POSTGRES_PASSWORD=$DB_PASS
      - POSTGRES_DB=$DB_NAME
      - IGNORE_INIT_HOOK_LOCKFILE=true
    volumes:
      - ./db/:/docker-entrypoint-initdb.d/
    ports:
      - ${DB_EXTERNAL_PORT:-15432}:5432

  keycloak:
    container_name: keycloak
    # image: quay.io/keycloak/keycloak:18.0.1
    image: keycloak
    ports:
      - "${KEYCLOAK_EXTERNAL_PORT:-18180}:8080"
    environment:
      - KEYCLOAK_ADMIN=${KEYCLOAK_USER}
      - KEYCLOAK_ADMIN_PASSWORD=${KEYCLOAK_PASSWORD}
      - KC_DB=postgres
      - KC_DB_URL_HOST=$DB_HOST
      - KC_DB_URL_PORT=5432
      - KC_DB_URL_DATABASE=$DB_NAME
      - KC_DB_SCHEMA=$KEYCLOAK_SCHEMA
      - KC_DB_USERNAME=$DB_USER
      - KC_DB_PASSWORD=$DB_PASS
      - KC_HTTP_ENABLED=true
      - KC_HOSTNAME=localhost
      - KC_HOSTNAME_ADMIN=localhost
      - KC_HOSTNAME_PORT=80
      - KC_HOSTNAME_STRICT_BACKCHANNEL=true
      - KC_HOSTNAME_STRICT_HTTPS=false
      - KC_PROXY=edge
      - KC_PROXY_ADDRESS_FORWARDING=true
      - KC_KEYCLOAK_FRONTEND_URL=http://localhost:18180/
      - KC_KEYCLOAK_URL=http://localhost:18180/
      # - KC_LOG_LEVEL=debug
    depends_on:
      - keycloak_db

我可以看到Keycloak的主页: enter image description here 但是当我试图进入管理控制台时,我只看到一个空白页面: enter image description here
出了什么问题? 编辑: 我将Keycloak版本升级到18.0.2。
如果我使用KC_FEATURES = admin2作为进一步的环境变量,我可以看到一些东西,但仍然无法看到管理控制台: enter image description here 编辑2: 如果我在构建器的Dockerfile中添加ENV KC_FEATURES=token-exchange,我可以看到登录页面: enter image description here 但是登录后...仍然是一个空白页面: enter image description here

1
遇到了相同的问题。当我检查页面并查看网络时,我发现它尝试进行http调用而不是我们正在使用的https。希望有人知道这里出了什么问题。 - Lucas Scheepers
1
我曾经遇到过与Keycloak管理界面类似的问题,感谢这个解决方案,我能够确定原因。 - Laurenzo
3个回答

3

你的 KC_HOSTNAME_PORT 可能不正确。如果 KEYCLOAK_EXTERNAL_PORT 被设置为 18180 并且你不在反向代理后面,应该将 KC_HOSTNAME_PORT 设置为 18180。

这个配置是有效的:

 keycloak:
    container_name: keycloak
    # image: quay.io/keycloak/keycloak:18.0.1
    image: keycloak
    ports:
      - "${KEYCLOAK_EXTERNAL_PORT:-18180}:8080"
    environment:
      - KEYCLOAK_ADMIN=${KEYCLOAK_USER}
      - KEYCLOAK_ADMIN_PASSWORD=${KEYCLOAK_PASSWORD}
      - KC_DB=postgres
      - KC_DB_URL_HOST=$DB_HOST
      - KC_DB_URL_PORT=5432
      - KC_DB_URL_DATABASE=$DB_NAME
      - KC_DB_SCHEMA=$KEYCLOAK_SCHEMA
      - KC_DB_USERNAME=$DB_USER
      - KC_DB_PASSWORD=$DB_PASS
      - KC_HTTP_ENABLED=true
      - KC_HOSTNAME=localhost
      - KC_HOSTNAME_ADMIN=localhost
      - KC_HOSTNAME_PORT=18080
      - KC_HOSTNAME_STRICT_BACKCHANNEL=true
      - KC_HOSTNAME_STRICT_HTTPS=false
      - KC_PROXY=edge
      - KC_PROXY_ADDRESS_FORWARDING=true
      - KC_KEYCLOAK_FRONTEND_URL=http://localhost:18180/
      - KC_KEYCLOAK_URL=http://localhost:18180/
      # - KC_LOG_LEVEL=debug
    depends_on:
      - keycloak_db

确认是一个错误的配置。谢谢。 - Kambei
以上环境变量的不同变化并没有解决问题,仍然面临空白的情况。 - Rpj

0
所以我们发现是 nginx ingress 控制器引起了很多问题。移动到 haproxy 解决了这个问题。同时,请确保您通过 https 与 ingress 控制器交互,否则可能会导致 keycloak 出现问题。
  annotations:
        kubernetes.io/ingress.class: haproxy
  ...

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接