K8S故障处理指南:网络问题排查思路

1. 前言

对于私有化环境,客户的网络架构,使用的云平台存在着各种差异,K8S网络可能会出现各种问题,此文着重讲解遇到此种问题的排查方法和思路,不会涉及相关网络底层技术描述.

环境说明

由于我们的k8s网络组件默认使用了flannel,这里描述的集群网络,均为flannel。但如果你使用了其他CNI组件,依然可以参考此文章的排查思路.

2. 异常场景

如何判断k8s集群网络出现异常?

  • 当集群出现pods大量异常,日志显示dns解析失败,或者节点间网络连接失败等,即可判断是集群网络异常

我们可以通过如下几种方式进行排查。当任何一种方式的结果非预期内,则确认k8s集群网络出现异常

2. 排查步骤

  • 测试节点互ping

可以按照如下步骤操作

查询node名称,podcidr,address并打印

[root@localhost ~]# kubectl get nodes -o jsonpath='{range .items[*]}[name:{.metadata.name} , podCIDR:{.spec.podCIDR} , ipaddr:{.status.addresses[0].address}]{"\n"} {end}'
[name:10.28.87.59 , podCIDR:172.27.1.0/24 , ipaddr:10.28.87.59]
[name:10.28.87.60 , podCIDR:172.27.0.0/24 , ipaddr:10.28.87.60]
[name:10.28.87.61 , podCIDR:172.27.2.0/24 , ipaddr:10.28.87.61]
[name:10.28.87.62 , podCIDR:172.27.4.0/24 , ipaddr:10.28.87.62]
[name:10.28.87.63 , podCIDR:172.27.3.0/24 , ipaddr:10.28.87.63]
[name:10.28.87.64 , podCIDR:172.27.5.0/24 , ipaddr:10.28.87.64]

此命令需要在所有节点下执行,可在部署机器上使用ansible调用使用上述命令获取到的CIDR地址,进行ping操作,seq根据节点数量进行设置

从上面结果可以看到共6个K8S节点,子网分别是172.27.0-172.27.5子网段。

使用下边shell脚本测试pod子网,通的话打印up

[root@localhost ~]# for ip in $(seq 0 5);do ping -c2 -W1 -q 172.27.$ip.1 2>1 &>/dev/null && echo "172.27.$ip.1 up" || echo "172.27.$ip.1 down";done
172.27.0.1 up
172.27.1.1 up
172.27.2.1 up
172.27.3.1 up
172.27.4.1 up
172.27.5.1 up

非预期结果: 出现某个节点固定的ping异常,即认为对应节点间vxlan通信异常,检查对应节点的网络即可

  • tcp,udp查询

需要在所有节点上执行,可在一台机器上使用ansible调用

ping操作属于三层操作,由于某些环境会禁ping,因此我们可以使用如下命令进行确认

使用http请求访问coredns metrics接口,状态码为200时正常,状态码000代表网络异常不通

[root@CentOS76 ~]# kubectl get pods -n kube-system -o wide | grep coredns | awk '{print $6}' | xargs -i  curl --connect-timeout 2 -o /dev/null -s -w "%{http_code}\n" http://{}:9153/metrics
200
200
200
200
200
200

使用dns查询kubernetes.default地址。有返回则代表正常

[root@localhost ~]# kubectl get pods -n kube-system -o wide | grep coredns | awk '{print $6}' | xargs -l nslookup -type=a kubernetes.default.svc.cluster.local
Server:         172.27.2.23
Address:        172.27.2.23#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------
Server:         172.27.1.131
Address:        172.27.1.131#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------
Server:         172.27.3.57
Address:        172.27.3.57#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------
Server:         172.27.0.29
Address:        172.27.0.29#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------
Server:         172.27.5.53
Address:        172.27.5.53#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------
Server:         172.27.4.65
Address:        172.27.4.65#53

Name:   kubernetes.default.svc.cluster.local
Address: 172.26.0.1
---------

