Kubernetes Pod上没有出站网络

问题描述

我正在VM中运行一个单节点Kubernetes集群,以进行开发和测试。我使用Rancher Kubernetes引擎(RKE,Kubernetes版本1.18)进行了部署,并使用了MetalLB来启用LoadBalancer服务类型。 Traefik是2.2版,通过官方Helm图表(https://github.com/containous/traefik-helm-chart)进行了部署。我已经部署了一些虚拟容器来测试设置(https://hub.docker.com/r/errm/cheese)。

我可以通过节点IP正常访问Traefik仪表板(-> MetalLB似乎有效)。它为测试容器注册服务和路由。一切都很好,但是当我尝试在浏览器中访问测试容器时,出现502 Bad Gateway错误

一些调查显示,来自吊舱的出站流量似乎存在问题。当我通过SSH进入节点时,我可以通过其服务或容器IP访问所有容器。从节点到Pod的DNS也可以正常工作。但是,如果我启动一个交互式busyBox窗格,则无法从那里到达任何其他窗格或主机。当我wget到任何其他容器(全部在名称空间中)时,我只会得到wget: can't connect to remote host (10.42.0.7): No route to host.对于互联网上的服务器也是如此。

我还没有安装任何网络策略,并且认情况下我还没有安装任何网络策略。

我也经历过:https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service

该指南中的所有内容都可以正常运行,只是pod似乎没有任何网络连接。

我的RKE配置是标准配置,除了我关闭了标准的Nginx入口并启用了etcd静态加密。

有什么想法吗?

解决方法

也许只是仔细检查一下您节点的ip转发是否已打开:sysctl net.ipv4.ip_forward

如果由于某种原因它不返回: net.ipv4.ip_forward = 1

然后您可以使用以下命令进行设置: sudo sysctl -w net.ipv4.ip_forward=1

并使其永久化:

  • 编辑/etc/sysctl.conf
  • 添加或取消注释net.ipv4.ip_forward = 1
  • 并通过sysctl -p /etc/sysctl.conf
  • 重新加载
,

好,所以我很愚蠢(或者说是菜鸟)。我在主机上放了一条旧的iptables规则,丢弃了FORWARD链上的所有流量...删除该规则可以解决问题。

仅删除该角色会让我有些不安,但我不得不承认我不完全了解此安全性含义。这可能需要进一步研究,但这是另一个主题。而且,由于我目前不打算在生产环境中运行此群集,而是使用托管群集,因此无论如何这并不是真正的问题。