【发布时间】: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