Skip to main content

Kubernetesに配置したNginxでアクセス制御する

TL;DR

コマンドの場合

$ kubectl patch svc nodeport -p '{"spec":{"externalTrafficPolicy":"Local"}}'
service "nodeport" patched

Serviceの設定の場合

service.spec.externalTrafficPolicy = Local

背景

NginxをL7ロードバランサー兼、リバースプロキシとして利用していて、 Nginxでリクエスト元のIPアドレスを制限したい時があります。

たとえば、社内からアクセスはできるが、社外からは不可にするなどです。

検証

Kubernetesを利用していると、ServiceかIngressにExternal IPを割り当て、そこにアクセスしてきます。

ServiceのType=LoadBalancerのみを指定して、その他の設定をデフォルトのまま指定すると、 service.spec.externalTrafficPolicy の値はClusterが指定されます。

これは、エンドポイントに送信される送信元のIPアドレスがCluster IPになっており、アクセスログを見てみると、Cluster IPからアクセスされているのが分かります。