Prometheus 서버 IP를 Discourse에서 인식하도록 하는 방법

감사합니다!

cloudflare.template.yml를 활성화했습니다. :slight_smile: 하지만 제 이해가 맞다면, 그것은 Cloudflare의 IP 주소에서 오는 트래픽에 대한 속도 제한(rate limiting)을 비활성화하기 위한 것이었습니다.

현재 제 Prometheus 설정은 다음과 같습니다.

scrape_configs:
        - job_name: forum
          scrape_interval: 5s
          scheme: https
          static_configs:
                  - targets:
                          - forum-behind-cloudflare-dns-proxy.com

현재 제가 겪고 있는 문제는, Discourse가 요청의 실제 IP 주소를 확인할 수 없다는 것입니다. 따라서 허용 목록(allow list) 방식이 작동하도록 하기 위해 다음을 시도했습니다.

  1. app.yml의 DISCOURSE_PROMETHEUS_TRUSTED_IP_WHITELIST_REGEX 환경 변수에 제 Prometheus 서버의 IPv6 주소를 추가했습니다.

  2. Prometheus 서버의 /etc/hosts에 포럼의 실제 IPv6 주소를 하드코딩했습니다. 이제 포럼은 제 Prometheus 서버의 IP 주소를 보고 액세스를 허용합니다. :slight_smile:

아직 다른 문제들도 있습니다. 예를 들어, 저는 컨테이너에서 Prometheus를 실행하고 있습니다. 호스트의 /etc/hosts가 컨테이너 내부와 공유되지 않습니다. 그래서 포럼 주소를 Cloudflare IP로 계속 해석하고 인증 중에 실패합니다.

Prometheus를 시작할 때 -v /etc/hosts:/etc/hosts와 같이 호스트의 /etc/hosts를 Docker 컨테이너에 공유할 수 있지만, 그러면 다음과 같은 오류가 발생합니다.

Get "https://forum-behind-cloudflare-dns-proxy.com:443/metrics": dial tcp [<ipv6-address>]:443: connect: cannot assign requested address

이제 이 문제를 해결해야 합니다.

수정 #1: 이 부분도 해결했습니다. Docker 컨테이너 내부에서 IPv6가 비활성화되어 있었습니다. Docker 컨테이너에서 IPv6를 활성화하거나 단순히 --net=host를 사용하면 해결할 수 있습니다.