【问题标题】:What iptables knows about pods?iptables 对 Pod 了解多少?
【发布时间】:2020-02-17 09:36:54
【问题描述】:

假设我们在一个集群中有 2 个节点。

Node A 有 1 个 pod 副本,Node B 有 2 个副本。根据来自 Google Cloud 工程师的this talk (YouTube video with a time tag) 的说法,路由到Node A 的请求可能会被iptables 重新路由到Node Biptables 位于Node A 内。关于这种行为,我有几个问题:

  • Node A 中的 iptables 有哪些信息知道它之外的 pod 的副本?它如何知道将流量发送到哪里?

  • 会不会是Node B 中的iptables 将此请求重新路由到Node C?如果是这样,那么出口流量会回到Node B -> Node A -> 客户端吗?

【问题讨论】:

    标签: networking kubernetes iptables


    【解决方案1】:

    我认为您可能混淆了两个子系统,即服务代理和 CNI。首先是 CNI,它是一个基于插件的系统,可以在所有节点上设置路由规则,使网络看起来是平坦的。 Pod IP 将在任何节点上正常工作。具体如何发生因插件而异,Calico 在节点之间使用 BGP。然后是服务代理,通常使用 iptables 实现,但也有些可插拔。这些定义了服务 IP -> 端点 IP(阅读:pod IP)负载平衡。但是实际的路由是由你的 CNI 插件设置的。有很多特殊的模式和案例,但这是基本概述。

    【讨论】:

    • 感谢您的回答。我仍然不明白谷歌工程师解释的情况。我知道这种行为可能因云提供商而异。
    【解决方案2】:

    数据包可以在到达最终目的地之前在节点、服务和 Pod 之间移动。

    所有集群内路由(node-to-node、pod-to-pod、service-to-service、pod-to-service、service-to-pod、pod-to-node、node-to- kubernetes 中的 pod 等)由以下人员完成:

    • CNI
    • 负载均衡算法
    • kube 代理
    • iptables.

    k8s 中的数据包路由还取决于许多因素,例如集群中的负载、每个节点的负载、亲和/反亲和规则、节点选择器、污点/容忍度、自动缩放、pod 副本数量等。

    集群内路由对路由器是透明的,理想情况下用户不需要知道它,除非有网络问题需要调试。

    在任何 k8s 节点上执行sudo iptables -L -n -v 会显示用于数据包转发的低级 iptables 规则和链。

    【讨论】:

    • 我知道这取决于网络实现。我正在尝试了解视频中的具体案例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2020-06-06
    • 2012-05-13
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多