首页 > 解决方案 > 如何使用 Kubernetes DNS 查找 NGINX set_real_ip_from

问题描述

我在我的 K8 集群中编写了 NGINX 白名单服务。因为进入集群的所有内容都经过负载均衡器,所以我不得不将转发的 IP 地址而不是直接将源 IP 列入白名单。

在测试中,我在 NGINX 配置中这样硬编码它:

set_real_ip_from x.x.x.x;
real_ip_header X-Forwarded-For;

x.x.x.x负载均衡器的 IP 在哪里。

这行得通。

我无法在实际部署中对 IP 进行硬编码,所以我希望使用该kube-dns服务,就像我用于proxy_pass

resolver kube-dns.kube-system.svc.cluster.local;
proxy_pass http://{service}.{namespace}.svc.cluster.local:$server_port;

这也有效。

但是,此 DNS 查找似乎不适用于set_real_ip_from

resolver kube-dns.kube-system.svc.cluster.local;
set_real_ip_from {load balancer service}.kube-system.svc.cluster.local;
real_ip_header X-Forwarded-For;

当我运行它时,我只是得到access forbidden by rule, client: x.x.x.x(它不在白名单中),x.x.x.x负载均衡器的 IP 在哪里。这有点道理,因为set_real_ip_from可能不知道查找 IP。

是否可以让 NGINX 为转发器地址进行 DNS 查找?

如果没有,也许有人有更好的方法来做到这一点。

谢谢!

标签: nginxkubernetesdnskubernetes-ingress

解决方案


我想我只需要睡在这上面。比我做的简单多了。

我知道负载均衡器应该落入的范围,所以我可以为set_real_ip_from.

例如:

set_real_ip_from 10.60.0.0/16;
real_ip_header X-Forwarded-For;

并且不需要 DNS 查找。


推荐阅读