1

我在 VM 中运行一个单节点 Kubernetes 集群,用于开发和测试目的。我使用 Rancher Kubernetes Engine(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 错误。

一些探测表明,来自 pod 的出站流量似乎存在问题。当我通过 SSH 连接到节点时,我可以通过它们的服务或 pod IP 访问所有 pod。从节点到 pod 的 DNS 也可以正常工作。但是,如果我启动一个交互式busybox pod,我将无法从那里访问任何其他pod 或主机。当我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 静态加密。

有任何想法吗?

4

2 回答 2

1

也许只是仔细检查您的节点的 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
于 2020-09-15T09:06:35.363 回答
0

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

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

于 2020-09-15T19:43:29.480 回答