[英]Alternative solution for host port networking that allows running multiple pods in Kubernetes
[英]No outbound networking on Kubernetes pods
我正在 VM 中运行单节点 Kubernetes 集群以进行开发和测试。 我使用 Rancher Kubernetes Engine(RKE,Kubernetes 版本 1.18)来部署它,并使用 MetalLB 来启用 LoadBalancer 服务类型。 Traefik 是 2.2 版本,通过官方 Helm chart ( 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 静态加密。
有任何想法吗?
也许只需仔细检查您节点的 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 链上的所有流量……删除该规则可以解决问题。
只是移除这个角色我感到有点不安,但我必须承认我并不完全理解这对安全的影响。 这可能需要一些进一步的研究,但这是另一个话题。 而且由于我目前不打算在生产中运行此集群,而是使用托管集群,因此无论如何这都不是问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.