无法通过高级网络在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的主要内容,如果未能解决你的问题,请参考以下文章

如何查询操作远程服务器的真正IP?

无法从连接到 Azure *** 的本地计算机(在家庭网络上)访问专用 AKS 群集

将 azurerm_application_gateway 与 AKS 与 terraform 集成

linux高级骚操作

*** 连接到该 *** 的远程机器的 IP

第82题JAVA高级技术-网络编程1(获得内网的所有IP地址)