Linux 内核中,conntrack 的是网络栈的核心功能之一。它使得内核能够跟踪所有逻辑网络连接或者流量,因此能够鉴别构成流量的数据包,从而对每个数据流进行一致的处理。
本文介绍连接跟踪(connection tracking,conntrack,CT)的原理,应用,及其在 Linux 内核中的实现。
这是早前的一个案例,那时候随着微服务数量的增加和请求量的上涨,我们当时从监控注意到业务高峰时线上接口的慢请求越来越多,原本毫秒级响应的接口偶尔会出现请求延迟超过1秒的现象,严重影响了用户体验。为了解决这一问题,我们在非生产环境通过压测工具进行复现,如下是具体排查和优化过程。
安装基于docker的prometheus来监控java微服务的各项目性能指标。 使用docker来安装最简单省事。
连接跟踪(也叫会话管理)是状态防火墙关键核心,也是很多网元设备必不可少的一部分。各厂商的实现原理基本雷同,只是根据各自的业务进行修改和优化。其中,还有不少厂商干脆是基于Linux内核实现的。下面,我们就来看看Linux内核中连接跟踪的几个要点。
连接跟踪子系统跟踪已看到的所有数据包流,运行“sudo conntrack -L”以查看其内容:
1、内核优化 ECHOSTR='net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_keepalive_time =600 net.ipv4.ip_local_port_range = 4000 65000 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_m
20个线程连续压测一分钟后开始交替出现两台目标机器已经宕机(单线程访问没什么问题),出现日志如下所示:
6、关闭selinux,清空iptables 在服务器配置完全成功后各项服务正常后,在开启selinux
昨天给一台新机器装安装docker,但报错了,解决了一整天也没有头绪。今天起了个大早,破天荒的吃了早饭,然后继续解决。终于找到了问题。
已经多久没有编程了?很久了吧…其实我本来就不怎么会写代码,时不时的也就是为了验证一个系统特性,写点玩具而已,工程化的代码,对于我而言,实在是吃力。
在Linux网络管理和监控领域,conntrack命令是一个强大的工具,它提供了对netfilter连接跟踪系统的直接访问🔍。这篇文章将深入探讨conntrack的由来、底层原理、参数意义,以及其常见用法,并对返回结果的每个字段进行详细解释。
我们的程序,在实际的网络部署时,一般比较复杂,会经过很多的网络设备,防火墙就是其中的一种。做开发的同事,一般对这块了解不多,也很可能被防火墙坑到。比如,应用一般需要访问数据库,为了避免频繁建立连接,一般是会提前建立一个连接池,每次来一个请求,就从连接池取一个连接来用,用完再归还到池子里。
在Kubernetes API的众多对象中,Events算是最容易被我们忽视的类型之一。与其他对象相比,Event的活动量很大,不太可能长时间存储在etcd中,默认情况下,Event留存时间也只有1小时。当我们使用kubectl describe获取一个对象时,可能因时间超限而无法获取它的历史事件,这对集群的使用者非常的不友好。除了能查看集群事件外,我们可能还有类似追踪一些特定的Warning事件(如Pod生命周期、副本集或worker节点状态)来进行相关告警的需求。那么在开启本期话题之前,我们先来理解下Kubernetes Events的结构,下述是官访问给出的几个重要字段解释
iptables系列之基本应用及显式扩展 netfilter:Framework,TCP,内核中 iptables语法 iptables [-t table] command CHAIN [num
一、最小化原则 (1)安装最小化 (2)开机启动服务最小化 (3)操作最小化 (4)权限最小化 (5)配置参数合理,不要最大化 二、端口优化 远程登录的端口默认是22号端口,这是大家都知道的。所以为了安全着想,我们要修改服务器远程连接端口,这样黑客就不好破解你的linux服务器。同时,默认登录的用户名为root,我们可以修改配置,使远程不能使用root登录。方法,更改ssh服务远程登录的配置。 vim /etc/ssh/sshd_config #更改前先备份 Port 22 #修改端口(随便改为其
性能分析一直是性能实施项目中的一个难点。对于只做性能测试不做性能分析的团队来说,总是不能把问题非常显性地展示出来,不能给其他团队非常明确的引导。对于这种类型的测试实施,只能把问题抛出来,让其他相关团队去查。沟通成本很高。 而一个成熟的性能团队应该是要把问题点分析出来,给其他团队或责任人非常明确的瓶颈点,以加快问题的处理进度。 从完整的分析思路上考虑。有两个要点:分段和分层。
Nginx 的机器,一般都是独立的机器,因此不建议采用默认 irqbalance 的自动绑定,而是要设置 smp_affinity、smp_affinity_list 的值来自动绑定。
nfconntrack是netfilter中的重要模块,很多netfilter的功能都依赖于这个模块,如NAT等。而利用linux来构建的网络设备,可以说,其80%的功能都依赖于nfconntrack实现的会话管理。所以,会话管理的性能优劣会对网络设备的性能产生直接的影响。
在高并发、短连接的场景下,kube-proxy ipvs 存在 rs 删除失败或是延迟高的问题,社区也有不少 Issue 反馈,比如kube-proxy ipvs conn_reuse_mode setting causes errors with high load from single client[1]。文本对这些问题进行了梳理,试图介绍产生这些问题的内部原因。由于能力有限,其中涉及内核部分,只能浅尝辄止。
最近在基于openwrt盒子实现一个业务引流的方案,涉及到很多linux系统NetFilter,、IP Tables and Conntrack的理解和简单使用。由于没有相关使用和开发经验查找了大量的资料,这里总结一下。 1、linux kernel doc文档查找链接--下面一tun/tap介绍为例: https://www.kernel.org/doc/Documentation/networking/tuntap.txt 或者下面网页方式: https://www.kernel.org/doc/html/latest/networking/tuntap.html 2、Linux NetFilter, IP Tables and Conntrack Diagrams关系图--这个还是非常不错的。 https://gist.github.com/nerdalert/a1687ae4da1cc44a437d
最近我一直被一个间歇性连接重置的 bug 所困扰,经过一段时间的调试之后,发现该 bug 是由几个不同的网络子系统联合导致的。通过这几天的深入挖掘和调试,我对 Kubernetes 的网络机制更加熟悉了,对此也有了一些经验总结,分享给社区。
1.2kube-proxy开启ipvs的前置条件 由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提需要加载以下的内核模块: ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack_ipv4
Envoy 是一款面向 Service Mesh 的高性能网络代理服务。它与应用程序并行运行,通过以平台无关的方式提供通用功能来抽象网络。当基础架构中的所有服务流量都通过 Envoy 网格时,通过一致的可观测性,很容易地查看问题区域,调整整体性能。
Kubernetes 环境中,很多时候都要求节点内核参数开启 bridge-nf-call-iptables:
iptables -L -n -v 2 多使用multiport iprange
作为运维人员,经常会初始化系统,系统在安装过程中基本都会选择最小化安装,这样安装好的系统里会缺少很多环境。 下面分享一个系统安装后的初始化脚本: #!/bin/bash #系统时最小化安装的,这里要安装系统的软件库 yum groupinstall -y "development tools" #创建目录 [ ! -d /server/tools ] && mkdir -p /server/tools [ ! -d /application ] && mkdir -p /application [ !
使用 kubernetes 遇到最多的 70%问题都可以归于网络问题,最近发现如果内核参数: bridge-nf-call-iptables设置不当的话会影响 kubernetes 中 Node 节点上的 Pod 通过 ClusterIP 去访问同 Node上的其它 pod 时会有超时现象,复盘记录一下排查的前因后因。
!TIP二进制部署 k8s - 初始化系统环境***转载请注明出处:https://janrs.com/4xoz有任何问题欢迎在底部评论区发言。初始化系统环境!NOTE需要在每台服务器都执行。只需要初始化部署 k8s 集群的服务器。部署 etcd 集群的服务器不需要初始化。设置主机名hostnamectl set-hostname k8s-master01hostnamectl set-hostname k8s-master02hostnamectl set-hostname k8s-master03设置
作者范建明、洪志国、张浩,均为腾讯云容器产品中心高级工程师,负责容器网络和Service Mesh,容器Runtime,调度等相关研发工作。
一个公众号关注者私信问我一个问题:从 Pod 内发起的,向外网的访问过程会涉及到 VTEP 吗?涉及到的 NAT 细节是什么?
客户反馈从pod中访问服务时,总是有些请求的响应时延会达到5秒。正常的响应只需要毫秒级别的时延。
讲一下为什么使用TencentOS Server 3.1 (TK4)的系统。还不是因为centos8不提供长期维护了....,顺便体验一下腾讯云开源的tencentos.详情见腾讯云官网:https://cloud.tencent.com/document/product/213/38027。毕竟是与centos8兼容的,按照centos8的搭建kubernetes的流程搭建一遍kubernetes体验一下跨区域是否可行!
服务器 加载光盘ISO mount /dev/cdrom /media[media] (名字可以随便写) name=media (名字可以随便写和上面相同) baseurl=file:///media gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release (如果是centos,需要修改成RPM-GPG-KEY-CentOS-7)yum clean all yum makecacheanonymous_en
介绍iptables之前我们先搬出他的父亲netfilter,netfilter是基于Linux 2.4.x或更新的内核,提供了一系列报文处理的能力(过滤+改包+连接跟踪),具体来讲可以包含以下几个功能:
这个参数通常需要在高负载的访问服务器上增加。比如繁忙的网络(或网关/防火墙 Linux 服务器),再比如集群规模大,node 和 pod 数量超多,往往需要增加内核的内部 ARP 缓存大小。
对于TCP的初始接收窗口大小,linux和centos的实现是不一样的,如linux内核3.10版本的初始接收窗口定义为10mss,但centos 3.10内核中的初始窗口大小定义为TCP_INIT_CWND * 2,即20*MSS大小。(看着linux源码在centos7.4系统上测试,纠结了好久。。)
走火入魔之后,你会觉得需要赶紧将“基于五元组的数据流”改成“基于应用层协议固定偏移的数据流”,赶紧动手,越快越好!于是此人在支持zone conntrack的Linux 3.17内核上为nf_conn增加了几个字段:
(adsbygoogle = window.adsbygoogle || []).push({});
--icmp-type 8:echo-request 0:echo-reply 例子:两个主机 in和out,允许in ping out 不允许out ping in 做法:首先在in上拒绝所有ping请求,先生成一个白名单再在in上写规则
fdisk -l #查看设备,一般可以看到设备名为/dev/xvdb,或者为/dev/vdb(阿里云io优化型)
上一篇文章主要是介绍了,每台虚拟机的环境配置。接下来我们开始有关K8S的相关部署。
我们从 2017 年开始基于 1.9.4 版本构建第一个 Kubernetes 集群。我们有两个集群,一个集群在裸机的 RHEL 虚拟机上运行,另一个集群在 AWS EC2 上运行。
在 Linux 系统中,常见的动态追踪方法包括 ftrace、perf、eBPF/BCC 以及 SystemTap 等。
作者范建明、洪志国、张浩,均为腾讯云容器产品中心高级工程师,负责容器网络和Service Mesh,容器Runtime,调度等相关研发工作。 Kubernetes Service[1] 用于实现集群中业务之间的互相调用和负载均衡,目前社区的实现主要有userspace,iptables和IPVS三种模式。IPVS模式的性能最好,但依然有优化的空间。该模式利用IPVS内核模块实现DNAT,利用nf_conntrack/iptables实现SNAT。nf_conntrack是为通用目的设计的,其内部的状态和流程
就是把A发出的报文的目的地址:端口由1.1.1.2:11111转变为2.2.2.2:11111
Kubernetes高可用一般建议大于等于3台的奇数台,我使用3台master来做高可用,如果是虚机的话不最好不要克隆
大家好,我是 roc,来自腾讯云容器服务(TKE)团队,经常帮助用户解决各种 K8S 的疑难杂症,积累了比较丰富的经验,本文分享几个比较复杂的网络方面的问题排查和解决思路,深入分析并展开相关知识,信息量巨大,相关经验不足的同学可能需要细细品味才能消化,我建议收藏本文反复研读,当完全看懂后我相信你的功底会更加扎实,解决问题的能力会大大提升。
发布于: Friday 19 February 2021 分享至微博
领取专属 10元无门槛券
手把手带您无忧上云