Kubernetesに配置したNginxでアクセス制御する
TL;DR
コマンドの場合
$ kubectl patch svc nodeport -p '{"spec":{"externalTrafficPolicy":"Local"}}'
service "nodeport" patched
Serviceの設定の場合
service.spec.externalTrafficPolicy = Local
- Services | Kuberneteshttps://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer
- Using Source IP | Kuberneteshttps://kubernetes.io/docs/tutorials/services/source-ip/
背景
NginxをL7ロードバランサー兼、リバースプロキシとして利用していて、 Nginxでリクエスト元のIPアドレスを制限したい時があります。
たとえば、社内からアクセスはできるが、社外からは不可にするなどです。
検証
Kubernetesを利用していると、ServiceかIngressにExternal IPを割り当て、そこにアクセスしてきます。
ServiceのType=LoadBalancer
のみを指定して、その他の設定をデフォルトのまま指定すると、
service.spec.externalTrafficPolicy
の値はCluster
が指定されます。
これは、エンドポイントに送信される送信元のIPアドレスがCluster IPになっており、アクセスログを見てみると、Cluster IPからアクセスされているのが分かります。