【问题标题】:How traffic routing happens in Kubernetes operator - Journey of Egress trafficKubernetes operator 中的流量路由是如何发生的 - Journey of Egress traffic
【发布时间】:2021-09-29 16:02:19
【问题描述】:

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

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

【问题讨论】:

    标签: kubernetes kubernetes-networkpolicy kubernetes-operator kubernetes-networking


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • @SYN-:我在您的最后两个要点中有两个问题:1. 如果目标地址是本地地址:那么示例可以是同一命名空间中的另一个 pod,也可以是在同一 NS 中的另一个 pod 中运行的应用程序?如果是,那么根据你的沟通是直接的吗?直接在这里是什么意思? 2.如果目标地址属于分配给另一个节点的网络:另一个节点是指另一个pod?这里让我们以google.com 为例。如果我的目标地址是google.com,那么它将通过SDN,它可以通过kubernetes operator而不是calico、flannel、cilium等吗?
    • @SYN-: 同样在 k3s 设置中,默认 coredns pod 是使用 rancher 镜像 rancher/coredns-coredns:1.8.3 创建的。所以在我的情况下,如果我的目标地址是 google.com,出口流量将通过 coredns?我的意思是 coredns 在出口呼叫中扮演什么角色?
    • 当我说地址是“本地”时,我的意思是节点/路由:如果源 Pod 和目标 Pod 都在同一个节点上,它们在同一个 pod 子网中有一个 IP,通信将不要离开那个节点。关于 DNS 解析,客户端 Pod 可能会连接您的集群 DNS 服务器,这可能会反过来发出自己的查询——或者为客户端提供缓存的答案。严格来说,您的应用程序 Pod 流量不会离开 SDN。虽然可以肯定 CoreDNS 最终会连接一些内部(公司 LAN)或公共解析器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 2021-04-10
    • 2020-05-20
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多