问题描述
我正在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链上的所有流量...删除该规则可以解决问题。
仅删除该角色会让我有些不安,但我不得不承认我不完全了解此安全性含义。这可能需要进一步研究,但这是另一个主题。而且,由于我目前不打算在生产环境中运行此群集,而是使用托管群集,因此无论如何这并不是真正的问题。