Ingress网络是一组规则,充当Kubernetes集群的入口点。这允许入站连接,可以将其配置为 通过可访问的URL,负载平衡流量或通过提供基于名称的虚拟主机从外部提供服务。因此, Ingress是一个API对象,通常通过HTTP管理集群中服务的外部访问,是暴露服务的最有效方 式。
现在,让我以一个例子向您解释Ingress网络的工作。
有2个节点具有带有Linux桥接器的pod和根网络命名空间。除此之外,还有一个名为 flannel0(网络插件)的新虚拟以太网设备被添加到根网络中。
现在,假设我们希望数据包从pod1流向pod 4。
因此,数据包将pod1的网络保留在eth0,并进入veth0的根网络。 然后它被传递给cbr0,这使得ARP请求找到目的地,并且发现该节点上没有人具有目的地IP地址。
因此,桥接器将数据包发送到flannel0,因为节点的路由表配置了flannel0。 现在,flannel守护程序与Kubernetes的API服务器通信,以了解所有pod IP及其各自的节 点,以创建pods IP到节点IP的映射。
网络插件将此数据包封装在UDP数据包中,其中额外的标头将源和目标IP更改为各自的节点, 并通过eth0发送此数据包。
现在,由于路由表已经知道如何在节点之间路由流量,因此它将数据包发送到目标节点2。 数据包到达node2的eth0并返回到flannel0以解封装并在根网络命名空间中将其发回。 同样,数据包被转发到Linux网桥以发出ARP请求以找出属于veth1的IP。 数据包最终穿过根网络并到达目标Pod4。