【问题标题】:Why I see a blank page for the Keycloak's administration console?为什么我看到 Keycloak 管理控制台的空白页?
【发布时间】:2022-08-05 04:54:52
【问题描述】:

我正在使用 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 主页:

但是当我尝试进入管理控制台时,我看到一个空白页:


出了什么问题?




编辑:我将 Keycloak 版本升级到 18.0.2。

如果我使用 KC_FEATURES=admin2 作为进一步的环境变量,我可以看到一些东西,但仍然看不到管理控制台:


编辑2:如果我在 Dockerfile 中为构建器添加ENV KC_FEATURES=token-exchange,我可以看到登录页面:

但是登录后...总是一个空白页:

  • 遇到同样的问题..当我检查页面并查看网络时,我看到它尝试进行 http 调用而不是我们正在使用的 https ..希望有人知道这里出了什么问题

标签: docker docker-compose keycloak quarkus


【解决方案1】:

您的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

【讨论】:

  • 确认是错误配置。谢谢
【解决方案2】:

所以我们发现是nginx 入口控制器导致了很多问题。移至haproxy 解决了这个问题。同样,请确保您通过 https 与入口控制器进行交互,否则可能会导致 keycloak 出现问题。

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

【讨论】: