![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
k8s
文章平均质量分 72
lulu的云原生笔记
事在人为
展开
-
【博客693】alertmanager如何自定义告警template
alertmanager如何自定义告警template。原创 2023-08-12 13:26:12 · 870 阅读 · 0 评论 -
【博客686】k8s informer list-watch机制中的re-list与resync
client-go中的reflector模块首先会list apiserver获取某个资源的全量信息,然后根据list到的resourceversion来watch资源的增量信息。且希望使用client-go编写的控制器组件在与apiserver发生连接异常时,尽量的re-watch资源而不是re-list。原创 2023-08-05 14:40:18 · 1055 阅读 · 0 评论 -
【博客636】流量先经过tcpdump还是先经过netfilter剖析
步骤:10.13.13.13访问10.23.23.23的nginx,我们设置drop将10.23.23.23的出入流量都drop,tcpdump此时抓到了哪些包。此时抓不到10.23.23.23回复的出向的包,因为出现tcpdump抓包点在netfilter后,被netfilter drop了。原创 2023-03-12 12:22:51 · 586 阅读 · 0 评论 -
【博客635】tcpdump原理与网卡混杂模式
tcpdump原理是注册一种虚拟协议,使得每个包在遍历当前的协议列表时有机会被处理,如果tcpdump发现包符合要求就会使用skb_clone一份,送到用户态程序去分析。tcpdump还会使网络设备进入混杂模式,是为了让包能过进入网络协议栈,从而有机会被捕捉,这样才能抓到包。原创 2023-03-12 11:57:04 · 3279 阅读 · 0 评论 -
【博客634】linux vxlan设备的不同场景下的四种使用方法
Linux 提供了另外一种方法,内核能够动态地通知节点要和哪个容器通信,应用程序可以订阅这些事件,如果内核发现需要的 ARP 或者 fdb 表项不存在,会发送事件给订阅的应用程序,这样应用程序从中心化的控制拿到这些信息来更新表项,做到更精确的控制。这个方案解决了在某些 underlay 网络中不能使用多播的问题,但是并没有解决多播的另外一个问题:每次要查找 MAC 地址要发送大量的无用报文,如果 vtep 组节点数量很大,那么每次查询都发送 N 个报文,其中只有一个报文真正有用。原创 2023-03-12 10:32:43 · 1780 阅读 · 0 评论 -
【博客633】linux vxlan设备工作原理
创建vxlan设备的时候会创建udp socket来向内核注册对udp包的处理,这个udp socket还绑定了vxlan处理的回调函数当udp包来了,内核发现有相应的udp socket在监听,就将包给这个udp socket指定的回调来处理,如果有设置回调的话,vxlan的udp socker设置的vxlan包回调处理函数就会在这里调用,从而有机会处理vxlan udp隧道包。原创 2023-03-12 10:02:45 · 565 阅读 · 0 评论 -
【博客632】k8s service session affinity原理与iptables recent模块
iptables的recent模块用于限制一段时间内的连接数, 是谨防大量请求攻击的必杀绝技!善加利用该模块可充分保证服务器安全。原创 2023-03-11 14:07:30 · 976 阅读 · 0 评论 -
【博客631】监控网卡与进程网络IO使用情况
注意:如果刚刚安装了 vnStat,它将给出以下消息“eth0:还没有足够的数据可用。等待一段时间,然后再次尝试该命令。原创 2023-03-11 11:19:39 · 649 阅读 · 2 评论 -
【博客630】MTU网络问题排查及解决思路
网络层发送数据包是有最大长度的,网络层从传输层接收到要发送的数据包时,它要判断向本地哪个接口发送数据,并查询该接口获得其最大传输单元MTU(MaximumTransmissionUnit),网络层把MTU值与要发送的IP数据包长度进行比较,如果IP数据包的长度比MTU值大,那么IP数据包就需要进行分片,分片后的数据包长度小于等于MTU(包括IP层头部,大小单位:byte)原创 2023-03-11 10:50:52 · 4673 阅读 · 1 评论 -
【博客629】Linux DNS解析原理与配置
程序客户端、下游的 DNS 服务器每次查询 DNS 成功之后,通常会将该 DNS 记录缓存一段时间,避免频繁发出查询请求的耗时。Linux 系统默认不会在本地建立 DNS 缓存,可以安装 nscd、dnsmasq 等工具提供 DNS 缓存。原创 2023-02-19 15:29:53 · 3257 阅读 · 1 评论 -
【博客628】k8s pod访问集群外域名原理以及主机开启了systemd-resolved的不同情况
从dns缓存里查找域名与ip的映射关系从/etc/hosts里查找域名与ip的映射关系从/etc/resolv.conf里查找dns server,并发起解析请求/etc/resolv.conf的内容一般如下:从dns缓存里查找域名与ip的映射关系从/etc/hosts里查找域名与ip的映射关系将dns解析请求发给本地systemd-resolved,由其去代理处理,因为systemd-resolved修改了 /etc/resolv.conf,使得本地解析请求全部发到127.0.0.1:53。原创 2023-02-19 12:44:50 · 2607 阅读 · 0 评论 -
【博客626】不同类型的ARP报文作用以及ARP老化机制
在上图中,我们看到只有arp缓存项的reachable状态对于外发包是可用的,对于stale状态的arp缓存项而言,它实际上是不可用的。如果此时有人要发包,那么需要进行重新解析,对于常规的理解,重新解析意味着要重新发送arp请求,然后事实上却不一定这样,因为Linux为arp增加了一个“事件点”来“不用发送arp请求”而对arp协议生成的缓存维护的优化措施,事实上,这种措施十分有效。原创 2023-02-18 20:41:36 · 2536 阅读 · 1 评论 -
【博客625】keepalived开启garp refresh的重要性
原因:机器迁移后网关那边的arp表没有刷新,流量还是转发到老的端口,但是机器已经迁移到别的端口了,于是网络不通。因为keepalied默认情况下是发vrrp在实现主备切换,然后garp只在master选中的时候播出去或者收到低优先级的vrrp报文的时候播出去,然后不会再定时播了,网关那边arp表过期的时候会主动发grap来问,master回复,这样就能知道master是谁。原创 2023-02-18 17:57:40 · 1388 阅读 · 0 评论 -
【博客624】MAC地址表、ARP表、路由表(RIB表)、转发表(FIB表)
MAC地址表是交换机等网络设备记录MAC地址和端口的映射关系,代表了交换机从哪个端口学习到了某个MAC地址,交换机把这个信息记录下来,后续交换机需要转发数据的时候就可以根据报文的目的MAC地址去根据MAC地址表转发数据。原创 2023-02-18 15:28:40 · 7717 阅读 · 0 评论 -
【博客623】Prometheus一条告警的触发流程与等待时间
即:group_wait决定每一个新告警组需要等待多久才发送出去,group_interval决定同一个告警组的告警间隔。因此一条告警到了alertmanager如果是一个新组那么等待group_wait的时间,如果是加入了已经有的组,那么这个组是新组则等待group_wait的时间,否则等待group_interval的时间。原创 2023-02-18 13:27:16 · 1238 阅读 · 0 评论 -
【博客622】利用Linux bridge泛洪做流量审计与分析
在网络设备上做流量镜像时,bridge 的强制泛洪实现了网卡级别的流量镜像效果。原创 2023-02-18 12:49:56 · 513 阅读 · 0 评论 -
【博客621】iptables -J动作总结
通过MASQUERADE即可解决这个问题,MASQUERADE会动态的将源地址转换为可用的IP地址,其实与SNAT实现的功能完全一致,都是修改源地址,只不过SNAT需要指明将报文的源地址改为哪个IP,而MASQUERADE则不用指定明确的IP,会动态的将报文的源地址修改为指定网卡上可用的IP地址。LOG动作只负责记录匹配到的报文的相关信息,不负责对报文的其他处理,如果想要对报文进行进一步的处理,可以在之后设置具体规则,进行进一步的处理。作用:用于接收匹配的流量,使得流量继续往后面的规则和链路去匹配。原创 2023-02-18 12:37:54 · 1132 阅读 · 4 评论 -
【博客620】prometheus如何优化远程读写的性能
为了解决prometheus本地存储带来的单点问题,我们一般在高可用监控架构中会使用远程存储,并通过配置prometheus的remote_write和remote_read来对接。原创 2023-02-12 15:25:10 · 1206 阅读 · 0 评论 -
【博客619】PromQL如何实现Left joins以及不同metrics之间的复杂联合查询
在限定匹配标签后,右向量中的元素可能匹配到多个左向量中的元素 因此该表达式的匹配模式为多对一,需要使用group修饰符group_left指定左向量具有更好的基数。多对一和一对多两种匹配模式指的是“一”侧的每一个向量元素可以与"多"侧的多个元素匹配的情况。在这种情况下,必须使用group修饰符:group_left或者group_right来确定哪一个向量具有更高的基数(充当“多”的角色)。多对一和一对多两种匹配模式指的是“一”侧的每一个向量元素可以与"多"侧的多个元素匹配的情况。原创 2023-02-12 14:01:04 · 2190 阅读 · 0 评论 -
【博客618】docker容器重启后读写层数据并不丢失的原理
docker run的时候其实是由create和start来完成的,create创建容器的时候会调用setRWLayer(container)创建读写层,start的时候会调用container.RWLayer.Mount(container.GetMountLabel())挂载读写层。restart的时候,则会使用新的镜像只读层 + 挂载当前容器的读写层,因为容器重启并不会丢失那些临时修改。原创 2023-02-11 22:45:55 · 2715 阅读 · 0 评论 -
【博客617】prometheus + alertmanager的搭配如何判定告警恢复
prometheus触发告警恢复:对于已经恢复的告警指标,如果之前是pending或者之前的ResolvedAt非空,且在resolvedRetention(15m)之前的,则删除此告警;否则更新告警的状态为恢复,且恢复的时间为当前时间对告警进行判断是否需要发送恢复时间是大于上次发送告警的时间,证明恢复是在告警后发生的,那么已经恢复了,需发送恢复设置告警的ValidUntil,如果这条告警过了ValidUntil的话,还没收到新firing,则代表恢复:ValidUntil = ts + max([c原创 2023-02-11 16:35:36 · 4463 阅读 · 0 评论 -
【博客616】prometheus staleness对PromQL查询的影响
运行查询时,将独立于实际的当前时间序列数据选择采样数据的时间戳。这主要是为了支持聚合(sum、avg 等)等情况,其中多个聚合时间序列在时间上不完全对齐。由于它们的独立性,Prometheus 需要在这些时间戳处为每个相关时间序列分配一个值。它通过简单地获取此时间戳之前的最新样本来实现。如果目标抓取或规则评估不再返回以前存在的时间序列的样本,则该时间序列将被标记为陈旧。如果一个目标被删除,它之前返回的时间序列将很快被标记为过时的。原创 2023-02-11 15:27:24 · 848 阅读 · 0 评论 -
【博客615】通过systemd设置cgroup来限制服务资源争抢
我们的宿主机上通常会用systemctl来管理一些agent服务,此时我们需要限制服务的cpu,memory等资源用量,以防止服务之前互相争抢资源,导致某些核心agent运行异常。原创 2023-02-11 12:28:26 · 1559 阅读 · 0 评论 -
【博客614】k8s实现LoadBalancer Service的网络方案
在非云服务厂商提供的k8s环境下,我们无法直接使用云厂商提供的LB,此时我们需要在基于裸金属服务器、边缘以及虚拟化的 Kubernetes 环境中使用 LoadBalancer 类型的 Service 对外暴露服务。原创 2023-02-05 14:05:47 · 2273 阅读 · 0 评论 -
【博客613】tcp重置防火墙原理:构造RST报文来终结非法活跃连接
tcpkill 工具只能用来关闭活跃的 TCP 连接,无法关闭非活跃的 TCP 连接,因为 tcpkill 工具是等双方进行 TCP 通信后,才去获取正确的序列号,如果这条 TCP 连接一直没有任何数据传输,则就永远获取不到正确的序列号。killcx 工具可以用来关闭活跃和非活跃的 TCP 连接,因为 killcx 工具是主动发送 SYN 报文,这时对方就会回复 Challenge ACK ,然后 killcx 工具就能从这个 ACK 获取到正确的序列号。原创 2023-02-05 11:58:33 · 1350 阅读 · 0 评论 -
【博客612】VLAN vs VXLAN:各施所长
vlan与vxlan的原理及其优缺点对比原创 2023-02-05 11:43:11 · 131 阅读 · 0 评论 -
【博客611】linux路由表机制
系统自带了3个策略,序号分别是0、32766、32767,策略匹配过程是从小到大执行的。以0号策略为例,它表示匹配任意来源IP的数据包,然后用名字叫做local的路由表进行路由匹配。如果local路由表里的规则能匹配成功,那么后续的rule就不会执行了,否则还会继续匹配后面的main,defaylt等路由规则每1条策略最终都会关联到1张路由表,同1个路由表可以被N个策略关联,路由表总是随着路由策略的添加而生成的。SUPPRESSOR。原创 2023-02-04 22:49:18 · 4152 阅读 · 0 评论 -
【博客609】docker volume挂载本机文件出现不同步的问题解决
docker volume挂载本机文件,在宿主机修改文件之后,容器内部不会同步生效,没有发生对应的修改,需要重启容器才可以正常同步。原创 2023-02-04 15:22:29 · 2931 阅读 · 0 评论 -
【博客608】源ip是本地网卡ip的流量都发往lo网卡的原因剖析
因此, 若两个网络接口分配不同的ip, 并且加入不同的net namespace, 若从本机中的另一个net namespace中ping另外一个net namespace中的ip, 则数据包不会通过“lo”接口来loopback, 需要使用线缆来连接两个网卡, 因此, 若需要在一台机器上测试网卡的性能, 需要将其加入不同的net namespace。在linux的网络设备驱动框架里面, 使用一个net_device来代表一个网络设备接口, 因此, 一个物理网卡对应着一个net_device结构。原创 2023-02-04 15:07:51 · 1540 阅读 · 1 评论 -
【博客607】linux路由过程分析与net.ipv4.ip_forward参数
要让Linux系统具有路由转发功能,需要配置一个Linux的内核参数net.ipv4.ip_forward。内核参数在Linux文件系统中的映射出的文件:/proc/sys/net/ipv4/ip_forward中记录了Linux系统当前对路由转发功能的支持情况。在sysctl.conf配置文件中有一项名为net.ipv4.ip_forward的配置项,用于配置Linux内核中的net.ipv4.ip_forward参数。sysctl 命令的 -w 参数可以实时修改Linux的内核参数,并生效。原创 2023-02-04 15:02:05 · 2140 阅读 · 0 评论 -
【博客606】k8s如何查看pod崩溃前的日志及其原理
kubelet实现previous的原理:将pod的日志存放在/var/log/pods/podname,并且是链接文件,链接到docker的容器的日志文件,同时kubelet还会保留上一个容器,同时有一个链接文件链接到pod上一个崩溃的容器的日志文件,使用previous就是查看的这个文件。kubelet读的是/var/log/pods/下的日志文件,–previous读的也是/var/log/pods/下的日志文件,且专门有个链接文件来指向上一个退出容器的日志文件,以此来获取容器崩溃前的日志。原创 2023-02-04 14:51:07 · 6605 阅读 · 5 评论 -
【博客604】kubelet中的容器与镜像的垃圾回收机制
kl.containerGC.GarbageCollect 调用的是 ContainerGC manager 中的方法,ContainerGC 是在 NewMainKubelet 中初始化的,ContainerGC 在初始化时需要指定一个 runtime,该 runtime 即 ContainerRuntime,在 kubelet 中即 kubeGenericRuntimeManager,也是在 NewMainKubelet 中初始化的。原创 2023-02-02 20:51:59 · 1027 阅读 · 1 评论 -
【博客603】linux默认生成的指向169.254.0.0的条路由的作用
当系统配置为使用动态地址,而找不到DHCP服务器时,系统会为本机设置一个169.254.X.X的地址。169.254.0.0/16这个网络地址用于自动专用IP寻址或APIPA。如果DHCP客户端尝试获取地址,但在超时和重试时间段后找不到DHCP服务器,它将从该网络中随机获取地址。这允许与未能获得DHCP地址的主机进行通信。原创 2023-01-30 22:54:13 · 1111 阅读 · 0 评论 -
【博客602】net.ipv4.conf.eth0.route_localnet的作用
在某些场景下会用在一台主机内网络流量重定向,比如将在本机回环设备中的数据包强行转发到另一台主机上。结果发现原本在正常的NAT场景中生效的iptables规则在loopback数据包的转发中并不起作用注意:回环lo接口上的 127.0.0.1 地址,不允许发到设备外部sysctl -w net.ipv4.conf.eth0.route_localnet=1 开启route_localnet后,数据包就可以在lo上做nat。原创 2023-01-30 22:44:07 · 1512 阅读 · 1 评论 -
【博客600】将iptables流量转到用户态进行特殊化处理
当我们需要将iptables匹配到的流量送到用户态来进行特殊化处理。原创 2023-01-29 21:59:58 · 1156 阅读 · 0 评论 -
【博客599】k8s利用client-go实现leader election
k8s利用client-go实现leader election。原创 2023-01-29 21:50:36 · 198 阅读 · 0 评论 -
【博客598】从netfilter hook执行原理分析iptables为什么自定义链无法主动调用只能从其它链跳转过来
跳转目标(jump target)jump target 是跳转到其 他 chain 继续处理的动作。很多内置的 chain,它们和调用它们的 netfilter hook 紧密联系在一起。iptables 也支持管理员创建他们自己的用于管理目的的自定义chain。为什么自定义链无法主动调用只能从其它链跳转过来:用户定义的 chain 只能通过从另一个规则跳转(jump)到它,因为它们没有注册到 netfilter hook,因为netfilter hook中没有自定义hook点,只有固定的5个内置点。原创 2023-01-18 16:27:02 · 984 阅读 · 1 评论 -
【博客597】iptables如何借助连续内存块通过xt_table结构管理流量规则
xt_table 的初始化:不同的规则表有以下特征:基于规则的最终目的,iptables 默认初始化了 4 个不同的规则表,分别是 raw、 filter、nat 和 mangle。以 filter 为例介绍 xt_table的初始化和调用过程:filter table 的定义如下:在 iptable_filter.c 模块的初始化函数 iptable_filter_init中,调用xt_hook_link 对 xt_table 结构 packet_filter 执行如下初始化过程:不同 table 的原创 2023-01-18 15:29:40 · 671 阅读 · 0 评论 -
【博客596】如何向内核注册自定义netfilter hook
向内核注册一个netfilter hook,打印input链的进入流量的ip,mac,proto。原创 2023-01-18 15:16:09 · 230 阅读 · 0 评论 -
【博客595】从linux收包与发包过程看iptables链如何发挥作用
主要分为三个部分:3-1、接收数据过程分析:过程分析:源码分析:3-2、发送数据过程分析:过程分析:源码分析:3-3、转发数据过程分析:过程分析:源码分析:3-4、汇总:原创 2023-01-18 14:50:34 · 723 阅读 · 0 评论