送信元アドレスを許可する(ホワイトリスト形式)

  1. 許可するIPアドレスを用意する
    • アドレスが複数ある場合はカンマ区切りにする
  2. ingress に nginx.ingress.kubernetes.io/whitelist-source-range annotation を設定する(参考 external_link)
設定例
$ kubectl edit growi-app-2 apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: ... nginx.ingress.kubernetes.io/whitelist-source-range: 192.0.2.0/24,198.51.100.1,198.51.100.2,198.51.100.3,... ...

反映後の nginx.conf

$ kubectl -n nginx-ingress exec ds/nginx-ingress-controller -- cat /etc/nginx/nginx.conf | less ... allow 198.51.100.1; allow 198.51.100.10; allow 198.51.100.100; allow 198.51.100.101; allow 198.51.100.102; allow 198.51.100.103; allow 198.51.100.104; allow 198.51.100.105; allow 198.51.100.106; allow 198.51.100.107; allow 198.51.100.108; allow 198.51.100.109; ...
  • 反映した Ingress の location に対して、allow が反映されていることが確認できた
  • 1024 個程度では問題ないことを確認できた

フィルタ時の挙動

  • 許可されているアドレスからのアクセスは、通常どおり表示される
  • 許可されていないアドレスからのアクセスは、nginx のベーシックな 403 画面が表示される image.png

便利情報

  • アドレス作成方法TIPS
    $ docker run ruby:2.7-alpine ruby -e "require 'ipaddr'; ip = IPAddr.new('192.0.2.0/24').to_i; puts 1024.times.map { |i| IPAddr.new(ip + i, Socket::AF_INET).to_s }.join(',')"
    • 1024 のところを任意の数字に変えることで、アドレス生成数を調整可能