无法通过高级网络在AKS中获得真正的远程IP
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法通过高级网络在AKS中获得真正的远程IP相关的知识,希望对你有一定的参考价值。
我们有两个适用于不同环境的AKS集群。两者都使用nginx服务器作为自定义入口。我的意思是它就像一个入口,但它只是服务背后的正常Nginx部署。这个设置有几个很好的理由,主要的原因是当我们开始时AKS中不存在入口。
服务定义如下:
apiVersion: v1
kind: Service
metadata:
name: <our name>
namespace: <our namespace>
spec:
ports:
- port: 443
targetPort: 443
selector:
app: <our app>
loadBalancerIP: <our ip>
type: LoadBalancer
externalTrafficPolicy: Local
我们已经使用真正的ip模块配置了Nginx,如下所示:
real_ip_header X-Original-Forwarded-For;
set_real_ip_from 10.0.0.0/8; # or whatever ip is correct
一个环境使用旧的基本网络networkPlugin = kubenet。 Nginx在日志中记录真实的客户端IP地址,并可以将它们用于访问控制。另一个使用高级网络,networkPlugin = azure。有Nginx记录其中一个节点的IP地址,这是没用的。 X-Original-Forwarded-For和标准X-Forwarded-For标头都是空的,当然源IP来自节点,而不是来自客户端。
有没有解决的办法?如果可能的话我们想避免定义一个“真正的”入口,因为我们自己的Nginx服务器包含在这样的设置中很难复制的自定义配置,另外还不清楚标准入口是否有帮助?
微软应该现在已经解决了这个问题。然而,显然这个修复程序并没有涵盖我们的情况,其中Nginx作为具有高级网络的服务背后的pod运行。我们被告知使用denniszielke在https://github.com/Azure/AKS/issues/607发布的解决方法,其中所有节点的iptables定期更新。在我看来相当肮脏,但它的确有效。
我们仍然使用“externalTrafficPolicy:Local”定义了上面定义的服务,并且我们已经从链接安装了ConfigMap和DaemonSet。我更改了脚本以减少日志记录并将其移动到另一个名称空间。
以上是关于无法通过高级网络在AKS中获得真正的远程IP的主要内容,如果未能解决你的问题,请参考以下文章
无法从连接到 Azure *** 的本地计算机(在家庭网络上)访问专用 AKS 群集