Discourse が Prometheus サーバーの IP を認識させる方法

ありがとうございます!

cloudflare.template.yml を有効にしました。 :slight_smile: しかし、私の理解が正しければ、これは Cloudflare の IP アドレスからのトラフィックに対するレート制限を無効にするためだけのものでした。

現時点での私の Prometheus 設定は以下の通りです。

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

さて、私が直面している問題は、Discourse がリクエストの実際の IP アドレスを認識できないことです。そのため、許可リスト方式を機能させるために、以下の試みを行いました。

  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 を指定することで修正できます。