Keycloak管理控制台无限加载中。

10
我有一个在EKS集群中运行的Keycloak服务器,我正在尝试将其配置为生产模式而不是开发模式。
我已经成功地使用反向代理使SSL工作,但当我访问管理员控制台的登录页面时,它只是无限期地加载。

enter image description here

这是我的配置: Dockerfile
FROM --platform=linux/arm64 quay.io/keycloak/keycloak:19.0.1 as builder

ENV KC_DB=postgres
ENV KC_PROXY=edge
ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true
ENV KC_FEATURES=token-exchange
ENV KC_HTTP_RELATIVE_PATH=/auth
RUN /opt/keycloak/bin/kc.sh build

FROM --platform=linux/arm64 quay.io/keycloak/keycloak:19.0.1
COPY --from=builder /opt/keycloak/ /opt/keycloak/

## Install custom providers
COPY auth-identione-extension/target/auth-identione-extension-1.0.0-SNAPSHOT.jar /opt/keycloak/providers

ENV KC_HOSTNAME_STRICT=false
ENV KC_KEYCLOAK_USER={user}
ENV KC_KEYCLOAK_PASSWORD={password}
ENV KC_DB_URL={dburl}
ENV KC_DB_USERNAME={dbusername}
ENV KC_DB_PASSWORD={dbpassword}
ENV KC_HTTP_ENABLED=true
ENV KC_HOSTNAME=auth.identione.com
ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start", "--optimized"]

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: default
  name: keycloak-deployment
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: keycloak-app
  replicas: 1
  template:
    metadata:
      labels:
        app.kubernetes.io/name: keycloak-app
    spec:
      containers:
        - image: {keycloak-img-url}
          name: keycloak-app
          resources:
            requests:
              memory: "512Mi"
              cpu: "500m"
            limits:
              memory: "1024Mi"
              cpu: "1000m"
          imagePullPolicy: Always
          ports:
            - name: http
              containerPort: 8080

service.yaml

apiVersion: v1
kind: Service
metadata:
  namespace: default
  name: keycloak-service
spec:
  ports:
    - port: 8180
      targetPort: 8080
      protocol: TCP
  type: NodePort
  selector:
    app.kubernetes.io/name: keycloak-app

ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: default
  name: keycloak-service-ingress
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/certificate-arn: {certificate-arn}
    alb.ingress.kubernetes.io/ssl-redirect: 'https'
