Linux 网络栈调优:从内核到应用

为什么要调优 Linux 网络栈 Linux 内核默认的网络参数是为通用场景设计的,保守而安全。但在高并发 Web 服务、大规模负载均衡器、CDN 节点等场景下,默认值会成为瓶颈。典型症状包括: dmesg 出现 nf_conntrack: table full, dropping packet ss -s 显示大量 TIME-WAIT 连接 压测时 CPU 没跑满但吞吐量上不去 网卡 PPS(包每秒)远低于硬件能力 这些问题大多源于内核网络参数未调优。从协议栈参数、conntrack、网卡多队列、拥塞控制四个层面详细梳理。 内核网络参数的完整说明可参考 kernel.org 文档,本文涉及的参数在 Documentation/networking/ip-sysctl.txt 中有详细定义。 TCP/IP 协议栈关键内核参数 所有参数通过 sysctl 或 /proc/sys/net/ 查看和修改。以下参数均在 net.ipv4 命名空间下。 连接队列参数 # 查看当前值 sysctl net.ipv4.tcp_max_syn_backlog sysctl net.core.somaxconn sysctl net.core.netdev_max_backlog somaxconn — 监听套接字的全连接队列上限: # 默认值通常为 128 或 4096(取决于内核版本) # 高并发场景建议设置为 65535 net.core.somaxconn = 65535 全连接队列存放已完成三次握手但尚未被 accept() 取走的连接。队列满后新连接被丢弃,客户端看到连接超时。注意:应用层面的 listen(fd, backlog) 的 backlog 值不能超过 somaxconn,实际取两者最小值。...

May 7, 2024 · 7 分钟 · 1284 字 · 徐保金

K8s 网络模型:CNI 与 Service 网络

Kubernetes 网络模型四大要求 Kubernetes 网络模型的设计基于四个核心要求,理解它们是掌握 K8s 网络的基础。根据 Kubernetes 官方网络模型文档,这四个要求构成了集群网络通信的基石。 1. Pod 间通信(Pod-to-Pod) K8s 要求所有 Pod 之间可以直接通过 IP 通信,无需 NAT(网络地址转换)。这意味着: 每个 Pod 拥有独立的 IP 地址 Pod 之间通信使用真实 Pod IP,不经过 NAT 转换 无论 Pod 调度到哪个 Node,Pod 间网络始终扁平可达 这是 K8s 网络模型最核心的设计决策。传统数据中心网络中,跨主机容器通信通常依赖端口映射或 NAT,而 K8s 选择了扁平网络模型,让每个 Pod 成为网络中平等的一等公民。 2. Node 与 Pod 通信(Node-to-Pod) Node 上的进程(包括 kubelet、kube-proxy)必须能直接与该 Node 上任何 Pod 通信,同样不经过 NAT。这个要求保证了: kubelet 可以执行健康检查(liveness/readiness probe) 节点上的监控 agent 能直接采集 Pod 指标 主机网络进程与 Pod 网络互通 3. Service 网络 Service 提供了一个稳定的虚拟 IP(ClusterIP),将流量负载均衡到后端 Pod。Service 网络是独立于 Pod 网络的虚拟地址段(默认 10....

April 12, 2024 · 4 分钟 · 722 字 · 徐保金

Kubernetes Ingress 控制器选型与配置

概述 Kubernetes Service 提供四层负载均衡,但在生产环境中,绝大多数 Web 应用需要七层路由能力:基于域名的虚拟主机、基于路径的路由、TLS 终止、灰度发布。Ingress 就是 K8s 对七层路由的抽象,而 Ingress Controller 则是这一抽象的具体实现。 选择 Ingress Controller 不是一个小决策——它处于所有外部流量的入口位置,一旦选错或配置不当,影响的是整个集群的服务可用性。本文对比主流 Ingress Controller 的优劣,并给出生产环境配置实践。 本文基于 Kubernetes v1.30。参考 Kubernetes Ingress 文档 Ingress 原理 数据流路径 客户端 → 负载均衡器(云LB/MetalLB) → Ingress Controller Pod → Service → Pod ↑ Ingress 资源 (路由规则) Ingress Controller 本质上是一个运行在集群中的 Pod(通常是 Deployment 或 DaemonSet),它: 监听 K8s API 中的 Ingress 资源变化 将 Ingress 规则翻译成自身配置(如 nginx.conf) 热加载配置,处理外部请求并路由到对应 Service Ingress 资源结构 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myapp-ingress namespace: production annotations: nginx....

March 27, 2024 · 7 分钟 · 1490 字 · 徐保金