Проблема перенаправления 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 перенаправления.