【问题标题】:How to use Kubernetes DNS lookup for NGINX set_real_ip_from如何使用 Kubernetes DNS 查找 NGINX set_real_ip_from
【发布时间】:2019-12-17 02:22:21
【问题描述】:

我在我的 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 查找?

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

谢谢!

【问题讨论】:

  • 你能附上你的 yaml 定义文件吗?负载均衡器服务? kube-dns.kube-system.svc.cluster.local 可以从 nginx pod 解析吗?

标签: nginx kubernetes dns kubernetes-ingress


【解决方案1】:

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

我知道负载均衡器应该落入的范围,所以我可以为set_real_ip_from 做一个 CIDR 块。

例如:

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

而且不需要 DNS 查找。

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多