Keycloak Gatekeeper(转发代理)什么都不做

Keycloak Gatekeeper (forwarding proxy) does nothing

我有一个 docker-compose 设置,服务 1 (grafana) 向服务 2 (prometheus) 发送请求。 我在服务 2 前面放了一个 Keycloak Gatekeeper,要求进行身份验证。 效果很好。

现在我的想法是在服务 1 前面放置第二个 Keycloak Gatekeeper,注入所述身份验证。

不幸的是,这不起作用。 通过wireshark观察我的流量,似乎我的第二个Keycloak Gatekeeper甚至没有参与任何通信。

我的 docker 服务 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. forwarding-domains 标志描述请求去往的域, 不是来自。因此,如果 grafana 与普罗米修斯对话,普罗米修斯 需要在此处输入域名。
  2. Keycloak Gatekeeper 不会自动拦截通信。所以grafana 需要明确将其用作代理。

所以固定的 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