简单5步,轻松debug K8S服务!
下周二晚上8点,为你全面解读Istio最新发布的两个新版本!包括Istio架构演化、新架构解读以及新特性的实战demo噢!
点击【阅读原文】或访问以下链接即可预约报名!
http://z-mz.cn/1BGJE
在我们深入探索debug方法之前,我们先简单回顾一下网络,这是Kubernetes服务的基础。
- 在一个pod中的容器共享相同的网络空间和IP。
- 所有的pod都能通过IP彼此通信。
- 每个节点都能看到所有的Pod,反之亦然。
- Pod可以看到所有的服务。
那么,在实践中这些意味着什么呢?
K8S网络(来源:wikipedia.org)
- 位于Pod1中的容器B可以直接作为localhost寻址容器A
-
容器B可以通过其IP直接寻址Pod2( kubectl get pod -o wide
)。我们知道当pod2出现故障时着不是一个可靠的通信渠道,并且一个新的pod可以出现在其位置中。但是我们无法追逐不断变化的目标。 - 接下来,容器B可以通过Service x访问pod 2和pod 3,后者将它们的IP与负载均衡捆绑在一起;因此,在K8S上支持基于微服务的应用程序起着至关重要的作用
尽管对Kubernetes的内部网络结构的检查不在本文的讨论范围内,但我稍后会发布一些参考资料以供大家进一步研究。
kubectl run -it networktest --image=alpine bin/ash --restart=Never --rm
现在你在Kubernetes网络空间内并且你可以随意使用wegt、ping、nslookup之类的命令进行实验。例如,测试你的Kubernetes集群中先前列出的网络要求, nslookup , ping
。
现在让我们回到我们的话题,troubleshooting Kubernetes服务,这实际上是一种网络结构。
Step1:检查服务是否存在
kubectl get svc
如果服务不存在,应该是服务创建出现了故障,因此要去检查你的服务定义。
Step2:测试你的服务
kubectl run -it testpod --image=alpine bin/ash --restart=Never --rm
在本文中我们启动一个alpine Docker镜像作为pod来从其内部测试服务:
#works for http services wget :
#Confirm there is a DNS entry for the service! nslookup
或者,你可以转发到本地计算机并在本地进行测试。
kubectl port-forward 8000:8080
现在,你可以通过 localhost:8000
访问服务。
Step3:检查服务是否target相关Pod
kubectl describe service | grep Endpoints
执行上述命令之后,你应该看到与列出的工作负载相关的所有Pod的IP。如果没有看到,请执行Step4。
Step4:检查Pod标签
kubectl get pods --show-labels kubectl describe svc
从下面的截图的中可以看到,pod的标签在右边。四个pod被标记为 app=tinywebsite
和 tier=frontend
,这些标签与下面“ described
”的服务selector相匹配。
在这四个匹配的Pod中,只有三个正在运行,其IP在突出显示的行中被列为服务的端点(endpoint)。你还可以额在IP列中看到相同的IP。
Step5:确认服务端口与pod相匹配
最后,确保在你的pod中的代码能够监听到你为服务指定的targetPort(例如,你在上方截图中看到的port8001)!
这十分简单,为了让你更进一步深入了解和研究Kubernetes的网络世界,欢迎你阅读以下文章。
参考阅读
-
在Kubernetes中部署一个应用程序:
https://medium.com/better-programming/a-practical-step-by-step-guide-to-understanding-kubernetes-d8be7f82e533 -
Debug服务:
https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/#does-the-service-exist -
Kubernetes网络:
https://kubernetes.io/docs/concepts/cluster-administration/networking/
作者:
Ram Rai,性能、可扩展性以及软件架构的爱好者
原文链接:
https://medium.com/better-programming/debug-your-kubernetes-service-in-5-easy-steps-1457974f024c


推荐阅读

About Rancher Labs
Rancher Labs由CloudStack之父梁胜创建。旗舰产品Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为2018年全球容器管理平台领导厂商,被Gartner评为2017年全球最酷的云基础设施供应商。
目前Rancher在全球拥有超过三亿的核心镜像下载量,并拥有包括CCTV、中国联通、华为、中国平安、中国人寿、厦门航空、上汽集团、丰田、中联重科、迪斯尼、IBM、Cisco、Nvidia、辉瑞制药等全球著名企业在内的共40000家企业客户。
Rancher已于2020年2月完成了中国本土化和国产化,从2020年3月1日开始,Rancher在中国大陆及港澳台地区的业务,均由全中资公司云澈信息技术(深圳)有限公司承载,并面向中国企业客户提供中国企业版Rancher产品和基于K3s的“软件定义边缘”解决方案。
点击【阅读原文】,1小时全面了解Istio!
↓↓↓