绕过conntrack,使用eBPF增强 IPVS优化K8s网络性能
Jianmingfan (kenieevan@github) Zhiguohong (honkiko@github) Bypassing conntrack: Optimizing K8s Service By Enhancing IPVS with eBPF Agenda 目录 01 Problems with K8s Service How to optimize 02 Comparison Iptables rules are 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 decades • Support rich scheduling algorithm • Cons • Performance cost caused by conntrack • Some bugs How to optimize • Guidelines • Use less CPU instructions to process each packet • Don’t monopolize0 码力 | 24 页 | 1.90 MB | 1 年前3腾讯云 Kubernetes 高性能网络技术揭秘——使用 eBPF 增强 IPVS 优化 K8s 网络性能-范建明
管理service • IPVS 仅仅提供了DNAT,还需要借用 iptables+conntrack 做SNAT • 控制面和数据面算法复杂度都是O(1) • 经历了二十多年的运行,比较稳定成熟 • 支持多种调度算法 优势 IPVS mode 不足之处 • 没有绕过conntrack,由此带来了性能开销 • 在k8s的实际使用中还有一些Bug 02 优化的方法 编译成eBPF中间代码 • 注入内核 • 挂载到network traffic control • 报文激发eBPF代码 技术创新点一 • IPVS 对conntrack的功能依赖 • Iptables SNAT • 具体如何绕过conntrack? • 进报文 • 将处理请求的钩子从nf local-in 前移到nf pre-routing • skb的路由指针是NULL • 处理分片 ip_output -> NF postrouting -> ip_finish_output • 修改成: • 对kenel 做了hack,直接访问ip_finish_output IPVS 绕过conntrack 技术创新点二 • 在linux traffic control上挂一段eBPF 代码,在网卡出报文之前做SNAT • 尽量将大部分代码放在eBPF中,方便升级和维护。 • eBPF loader0 码力 | 27 页 | 1.19 MB | 9 月前3K8S安装部署开放服务
C. 安装 ipvs 【注】ipvs 将作为 kube-proxy 的代理模式 Step1: 安装 yum install ipvsadm ipset sysstat conntrack libseccomp –y Step2: 加载 cat > /etc/sysconfig/modules/ipvs.modules <conntrack modprobe -- ip_tables modprobe -- ip_set modprobe -- xt_set modprobe -- ipt_set modprobe /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack D. 安装 docker-ce 和 k8s See https://cloud.tencent.com/developer/article/1627330 Step1: 安装 docker-ce 0 码力 | 54 页 | 1.23 MB | 1 年前3k8s操作手册 2.3
bridge-nf-call-arptables = 1 net.ipv4.ip_forward = 1 EOF #前3行表示bridge设备在二层转发时也去调用iptables配置的三层规则(包含 conntrack) # sysctl -p #加载配置 ⑧防火墙放行端口 TCP: 6443,2379,2380,10250~10252,30000~32767 nf_conntrack_ipv4 EOF # modprobe ip_vs # modprobe ip_vs_sh # modprobe ip_vs_rr # modprobe ip_vs_wrr # modprobe nf_conntrack_ipv4 #一般默认只用ip_vs_rr # lsmod | grep -e ip_vs -e nf_conntrack0 码力 | 126 页 | 4.33 MB | 1 年前3运维上海2017-Kubernetes 在大规模场景下的service性能优化实战 - 杜军
ü ���� - IPVS service������������ ü ������� - nf_conntrack_ipv4, ip_vs, ip_vs_rr, ip_vs_wrr, ipvs_sh ü # echo 1 > /proc/sys/net/ipv4/vs/conntrack ü �����port range0 码力 | 38 页 | 3.39 MB | 1 年前3Kubernetes 异常配置检测框架
VPC 容器内配置错误 Iptables、路由配置错误 网卡、驱动配置错误 安全组配置错误 VPC 转发配置错误 Autopilot Engine 诊断任务 网络检测 Conntrack 采集 网卡丢包事件 所有包采集 Flow 采集 ebpf 注入 trace 读取 集群升级 集群异常检测闭环 • 集群升级前置检查 • 集群升级 • 集群升级后置检查 Autopilot0 码力 | 31 页 | 9.57 MB | 1 年前3基于Kubernetes构建容器云平台的实践 - UCloud优刻得实验室负责⼈ 叶理灯
IPv6 地址段通过 BGP 路路由协议宣告给接⼊入交换机 P o d 返 回 的 包 , 会 先 回 给 S e r v i c e Gateway,由于做了了SNAT,基于连接 追踪(conntrack),再返回给请求的 客户端。 每个接⼊入交换机下,选择两台节点作为Service Gateway,作为集群外部访问Service的⽹网关 Kube-proxy负责将发往 Service IP0 码力 | 30 页 | 3.52 MB | 1 年前336-云原生监控体系建设-秦晓辉
所在宿主 的监控 Kubernetes所在宿主的监控 宿主的监控,比较常规和简单,无非就是 CPU、Mem、Disk、DiskIO、Net、Netstat、Processes、 System、Conntrack、Vmstat 等等。原理就是读取 OS 的数据(通过 /proc 和 syscall 等)做一些简 单计算。有很多采集器可以选择: Telegraf Grafana-agent Datadog-agent0 码力 | 32 页 | 3.27 MB | 6 月前3Envoy原理介绍及线上问题踩坑
解决 方案 1、与客户沟通拆分两个微服务到不同的POD(符合微服务拆分原则) 2、如果无法拆分微服务,则需要解决源端口重用的问题,目前没有采用此种方法。 TCP五元组:(不能重复,否则conntrack无法区分) srcip:srcport,prot,dstip:dstport APP backend1 iptables inbound POD2 backend2 envoy10 码力 | 30 页 | 2.67 MB | 1 年前3OpenShift Container Platform 4.6 节点
avc_cache_threshold=8192 [net] nf_conntrack_hashsize=131072 [sysctl] net.ipv4.ip_forward=1 kernel.pid_max=>4194304 net.netfilter.nf_conntrack_max=1048576 net.ipv4.conf.all0 码力 | 404 页 | 3.60 MB | 1 年前3
共 27 条
- 1
- 2
- 3