spec:
  rules:
    - host: auth.identione.com
      http:
        paths:
          - path: /*
            backend:
              serviceName: keycloak-service
              servicePort: 8180
7个回答

7

发现了问题。

在运行构建脚本后,我必须将ENV KC_PROXY=edge变量移动到Dockerfile中。


6
你能详细说明一下吗?我也遇到了同样的问题,并且将KC_PROXY=edge设置为环境变量。 - dingo

1

没有使用Docker并且在旧版本升级后,我的解决方案是使用私密浏览器模式。

加载后显示错误的重定向URI,但有可能是另一个问题!


1

使用Helm在Kubernetes上安装Keycloak的解决方案

  • Kubernetes版本:v1.27.2
  • 使用Github » bitnami/keycloak安装的Keycloak版本
    • CHART_VERSION:keycloak-16.1.1
    • APP VERSION:22.0.1

修补configmap以添加ENV KC_PROXY

# Get the configmap deployed for keycloak
$ kubectl get configmap -n <namespace>                        
NAME                DATA   AGE
keycloak-env-vars   15     xx

# Ensure you are doing it in the namespace where keycloak is deployed
kubectl patch configmap keycloak-env-vars -n <namespace> --type merge --patch '{"data":{"KC_PROXY":"edge"}}'

# Get the pod using configmap and restart the same
$ kubectl get pods -n <namespace>
NAME                    READY   STATUS    RESTARTS   AGE
keycloak-0              1/1     Running   0          xx
keycloak-postgresql-0   1/1     Running   0          xx

$ kubectl delete pod keycloak-0 -n <namespace>

等待 pod 重新启动,然后再次尝试访问管理控制台。

1
对我来说也起作用了,尽管我在值文件中设置了 proxy: edge - undefined

1
这真是个噩梦,要按照很多建议来使其运行起来。我尝试简化docker-compose.yml文件,不设置一些环境变量。
使用这个compose文件,我成功运行了22.0.0版本。(顺便说一句:18版本没有这么多麻烦。)
请记住,这仅适用于开发人员。安全性几乎被关闭了。但是对于启动和开发来说,它是有用的。
然后,您可以通过http://localhost:8888在本地访问它。
提示:这无法通过http://127.0.0.1:8888工作。
version: '3'
services:
  mysql:
    image: docker.io/mariadb:11
    environment:
      MARIADB_DATABASE: ${KEYCLOAK_DB_NAME}
      MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
      MARIADB_PASSWORD: ${KEYCLOAK_DB_PASSWORD}
      MARIADB_USER: ${KEYCLOAK_DB_USER}
    volumes:
      - mariadb-data:/var/lib/mysql

  keycloak:
    image: quay.io/keycloak/keycloak:22.0.0
    environment:
      keycloak.url: http://keycloak:8888
      KC_HOSTNAME: localhost
      KC_HOSTNAME_PORT: 8888
      KC_HOSTNAME_STRICT_BACKCHANNEL: "true"
      KC_DB: mariadb
      KC_DB_URL: jdbc:mariadb://mysql:3306/${KEYCLOAK_DB_NAME}?characterEncoding=UTF-8
      KC_DB_USERNAME: ${KEYCLOAK_DB_USER}
      KC_DB_PASSWORD: ${KEYCLOAK_DB_PASSWORD}
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_PASSWORD}
      KC_HEALTH_ENABLED: true
      KC_LOG_LEVEL: info
      KC_HOSTNAME_STRICT_HTTPS: false
      HOSTNAME_STRICT: false
      KC_HOSTNAME_STRICT: false
      KC_HTTP_ENABLED: true
      KC_LOG: console
      KC_PROXY: none
    depends_on:
    - mysql
    command:
    - "start-dev"
    - "--http-port=8888"
    ports:
    - "8888:8888"


      
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:8888/health/ready" ]
      interval: 15s
      timeout: 2s
      retries: 15
    
    
      
volumes:
  mariadb-data:

我的.env文件:
KEYCLOAK_DB_NAME=kc
MARIADB_ROOT_PASSWORD=secret
KEYCLOAK_DB_PASSWORD=secret
KEYCLOAK_DB_USER=sa
KEYCLOAK_PASSWORD=admin

0

这对我无效,在浏览器中出现以下错误: 拒绝框架'http://auth.identione.com/',因为它违反了以下内容安全策略指令:“frame-src'self'”。 - user3677636
这与https://github.com/keycloak/keycloak/issues/12612或https://github.com/keycloak/keycloak/issues/10340有关吗? - Sirish

0

我正在使用独立版本的Keycloak,并通过设置--hostname-strict=false来解决此问题。

例如:awanish@192 bin % ./kc.sh start --db postgres --db-url-host localhost --db-username postgres --db-password change_me --hostname-strict=false --https-key-store-password=secret


0

在他们的GitHub上有一个相关问题的文档,其中包含有关如何调试此问题的具体说明:

  1. 使用--hostname-debug=true选项启动Keycloak。
    (环境变量:KC_HOSTNAME_DEBUG文档链接
  2. 浏览到此URL:KEYCLOAK_BASE_URL/realms/master/hostname-debug

您将看到一个HTML表格,其中包含一组与前端、后端和管理员相关的[OK][Not OK]

以下是一些建议,可帮助您调试此问题:

  • 所有的URL必须是HTTPS URL。如果使用HTTP(而不是HTTPS),所有的URL必须是HTTP。
  • 尝试设置正确的代理值。如果TLS终止在反向代理上,请使用edge。您可以在这里阅读更多关于其他代理选项的信息。
  • 如果您使用HTTPS,--hostname-strict-https=false不能设置,特别是如果您的代理设置为edge。将其设置为false将导致keycloak生成HTTP URL而不是HTTPS。

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