无法通过高级网络在AKS中获得真正的远程IP

问题描述 投票:1回答:1

我们有两个适用于不同环境的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 networking kubernetes azure-aks
1个回答
0
投票

微软应该现在已经解决了这个问题。然而,显然这个修复程序并没有涵盖我们的情况,其中Nginx作为具有高级网络的服务背后的pod运行。我们被告知使用denniszielke在https://github.com/Azure/AKS/issues/607发布的解决方法,其中所有节点的iptables定期更新。在我看来相当肮脏,但它的确有效。

我们仍然使用“externalTrafficPolicy:Local”定义了上面定义的服务,并且我们已经从链接安装了ConfigMap和DaemonSet。我更改了脚本以减少日志记录并将其移动到另一个名称空间。

© www.soinside.com 2019 - 2024. All rights reserved.