Keycloak Gatekeeper (переадресация прокси) ничего не делает

У меня есть настройка docker-compose с сервисом 1 (графана), отправляющим запросы на сервис 2 (прометей). Я поставил Keycloak Gatekeeper перед сервисом 2, запрашивая аутентификацию. Это прекрасно работает.

Теперь моя идея заключалась в том, чтобы также поместить второй Keycloak Gatekeeper перед службой 1, внедряя указанную аутентификацию.

К сожалению, это не работает. Наблюдая за моим трафиком через Wireshark, кажется, что мой второй Keycloak Gatekeeper даже не вовлечен ни в какое общение.

Мой файл создания докера для службы 1 и прокси-сервер пересылки выглядит примерно так:

keycloak-forwarder:
    image: quay.io/keycloak/keycloak-gatekeeper
    command:
      - --enable-forwarding=true
      - --forwarding-username=<my_username>
      - --forwarding-password=<my_password>
      - --forwarding-domains=${BASE_DOMAIN}/grafana
      - --listen=:3001
      - --client-id=<my_keycloak_client_id>
      - --client-secret=<my_keycloak_client_secret>
      - --discovery-url=${DOMAIN_PROTOCOL}://${KEYCLOAK_DOMAIN}/auth/realms/<my_keycloak_realm>
    networks:
      - webgateway

grafana:
    image: grafana/grafana
    networks:
      - webgateway
    labels:
      traefik.enable: true
      traefik.backend: grafana
      traefik.frontend.rule: Host:${BASE_DOMAIN};PathPrefix:/grafana;PathPrefixStrip:/grafana
      traefik.port: 3000
      traefik.docker.network: webgateway

1 ответ

Решение

Хорошо, я нашел решение. Есть несколько вещей, которые я сделал не так.

  1. Флаг переадресации доменов описывает домены, к которым обращается запрос, а не приходит. Поэтому, если графана разговаривает с прометеем, здесь необходимо ввести домен прометея.
  2. Keycloak Gatekeeper не перехватывает связь автоматически. Таким образом, графана должна использовать это явно как прокси.

Итак, фиксированная docker-compose выглядит следующим образом:

keycloak-forwarder:
    image: quay.io/keycloak/keycloak-gatekeeper
    command:
      - --enable-forwarding=true
      - --forwarding-username=<my_username>
      - --forwarding-password=<my_password>
      - --forwarding-domains=${BASE_DOMAIN}/prometheus
      - --listen=:3001
      - --client-id=<my_keycloak_client_id>
      - --client-secret=<my_keycloak_client_secret>
      - --discovery-url=${DOMAIN_PROTOCOL}://${KEYCLOAK_DOMAIN}/auth/realms/<my_keycloak_realm>
    networks:
      - webgateway

grafana:
    image: grafana/grafana
    networks:
      - webgateway
    environment:
      - HTTP_PROXY=http://keycloak-forwarder:3001
      - HTTPS_PROXY=http://keycloak-forwarder:3001
    labels:
      traefik.enable: true
      traefik.backend: grafana
      traefik.frontend.rule: Host:${BASE_DOMAIN};PathPrefix:/grafana;PathPrefixStrip:/grafana
      traefik.port: 3000
      traefik.docker.network: webgateway
Другие вопросы по тегам