非预期结果:dns查询报connection timed out; no servers could be reached, curl报000,都代表网络可能存在异常

3. 异常场景

当我们通过上述方式,确认集群节点存在异常时,可以使用如下思路进行逐一排查

  • ip_forward内核被重置为0

  • flannel通信异常

  • 启用了firewalld防火墙

  • 启用了安全软件

  • ip_forward

名词解释:ip_forward代表了路由转发特性,为0时不开启,设置为1时代表启用。由于vxlan的跨三层特性, 集群节点需要转发目标主机非自己的数据包.
影响范围: 如果此值设为0,会导致跨节点通信异常.

出现原因: 在部署时,会向/etc/sysctl.conf里边添加net.ipv4.ip_forward=1,来保证永久生效。

问题定位: 出现在集群重启后,发现pods异常,网络不通. 通过tcmdump抓包发现flannel流量正常。

处理方式

查询本机内核参数, 在所有节点上执行,可在部署机上使用ansible调用,为读操作,可放心执行

[root@localhost ~]# sysctl -n net.ipv4.ip_forward
0

打印sysctl加载链,会变更相关内核参数,生产环境禁用使用(如果出现ip_forward为0则可使用)

[root@localhost ~]# sysctl --system
* Applying /usr/lib/sysctl.d/00-system.conf ...
......
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
.....
* Applying /usr/lib/sysctl.d/50-default.conf ...
.......
* Applying /etc/sysctl.d/99-sysctl.conf ...
.......
* Applying /etc/sysctl.conf ...
.......

找到具体是哪个文件修改了ip_forward为0,则修改此文件,并重载内核参数。无异常禁止使用

[root@localhost ~]# sysctl -p
  • flannel通信异常

名词说明: vxlan是vlan的拓展协议,为overlay网络,可以穿透三层网络对二层进行扩展,即大二层网络。flannel我们默认使用了vxlan做为封装协议,端口为8472
影响范围: 跨节点通信异常
问题定位: 对udp 8472端口抓发,发现只有出站流量,未有入站流量,即可认定为flannel vxlan通信异常
出现原因: 安全组封禁,vxlan端口冲突,网卡异常等。由于flannel异常的原因多种多样,此次仅针对常见情况进行描述。建议具体问题具体分析。
问题处理: 使用nc等相关命令进行测试,如果抓包仍未发现入站流量,且其他udp端口正常,则可使用修改port的方式

添加Port字段,将通信端口修改为8475

[root@localhost ~]# kubectl edit cm -n kube-system kube-flannel-cfg
net-conf.json: |
    {
      "Network": "172.27.0.0/16",
      "Backend": {
        "Type": "vxlan",
        "Port": 8475
      }
    }

修改后需要重启相关daemonset pods

[root@localhost ~]# kubectl get pods -n kube-system | grep flannel | xargs kubectl delete pods -n kube-system

修改port不生效,可使用host-gw 如果内网各节点二层互通,可使用host-gw模式,此模式兼容性好,网络效率高.

