Kubernetes 运营商中的流量路由如何发生 - 出口流量之旅

问题描述

我正在尝试了解 Kubernetes-Operator 中的出口流量控制。如果我在 k3s 设置中实现了 Kubernetes operator,那么在 operator 中出口流量如何发生?

我想了解在 Kubernetes 运营商(出口流量的旅程)中,出口流量发生了哪些路径/网关和路由?

解决方法

作为一般规则,出口流量会从托管您的 Pod 的节点离开您的 SDN。节点将使用自己的底层网络上的 IP 对其进行 NAT。

现在,如果 Egress 是指“离开我的 Pod 的任何东西”/关于留在 SDN 内的通信。请记住:

  • SDN 有两个子网(Pod 网络、服务网络),并且您的 Pod 网络被拆分为更小的子网,静态分配给您的 Kubernetes 节点:
  • 服务(通常/当 spec.clusterIP != None 时)有自己的固定 IP。
  • 对于集群中的每个 Service,您都有一个 Endpoint 对象,其中列出了所有具有匹配标签的 Pod,这些 Pod 被视为“就绪”

连接服务时,节点防火墙(通常是 ipvs 或 iptables,根据 kube-proxy 的配置)会将您的连接重定向到相应端点对象中列出的地址之一。此时,您的节点路由表将接管:

  • 如果目标地址是本地地址(在分配给您的节点的 pod 子网中),则通信是直接的。
  • 如果目标地址属于分配给集群中另一个节点的网络,那么流量将通过您的 SDN 容器(calico、flannel、ovs 等)到达目的地。