开发者社区> 云栖号资讯小哥> 正文

简单5步,轻松debug K8S服务!

简介:
+关注继续查看

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


在Kubernetes中,服务是一个核心概念。在本文中,将介绍如何调试K8S服务,这些服务是由多个Pod组成的工作负载的抽象接口(主机+端口)。

在我们深入探索debug方法之前,我们先简单回顾一下网络,这是Kubernetes服务的基础。

  • 在一个pod中的容器共享相同的网络空间和IP。
  • 所有的pod都能通过IP彼此通信。
  • 每个节点都能看到所有的Pod,反之亦然。
  • Pod可以看到所有的服务。

那么,在实践中这些意味着什么呢?

1

在图中:

  • 位于Pod1中的容器B可以直接作为localhost寻址容器A
  • 容器B可以通过其IP直接寻址Pod2(kubectl get pod -o wide)。我们知道当pod2出现故障时着不是一个可靠的通信渠道,并且一个新的pod可以出现在其位置中。但是我们无法追逐不断变化的目标。
  • 接下来,容器B可以通过Service x访问pod 2和pod 3,后者将它们的IP与负载均衡捆绑在一起;因此,在K8S上支持基于微服务的应用程序起着至关重要的作用

尽管对Kubernetes的内部网络结构的检查不在本文的讨论范围内,但我稍后会发布一些参考资料以供大家进一步研究。

对于当下,我还是鼓励你花费一点时间在实践中经历和理解Kubernetes中的网络。例如,你可以启动一个Kubernetes测试pod并且尝试从该pod中访问其他pod、节点和服务。此处显示的命令将在Pod内弹出一个Linux shell。

kubectl run -it networktest --image=alpine bin/ash --restart=Never --rm

现在你在Kubernetes网络空间内并且你可以随意使用wegt、ping、nslookup之类的命令进行实验。例如,测试你的Kubernetes集群中先前列出的网络要求,nslookup <servicename>, ping <PodIP>。

现在让我们回到我们的话题,troubleshooting Kubernetes服务,这实际上是一种网络结构。

Step1:检查服务是否存在

kubectl get svc

如果服务不存在,应该是服务创建出现了故障,因此要去检查你的服务定义。

Step2:测试你的服务

请记住,一个内部的Kubernetes ClusterIP服务是无法在集群外部访问的。因此,有两种方法可以对其进行测试。方法一,你可以启动一个测试Pod,通过SSH进入该pod,然后尝试像这样访问你的服务:

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

Kubernetes服务会根据标签selector将入站流量路由到其中一个pod,流量通过其IP路由到目标Pod。所以,请检查服务是否绑定到那些pod。

kubectl describe service  | grep Endpoints

执行上述命令之后,你应该看到与列出的工作负载相关的所有Pod的IP。如果没有看到,请执行Step4。

Step4:检查Pod标签

确保在Kubernetes服务中的selector与pod的标签相匹配。

kubectl get pods --show-labels
kubectl describe svc

从下面的截图的中可以看到,pod的标签在右边。四个pod被标记为app=tinywebsite和tier=frontend,这些标签与下面“described”的服务selector相匹配。

在这四个匹配的Pod中,只有三个正在运行,其IP在突出显示的行中被列为服务的端点(endpoint)。你还可以在IP列中看到相同的IP。

2

Step5:确认服务端口与pod相匹配

最后,确保在你的pod中的代码能够监听到你为服务指定的targetPort(例如,你在上方截图中看到的port8001)!

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-06-10
本文作者:Ram Rai
本文来自:“dockone”,了解相关信息可以关注“dockone”

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《基于阿里云K8S服务快速构建DevOps流水线 资料下载》电子版地址
基于阿里云K8S服务快速构建DevOps流水线 资料下载
96 0
非容器应用与 K8s 工作负载服务网格化实践|学习笔记(二)
快速学习非容器应用与 K8s 工作负载服务网格化实践
79 0
非容器应用与 k8s工作负载的服务网格化实践(二)|学习笔记
快速学习非容器应用与 k8s工作负载的服务网格化实践(二)
56 0
非容器应用与K8s工作负载的服务网格化实践|学习笔记
快速学习非容器应用与K8s工作负载的服务网格化实践
52 0
k8s-服务(clusterIP/NodePort/LoadBanlance)
clusterIP 类型的服务 NodePort 类型的服务 LoadBanlance 类型的服务
377 0
k8s下的eureak服务注册失败(cannot execute request on any known server)解决
k8s下的eureak服务注册失败(cannot execute request on any known server)解决
461 0
K8S原理剖析:Pod、工作负载与服务
K8S原理剖析:Pod、工作负载与服务
442 0
k8s 上 go 服务实战: 扩容 发版更新 回滚 平滑重启
我是 dayday, 读书写作敲代码, 永远在路上 感谢 [网管叨bi叨 - #Kubernetes学习笔记](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUzNTY5MzU2MA==&action=getalbum&album_id=1394839706508148737&scene=173#wechat_redirect "网管叨bi叨 - #Kubernetes学习笔记")
246 0
k8s 上 go 服务实战: 使用 helm 快速构建云原生应用
伴随着云原生生态的不断发展与壮大, 标准/工具链越发的成熟, 服务的部署与运维会越来越 easy, 一起期待更美好的明天~ 我是 dayday, 读书写作敲代码, 永远在路上
322 0
k8s容器云架构之dubbo微服务—K8S(04)核心插件-coredns服务
博客地址:https://www.cnblogs.com/sseban 哔哩哔哩:https://space.bilibili.com/394449264 K8S核心插件-coredns服务
221 0
k8s容器云架构之dubbo微服务—K8S(09)交付实战-通过流水线构建dubbo服务
博客地址:https://www.cnblogs.com/sseban 哔哩哔哩:https://space.bilibili.com/394449264 k8s交付实战-流水线构建dubbo服务
294 0
k8s容器云架构之dubbo微服务—K8S(05)核心插件-ingress(服务暴露)控制器-traefik
K8S核心插件-ingress(服务暴露)控制器-traefik 博客地址:https://www.cnblogs.com/sseban 哔哩哔哩:https://space.bilibili.com/394449264
277 0
traefik配置用户登录,限制K8S的web服务访问
像Elastic-APM, Traefik-Dashboard等页面,是没有用户登录限制的,如果我们希望给他们加上用户登录限制,我们需要在traeifk里给对应的ingress添加登录用的Middleware,那么该如何添加呢?本文以给K8S部署的traefik dashboard为例进行添加
418 0
+关注
云栖号资讯小哥
云栖号小编在此 ^o^
文章
问答
视频
相关电子书
更多
云迁移与云容灾-基于弹性裸金属(神龙)服务器K8S容器迁云最佳实践
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像