[root@localhost ~]# kubectl edit cm -n kube-system kube-flannel-cfg
net-conf.json: |
    {
      "Network": "172.27.0.0/16",
      "Backend": {
        "Type": "host-gw",
    }

如果无法定位问题,可以通过抓包的方式来判断

例如:当时coredns网络不通时,通过curl测试

curl -I 10.187.1.24:9153/metrics

然后再开一个窗口抓包

tcpdump -nn -i flannel.1 host 10.187.1.24 and port 9153 -vv

防火墙排查

名词解释: 此处的防火墙指Linux的软件防火墙,在Cenots上叫firewalld, 在UOS下叫UFW. 默认的软件防火墙会导致相关数据库被拦截
影响范围: 特定服务访问异常,集群节点互通异常
问题定位: 对iptables表链进行分析,发现有非预期的规则出现,则代表存在其他防火墙规则
出现原因: 客户安装安全软件,或者是非预期的软件行为导致
问题排查:

一般看到ufw, public, zone这种,都可能是默认的系统防火墙

[root@localhost ~]# iptables-save | egrep  "^:" | egrep -v "KUBE|CNI|DOCKER"
:FORWARD_IN_ZONES - [0:0]
:FORWARD_IN_ZONES_SOURCE - [0:0]
:FORWARD_OUT_ZONES - [0:0]
:FORWARD_OUT_ZONES_SOURCE - [0:0]

发现后手动关闭,以centos7为例

[root@localhost ~]# systemctl stop firewalld

iptables FORWARD转发链添加了REJECT规则,该规则在ACCEPT之上

图片

删除规则后正常

iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited

常见安全软件排查

qaxsafed  # 奇安信,
sangfor_watchdog # 深信服安全软件
YDservice  #qcloud安全软件,影响pod和docker桥接网络
Symantec #赛门铁克的安全软件
start360su_safed  #360安全软件
gov_defence_service
gov_defence_guard      #  ps aux | grep defence 
wsssr_defence_daemon   # 奇安信服务器安全加固软件
wsssr_defence_service
wsssr_defence_agent   #影响pod网络
kesl #卡巴斯基安全软件,影响容器通信 

名词解释: 和在windows环境下是一样的,xc背景下,linux的各类安全软件也非常多,如奇安信,深信服等
影响范围: 特定服务访问异常
问题定位: 以上所有排查方式都尝试过,则可往此方面排查
出现原因: 客户安全软件在内核网络层hook了对应函数,相关规则过滤了特定的应用数据库,导致异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/401329.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI Sora引领AI跳舞视频新浪潮:字节跳动发布创新舞蹈视频生成框架

OpenAI的Sora已经引起广泛关注,预计今年AI跳舞视频将在抖音平台上大放异彩。下面将为您详细介绍一款字节跳动发布的AI视频动画框架。 技术定位:这款框架采用先进的diffusion技术,专注于生成人类舞蹈视频。它不仅能够实现人体动作和表情的迁移…

如何监控云中的盲点以及进行处理

如今,云采用正在增长,因为它具有许多优势,例如在需要时轻松配置新资源。另外,通常还有短期资金成本节省。 如今,云采用正在增长,因为它具有许多优势,例如在需要时轻松配置新资源。另外&#xff…

CogFixtureTool(坐标系、校正与定位)

坐标系 任何VisionPro图像都支持一组坐标空间,为表达特定特征的位置提供数字框架。最有用的空间是根空间和用户空间,根空间将点与原始获取图像中的像素相关联,用户空间用于获得校准和固定空间中的特征位置和测量值。 根空间 图像的根空间…

公司如何防止终端核心文件数据\资料外泄、泄漏?

如何防止电脑文件被拷贝? 防止电子文件泄密是一个重要的信息安全问题。 PC端地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是一些建议的措施: 加强员工教育和培训:提高员工对电子文…

[ 2024春节 Flink打卡 ] -- 优化(draft)

2024,游子未归乡。工作需要,flink coding。觉知此事要躬行,未休,特记 资源配置调优内存设置 TaskManager内存模型 https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/config/ TaskManager 内存模型…

不破不立,那些年错过的Python

随着OpenAI的发展,Python的重要性不言而喻。不知你是否和我一样,不知道曾经说过多少次我要学Python,都没有执行起来… 近期我在知识库中更新了一波Python教程,选取了这一篇分享给大家。 前言 很多时候我们需要让程序变成交互性的…

12 Autosar_SWS_MemoryMapping.pdf解读

AUTOSAR中MemMap_autosar memmap-CSDN博客 1、Memory Map的作用 1.1 避免RAM的浪费:不同类型的变量,为了对齐造成的空间两份; 1.2 特殊RAM的用途:比如一些变量通过位掩码来获取,如果map到特定RAM可以通过编译器的位掩码…

HAL STM32 HW I2C DMA + SSD1306/SH1106驱动示例

HAL STM32 HW I2C DMA SSD1306/SH1106驱动示例 📍硬件I2C DMA驱动参考:https://blog.csdn.net/weixin_45065888/article/details/118225993 🔖本工程基于STM32F103VCT6,驱动程序独立,可以移植到任意STM32型号上使用。…

【Redis】理论进阶篇------浅谈Redis的缓存穿透和雪崩原理

一、缓存穿透 1、概念 缓存穿透(查不到数据),是指当用户想要查询数据的时候,会先去Redis中取命中,如果Redis中没有该数据,那么就会向数据库中去查找数据。如果数据库中也没有,则该次查询结果失…

(done) 什么是正定矩阵?Positive Definite Matrices

正定矩阵的定义:https://baike.baidu.com/item/%E6%AD%A3%E5%AE%9A%E7%9F%A9%E9%98%B5/11030459 正定矩阵的作用、验证视频:https://www.bilibili.com/video/BV1Ag411M76G/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c…

网络安全相关证书有哪些?

网络安全相关证书有哪些呢?了解一下! 1. CISP (国家注册信息安全专业人员) 说到CISP,安全从业者基本上都有所耳闻,算是国内权威认证,毕竟有政府背景给认证做背书,如果想在政府、国企…

使用Outlook邮箱保护您的隐私

在数字时代,我们的电子邮件地址就像是我们的数字身份证,它连接着我们的个人信息和网络世界。无论是注册新服务、购物还是预订餐桌,电子邮件地址都是我们身份的关键部分。然而,这也使我们容易受到垃圾邮件和隐私泄露的影响。但是&a…

SkyWalking之APM无侵入可观测原理分析

一、 简介(为什么需要用到可观测能力) 随着微服务的开发模式的兴起,早期的单体架构系统已拆分为很多的子系统,各个子系统封装为微服务,各服务间通过HTTP协议RESET API或者RPC协议进行调用。 在单体服务或者微服务较少的…

Halcon set_origin_pose变换的原理

为什么要对标定好的坐标系原点进行变换? 在Halcon相机标定的过程中,总是要用到set_origin_pose对世界坐标系进行变换,如果不使用set_origin_pose函数来显式设置坐标系的原点和姿态,默认情况下使用的是第一张图的位姿。这对于不需要进行复杂…

Spring Boot中的@Scheduled注解:定时任务的原理与实现

1. 前言 本文将详细探讨Spring Boot中Scheduled注解的使用,包括其原理、实现流程、步骤和代码示例。通过本文,读者将能够了解如何在Spring Boot应用中轻松创建和管理定时任务。 2. Scheduled注解简介 在Spring框架中,Scheduled注解用于标记…

【网站项目】167校园失物招领小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

ChatGPT在数据分析OKR计划中的应用

ChatGPT在数据分析OKR计划中的应用 ​ 现在大多数公司引入了OKR(objective & key result)计划,数据分析师也需要定期制定和检查自己的OKR计划。我们不仅可以利用ChatGPT辅助制定OKR计划,也可以让其对OKR计划内容进行调整、优…

探索Go语言中的HTTP路由和中间件

在Go语言中,HTTP路由和中间件是实现Web应用程序核心功能的关键组件。路由负责将传入的HTTP请求分发到适当的处理函数,而中间件则提供了一种在请求处理过程中插入额外逻辑的机制。 HTTP路由 在Go中,net/http标准库提供了基本的路由功能&…

01 Linux简介

Linux背景 发展史 linux从哪来的?怎么发展的?得从UNIX说起 1968年,一些来自通用电气公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Multics在多任务文件管理和用户连接中综合了许多新概念1969-1970年&am…

Sora--首个大型视频生成模型

Sora--首个大型视频生成模型 胡锡进于2024年2月20日认为:台当局怂了 新的改变世界模拟器视觉数据转换视频压缩时空补丁(Spacetime Laten Patches)视频生成扩展变压器算法和模型架构结语 胡锡进于2024年2月20日认为:台当局怂了 **T…