容器coredns问题排查整理

虚拟现实
• 阅读 2297

简介: 容器coredns问题排查整理

容器coredns问题排查整理

1.问题描述

客户侧在变更容器安全组之后出现网络不通。

2.问题排查

1)接到客户反馈 Kubernetes 托管版集群出现网络问题,电话沟通后授权进行查看:Pod 网络通畅,域名解析出现异常;(ping IP 可通,但ping域名不通)
2)结合客户操作,怀疑与安全组配置有关,尝试进一步排查安全组问题。详细排查无问题后,决定重启 coredns POD。重启后 coredns POD 漂移到其它 ECS上,集群中大部分主机恢复正常;
3)确认coredns原宿主机存在网络连接问题,将该主机踢出集群后,集群恢复正常;
4)经过环境测试后最终定位原因在于客户侧误解 Kubernetes 集群安全组页面“解绑实例”功能为解绑安全组,导致误操作解绑和绑定ENI 网卡,同时产品健康检查机制存在缺陷,无法探测到辅助网卡的链路问题,导致问题无法快速发现并解决,最终导致客户集群网络无法联通。

3.优化改进

1)优化安全组页面存在“解绑实例”功能文案,同时增加由 Kubernetes 集群创建的网卡在用户解绑时的风险提示,避免客户误操作引发业务中断;
2)优化健康检查机制,确保辅助网卡链路异常场景能够被快速发现。

4.问题复现

4.1环境准备

1)kubernetes托管版集群,网络模式为Terway,kube-proxy代理模式为IPVS,四节点,需要创建测试的应用pod;

容器coredns问题排查整理

图1:初始环境

2)查看coredns所在的宿主机,目前该pod存在于201、200机器上;

容器coredns问题排查整理

图2:coredns pod

4.2具体操作

1)模拟客户侧的操作在安全组界面“解绑coredns所在主机的辅助网卡”;
登录ECS控制台--实例--选择机器--本实例弹性网卡界面查看
容器coredns问题排查整理

图3:实例弹性网卡

跳转至安全组界面---选择集群的安全组实例id---安全组内弹性网卡--搜索刚刚查找的弹性网卡--解绑实例
容器coredns问题排查整理

图4:安全组内弹性网卡

2)解绑完成之后再次将辅助网卡绑定至原有实例;
容器coredns问题排查整理

图5:查看原有实例网卡

3)登录任意一个应用pod内,利用dig baidu.com测试解析是否正常
kubectl exec -it centos-deployment-75765fbb54-x5f6v -- /bin/bash,进入pod内:
容器coredns问题排查整理

图6:pod内测试

上图就是一开始客户侧遇到的现象:ping域名不通,ping IP可以通。

4)为什么解绑之后重新绑定至原有实例还是不可以呢?原因就在于解绑后重新绑定网卡后该网卡的state仍然是DOWN状态,需要重新up网卡;
up网卡:ip link set eth1 up
容器coredns问题排查整理

图7:up网卡

网卡在被up后,再次进入pod进行测试,会发现解析就可以正常运行了。
容器coredns问题排查整理

图8:up网卡后测试

其实kube-dns后有两个coredns POD,那么这两个coredns是采取什么策略去提供解析服务呢?

5.问题分析

利用ipvsadm可以看到coredns是按照rr的方式去提供服务的,并且设置了session的超时保持时间是10800(超时时间可以通过查看kube-dns的yaml文件):
容器coredns问题排查整理

图9:kube-dns的session时间

正是因为上述kube-dns的session的保持时间设置了10800,导致域名解析的请求一直都是寻找坏的coredns POD(坏coredns也就是被解绑后重新绑定辅助网卡的那台机器上的coredns),所以客户侧在解绑操作后续一直没有无法进行正常解析,类似于下面的现象:
容器coredns问题排查整理

图10:长ping失败现象

测试下去掉该session设置,再次进行域名解析测试(修改kube-dns svc的yaml中的sessionAffinity为None):
容器coredns问题排查整理

