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
好的,我找到了解决方案。
有几件事,我做错了。
- forwarding-domains 标志描述请求去往的域,
不是来自。因此,如果 grafana 与普罗米修斯对话,普罗米修斯
需要在此处输入域名。
- 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
我有一个 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
好的,我找到了解决方案。 有几件事,我做错了。
- forwarding-domains 标志描述请求去往的域, 不是来自。因此,如果 grafana 与普罗米修斯对话,普罗米修斯 需要在此处输入域名。
- 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