1

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

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

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

我的服务 1 和转发代理的 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}/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
4

1 回答 1

1

好的,我找到了解决方案。有几件事,我做错了。

  1. forwarding-domains 标志描述了请求去往的域,而不是来自的域。所以如果grafana与prometheus对话,这里需要输入prometheus域。
  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
于 2019-07-17T10:31:47.860 回答