图11:svc yaml

容器coredns问题排查整理

图12:dig图

容器coredns问题排查整理

图13:tcpdump抓包

所以修改sessionAffinity为None后,第一次的解析会走好的coredns,第二次请求就会走坏的coredns,这也就是证明coredns以rr策略提供服务的。
容器coredns问题排查整理

图14:长ping正常现象

我们是阿里云智能全球技术服务-SRE团队,我们致力成为一个以技术为基础、面向服务、保障业务系统高可用的工程师团队;提供专业、体系化的SRE服务,帮助广大客户更好地使用云、基于云构建更加稳定可靠的业务系统,提升业务稳定性。我们期望能够分享更多帮助企业客户上云、用好云,让客户云上业务运行更加稳定可靠的技术,您可用钉钉扫描下方二维码,加入阿里云SRE技术学院钉钉圈子,和更多云上人交流关于云平台的那些事。

原文链接
本文为阿里云原创内容,未经允许不得转载。

点赞
收藏
评论区
推荐文章
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
捉虫大师 捉虫大师
3年前
Java问题排查分享
前言最近翻看以前写的PPT,发现了在2019年做的一次技术分享,关于Java问题排查,由于没什么公司机密可言,整理下分享给大家线上问题处理流程直接放PPT截图吧,现在看来依然不过时问题排查可从三个方面入手知识:有些问题,思考一下就有答案,就像传说中多隆那样,回忆下就知道第83行代码有问题工具:当然不是每个人都能做到过目不忘,也有可能这代码完全
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Stella981 Stella981
3年前
Service starting has been prevented by iaware or trustsbase sInfo ServiceInfo 解决方法
问题:ActivityManager:ServicestartinghasbeenpreventedbyiawareortrustsbasesInfoServiceInfo{c50ea35xxx.xxx.xxx.ServiceName}问题描述,该问题再华为部分手机升级到Android10.1之后,启动服务会
Stella981 Stella981
3年前
JS 苹果手机日期显示NaN问题
问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
MySQL 的这个 BUG,坑了多少人?
来源:cloud.tencent.com/developer/article/1367681内容整理转自Java基基学习MySQL可以看头条文章问题描述内核问题排查背景知识1背景知识2现场分析及复现验证解决方案
Stella981 Stella981
3年前
CentOS7下简单几步操作自建DNS(使用coredns快速搭建简单dns服务器)
本文介绍了如何使用CoreDNS快速搭建一个简单DNS服务器,从而对CoreDNS有一个初步的认识。1、下载coredns通过coredns的github,下载coredns。coredns的release版本地址:https://github.com/coredns/coredns/releases(https://www.oschina.ne
Stella981 Stella981
3年前
Kubernetes1.15 部署 coredns
coredns.yaml文件如下所示__MACHINE_GENERATED_WARNING__apiVersion:v1kind:ServiceAccountmetadata:name:corednsnamespace:kubesystemlabels
DevOpSec DevOpSec
1年前
lxcfs容器资源视图隔离 for k8s
k8s版本1.25.6,业务k8s容器化,虚机里进程迁移到容器里后,运维在执行freemtop等命令排查问题时一脸迷惑,显示内存还有很多结果pod的容器被oom或CPU资源显示很多核且空闲很多资源进程却运行很慢,我们看到的资源视图是物理机的而非我们做了限定pod里容器的资源,这给研发和运维排查问题带来一定的干扰。
【稳定性】揭秘团队快速排查问题的三字经,你学会了吗? | 京东物流技术团队
基于日常实际工作经验和个人心得,我整理了一份团队遇到故障问题或者疑似问题快速排查的三字经清单及正确✅案例和错误❌案例。这份清单将帮助你在遇到问题时进行快速排查,无需担心在高压环境下忙中出错,遗漏关键步骤环节。掌握这份清单,你将能够更好地掌控现场,从而避免因疏忽而造成的损失