Kubernetes 上没有出站网络 pods
No outbound networking on Kubernetes pods
我是 运行 VM 中的单节点 Kubernetes 集群,用于开发和测试目的。我使用 Rancher Kubernetes Engine(RKE,Kubernetes 版本 1.18)来部署它,并使用 MetalLB 来启用 LoadBalancer 服务类型。 Traefik 是 2.2 版,通过官方 Helm 图表部署 (https://github.com/containous/traefik-helm-chart). I have a few dummy containers deployed to test the setup (https://hub.docker.com/r/errm/cheese)。
我可以通过节点 IP 访问 Traefik 仪表板(-> MetalLB 似乎可以工作)。它为测试容器注册服务和路由。一切看起来都很好,但是当我尝试在浏览器中访问测试容器时,出现 502 Bad Gateway 错误。
一些探测表明 pods 的出站流量似乎存在问题。当我通过 SSH 进入节点时,我可以通过他们的服务或 pod IP 访问所有 pods。从节点到 Pod 的 DNS 也可以正常工作。但是,如果我启动一个交互式 busybox pod,我无法从那里访问任何其他 pod 或主机。当我 wget
到任何其他容器(都在默认命名空间中)时,我只会得到 wget: can't connect to remote host (10.42.0.7): No route to host.
互联网上的服务器也是如此。
我没有安装任何网络策略,我知道默认安装了 none。
我也经历过这个:https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service
指南中的所有内容都运行良好,除了 pods 似乎没有任何网络连接。
我的 RKE 配置是标准的,只是我关闭了标准的 Nginx 入口并启用了 etcd 静态加密。
有什么想法吗?
也许只需仔细检查您的节点的 ip 转发是否已打开:sysctl net.ipv4.ip_forward
如果由于某种原因它没有 return:
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 链上的所有流量...删除该规则解决了问题。
删除该角色让我感到有些不安,但我不得不承认我并不完全理解这样做的安全隐患。这可能需要进一步研究,但这是另一个话题。由于我目前不打算 运行 在生产环境中使用这个集群,而是使用托管集群,所以这并不是真正的问题。
我是 运行 VM 中的单节点 Kubernetes 集群,用于开发和测试目的。我使用 Rancher Kubernetes Engine(RKE,Kubernetes 版本 1.18)来部署它,并使用 MetalLB 来启用 LoadBalancer 服务类型。 Traefik 是 2.2 版,通过官方 Helm 图表部署 (https://github.com/containous/traefik-helm-chart). I have a few dummy containers deployed to test the setup (https://hub.docker.com/r/errm/cheese)。
我可以通过节点 IP 访问 Traefik 仪表板(-> MetalLB 似乎可以工作)。它为测试容器注册服务和路由。一切看起来都很好,但是当我尝试在浏览器中访问测试容器时,出现 502 Bad Gateway 错误。
一些探测表明 pods 的出站流量似乎存在问题。当我通过 SSH 进入节点时,我可以通过他们的服务或 pod IP 访问所有 pods。从节点到 Pod 的 DNS 也可以正常工作。但是,如果我启动一个交互式 busybox pod,我无法从那里访问任何其他 pod 或主机。当我 wget
到任何其他容器(都在默认命名空间中)时,我只会得到 wget: can't connect to remote host (10.42.0.7): No route to host.
互联网上的服务器也是如此。
我没有安装任何网络策略,我知道默认安装了 none。
我也经历过这个:https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service
指南中的所有内容都运行良好,除了 pods 似乎没有任何网络连接。
我的 RKE 配置是标准的,只是我关闭了标准的 Nginx 入口并启用了 etcd 静态加密。
有什么想法吗?
也许只需仔细检查您的节点的 ip 转发是否已打开:sysctl net.ipv4.ip_forward
如果由于某种原因它没有 return:
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 链上的所有流量...删除该规则解决了问题。
删除该角色让我感到有些不安,但我不得不承认我并不完全理解这样做的安全隐患。这可能需要进一步研究,但这是另一个话题。由于我目前不打算 运行 在生产环境中使用这个集群,而是使用托管集群,所以这并不是真正的问题。