Проблема перенаправления Keycloak за прокси (Kong)

Я пытаюсь настроить экземпляр Keycloak для обработки пользователей моего веб-приложения. Этот экземпляр, как и все другие микросервисы, будет скрыт за обратным прокси-сервером (Kong, это прокси-сервер на основе nginx).

В моей локальной настройке Kong прослушивает https://localhost, а keycloak прослушиваетhttp://localhost:8082/auth. Для этого я использовал несколько переменных среды в своем контейнере Keycloak:

      ENV KC_HOSTNAME=localhost
ENV KC_HOSTNAME_PORT=8082
ENV KC_HOSTNAME_STRICT_HTTPS=false
ENV KC_PROXY=edge
ENV PROXY_ADDRESS_FORWARDING=true
ENV KC_HTTP_ENABLED=true
ENV KC_HTTP_PORT=8082
KC_HTTP_RELATIVE_PATH=/auth

Настройка конфигурации Kong выглядит нормально, и конечные точки keycloak, которые мне нужны, правильно отображаются через Kong (/realms,/js,/resources,/robots.txt, как сказал док). Kong обрабатывает соединение TLS, а затем обращается ко всем микросервисам сHTTPтолько, таким образомKC_PROXY=edge./adminне выставлен, хотя я мог получить к нему доступ локально, используя нужную машину.

Если я пойду вhttps://localhost/auth/realms/master/.well-known/openid-configuration, я получаю конфигурацию. Однако Keycloak не знает, что находится за Kong, поэтому все конечные точки содержатlocalhost:8082. Это кажется нормальным, так как я изначально так настроил.

Я попытался добавить новыйrealmс другимFrontend URL, называя этоhttps://myapp.comТеперь моя конфигурация openid содержитhttps://myapp.com:8082/...повсюду. Все рабочие процессы получают неправильные URL-адреса. Что я пропустил ? Я не могу удалить этот порт, который я поставил на первое место, иначе я не смогу получить доступ к консоли администратора. Я думал, что могу что-то сделать сKC_HOSTNAME_ADMIN, но к сожалению нетKC_HOSTNAME_ADMIN_PORT..или есть?

Спасибо за чтение :)

1 ответ

В случае, если это кого-то заинтересует, решение было довольно простым. Я не должен был устанавливатьHOSTNAMEиHOSTNAME_PORTв первую очередь.ENV KC_HOSTNAME_STRICT_HTTPS=falseявляется обязательным, а также мне нужно было добавить плагин в Kong для настройки заголовков:

      plugins
- name: post-function
  service: keycloak
  config:
    functions:
      - return function()
          if ngx.var.upstream_x_forwarded_port == "8000" then
            ngx.var.upstream_x_forwarded_port = 80
          elseif ngx.var.upstream_x_forwarded_port == "8443" then
            ngx.var.upstream_x_forwarded_port = 443
          end
        end

В противном случае keycloak в некоторых случаях будет иметь неправильный URI перенаправления.

Другие вопросы по тегам