绕过conntrack,使用eBPF增强 IPVS优化K8s网络性能
access • Major modes • Iptables • IPVS Iptables mode • How it works • DNAT at PREROUTING chain • SNAT at POSTROUTING chain • Pros • Iptables is widely adopted in popular Linux distributions • Cons difficult to debug IPVS mode • Services are organized in hash table • IPVS DNAT • conntrack/iptables SNAT • Pros • O(1) time complexity in control/data plane • Stably runs for two decades • Support rich ingress/egress packets IPVS bypass conntrack • Why IPVS depends on conntrack? • Iptables/conntrack SNAT • How IPVS bypasses conntrack? • Ingress • Move IPVS Netfilter hook from local-in to PREROUTING0 码力 | 24 页 | 1.90 MB | 1 年前3腾讯云 Kubernetes 高性能网络技术揭秘——使用 eBPF 增强 IPVS 优化 K8s 网络性能-范建明
NodePort 提供集群外部的访问 iptables mode • 在netfilter pre-routing阶段做DNAT • 在netfilter post-routing阶段做SNAT • 每个service 添加一条或多条rules。使用数组管理rules。 • 仅支持随机的调度算法 • kube-proxy代码实现比较简单 • iptables 在linux iptables rule 不容易调试 IPVS mode • 使用hashtable 管理service • IPVS 仅仅提供了DNAT,还需要借用 iptables+conntrack 做SNAT • 控制面和数据面算法复杂度都是O(1) • 经历了二十多年的运行,比较稳定成熟 • 支持多种调度算法 优势 IPVS mode 不足之处 • 没有绕过conntrack,由此带来了性能开销 编译成eBPF中间代码 • 注入内核 • 挂载到network traffic control • 报文激发eBPF代码 技术创新点一 • IPVS 对conntrack的功能依赖 • Iptables SNAT • 具体如何绕过conntrack? • 进报文 • 将处理请求的钩子从nf local-in 前移到nf pre-routing • skb的路由指针是NULL • 处理分片 •0 码力 | 27 页 | 1.19 MB | 9 月前3运维上海2017-Kubernetes 在大规模场景下的service性能优化实战 - 杜军
��� Ø DR�Tunneling�����������IPVS Director Ø NAT���������������IPVS Director - �������� DNAT���SNAT DR Tunneling NAT IPVS����� • �VVIP ü dummy�G # ip link add dev dummy0 type dummy # ip addr add @Huawei���1.9�beta • ��ClusterIP�NodePort�External IP�Load Balancer�OnlyLocalNode… • ��iptables�SNAT����� Kubernetes�Service�� Iptables��Service���� ��iptables������� IPVS��Service���� Iptables0 码力 | 38 页 | 3.39 MB | 1 年前3基于Kubernetes构建容器云平台的实践 - UCloud优刻得实验室负责⼈ 叶理灯
Bgpd 负责将 Service IPv6 地址段通过 BGP 路路由协议宣告给接⼊入交换机 P o d 返 回 的 包 , 会 先 回 给 S e r v i c e Gateway,由于做了了SNAT,基于连接 追踪(conntrack),再返回给请求的 客户端。 每个接⼊入交换机下,选择两台节点作为Service Gateway,作为集群外部访问Service的⽹网关 Kube-proxy负责将发往 Kube-proxy负责将发往 Service IP 的流量量转 发到对应的Pod。启动时将 kube-proxy的 masquerade-all 选项打开,这样 kube- proxy 转发给Pod的包会实现源地址转换 (SNAT) Service Gateway包括 bgpd 和 kube-proxy两部分。 Node Pod Pod Pod BGPD Kube-proxy masquerade-all=true0 码力 | 30 页 | 3.52 MB | 1 年前3Amazon Elastic Kubernetes Service (EKS) 初探秘
– 100.64.0.0/10 客户网 关 公司数 据中心 On-premises 10.1.0.0/16 VPN / DX Pod Outbound Traffic SNAT EKS worker node Primary elastic network interface Pod Secondary elastic network interface0 码力 | 39 页 | 1.83 MB | 1 年前3Docker 从入门到实践 0.4
172.17.0.0/16 ... 其中,上述规则将所有源地址在 172.17.0.0/16 网段,目标地址为其他网段(外部网络)的流量动态伪 装为从系统网卡发出。MASQUERADE 跟传统 SNAT 的好处是它能动态从网卡获取地址。 容器允许外部访问,可以在 docker run 时候通过 -p 或 -P 参数来启用。 不管用那种办法,其实也是在本地的 iptable 的0 码力 | 179 页 | 2.27 MB | 1 年前3OpenShift Container Platform 4.6 发行注记
重写规则,使用固定源端口通过服务 IP 和 pod IP 连接到服务的客户端可能会遇到 端口冲突的问题。在这个版本中,插入了额外的 Open vSwitch(OVS)规则来确保在端口冲突发 生时,并执行额外的源网络地址转换(SNAT)来避免上面提到的冲突。因此,连接到服务时不再 有端口冲突。(BZ#1937547) 在以前的版本中,在 pod 有机会同步前,节点就被标记为 Ready 并可以接受 pod。因此,Pod 状态0 码力 | 91 页 | 1.15 MB | 1 年前3OpenShift Container Platform 4.13 网络
Container Platform 4.13 网 网络 络 390 此详细输出显示了附加到机箱的机箱和端口,本例中为所有路由器端口以及像主机网络一样运行 的任何内容。任何 pod 使用源网络地址转换(SNAT)与更广泛的网络通信。其 IP 地址转换为运行 Pod 的节点的 IP 地址,然后发送到网络。 除了机箱信息外,南向数据库还具有所有逻辑流,这些逻辑流随后发送到每个节点上运行的 ovn- con --to-destination 203.0.113.27:443 2021-04-26T12:27:20Z [debug] Added iptables rule: iptables -t nat -o net1 -j SNAT --to- source 192.168.12.99 # crictl ps --name egress-router-cni-pod | awk '{print $1}' 第 第 27 章 neutron 保留端口。 使用与 OpenShift Container Platform 集群安装相同的 RHOSP 用户,您可以为此保留端 口分配一个浮动 IP 地址,以便为出口流量具有可预测的 SNAT 地址。当 RHOSP 网络上的 出口 IP 地址从一个节点移到另一个节点时,因为节点故障转移(例如,neutron 保留端口 会被删除并重新创建)。这意味着浮动 IP 关联丢失,您需要手动将浮动0 码力 | 697 页 | 7.55 MB | 1 年前3Docker 从入门到实践 0.9.0(2017-12-31)
17.0.0/16 ... 其中,上述规则将所有源地址在 172.17.0.0/16 网段,目标地址为其他网段(外部网络)的 流量动态伪装为从系统网卡发出。MASQUERADE 跟传统 SNAT 的好处是它能动态从网卡获 取地址。 外部访问容器实现 容器允许外部访问,可以在 docker run 时候通过 -p 或 -P 参数来启用。 不管用那种办法,其实也是在本地的0 码力 | 370 页 | 6.73 MB | 1 年前3OpenShift Container Platform 4.9 网络
--to-destination 203.0.113.27:443 2021-04-26T12:27:20Z [debug] Added iptables rule: iptables -t nat -o net1 -j SNAT --to- source 192.168.12.99 # crictl ps --name egress-router-cni-pod | awk '{print $1}' CONTAINER0 码力 | 388 页 | 4.04 MB | 1 年前3
共 10 条
- 1