Kubernetes pod上没有出站网络



我正在虚拟机中运行一个单节点Kubernetes集群,用于开发和测试目的。我使用Rancher Kubernetes Engine(RKE,Kubernetes1.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坏网关错误。

一些调查显示,吊舱的出站流量似乎存在问题。当我通过SSH进入节点时,我可以通过服务或pod IP访问所有pod。从节点到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

指南中的一切都很好,只是吊舱似乎没有任何网络连接。

我的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链上的所有流量。。。删除该规则解决了问题。

我只是觉得解除这个角色有点不安,但我必须承认,我并不完全理解这对安全的影响。这可能需要进一步的研究,但这是另一个话题。由于我目前不打算在生产中运行这个集群,而是使用托管集群,所以这无论如何都不是一个真正的问题。

相关内容

  • 没有找到相关文章

最新更新