【问题标题】:No outbound networking on Kubernetes podsKubernetes pod 上没有出站网络
【发布时间】:2021-01-01 14:36:32
【问题描述】:

出于开发和测试目的,我在 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 静态加密。

有什么想法吗?

【问题讨论】:

    标签: docker networking kubernetes rke


    【解决方案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重新加载

    【讨论】:

    • 欢迎您,@sfb103,感谢您抽出宝贵时间回答。不幸的是,我没有运气,这不是解决方案端口转发已经处于活动状态。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-18
      • 1970-01-01
      • 2023-03-30
      • 2019-04-06
      • 2020-06-16
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 2019-05-27
      相关资源
      最近更新 更多