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

摘要:
这些服务是由多个pod组成的工作负载的抽象接口(主机+端口)。在K8S上支持基于微服务的应用程序起着至关重要的作用。虽然对Kubernetes内部网络结构的检查超出了本文的范围,但您可以启动Kubernettes测试pod,并尝试从pod访问其他pod、节点和服务。

作者:
Ram Rai,性能、可扩展性以及软件架构的爱好者

原文链接:
https://medium.com/better-programming/debug-your-kubernetes-service-in-5-easy-steps-1457974f024c

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

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

  • 在一个pod中的容器共享相同的网络空间和IP。

  • 所有的pod都能通过IP彼此通信。

  • 每个节点都能看到所有的Pod,反之亦然。

  • Pod可以看到所有的服务。

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

简单5步,轻松debug K8S服务!第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网络空间内并且你可以随意使用wegtpingnslookup之类的命令进行实验。例如,测试你的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 <servicename>:<httpport>

#Confirm there is a DNS entry for the service!
nslookup <servicename>

或者,你可以转发到本地计算机并在本地进行测试。

kubectl port-forward <service_name> 8000:8080

现在,你可以通过localhost:8000访问服务。

Step3:检查服务是否target相关Pod

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

kubectl describe service <service-name> | grep Endpoints

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

Step4:检查Pod标签

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

kubectl get pods --show-labels
kubectl describe svc <service_name>

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

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

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

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

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

这十分简单,为了让你更进一步深入了解和研究Kubernetes的网络世界,欢迎你阅读以下文章。

免责声明:文章转载自《简单5步,轻松debug K8S服务!》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HTML5 FileReaderSpringBoot如何使用Slf4j日志与logback-spring.xml配置详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Adobe Photoshop CC 2015安装激活

分享一下Adobe Photoshop CC 2015 安装激活步骤 工具/原料   xf-adobecc2015.exe Adobe Photoshop CC 2015官方原版 方法/步骤   1 安装之前先禁用网络,win7,win8右键右下角网络图标,打开网络和共享中心,更改适配器设置,右键本地连接,点禁用 2 打开Set-up...

Linux 网卡配置

编辑 删除 Linux中不同distribution中配置网络的方法大同小异。以下介绍RHEL6系列,SUSE11, Ubuntu12.04的配置 CentOS,RHEL ethtool -p eth0 10 操作完毕后,看哪块网卡的led灯在闪,eth0就对应着哪块网卡 /etc/sysconfig/network NETWORK...

BMIDE开发Soa Services提供给AWC端调用

   虽然AWC提供的API基本上足够使用,但是JS处理各种逻辑实在是麻烦,不熟悉JS的话远没有ITK来的方便,在这里记录一下如何在BMIDE中开发服务提供给AWC端调用。  大致分为三个步骤:   * BMIDE开发环境搭建   * 创建服务、开发、构建服务   * 从业务建模器 IDE 导入 SOA 模板 1、在BMIDE中创建一个新的业务建模器IDE...

开发人员必须知道的10个跨平台应用解决方案

移动跨平台开发已经成为现在开发很火的一个主流,比方说Tiggzi 号称最快速与最简单的创建 移动App 的基于云的生成器,它可以用来创建 HTML5 , jQuery Mobile 与 PhoneGap 应用。能够轻松的连接到 REST API ,能够导出 Android,iOS 或者移动 web 应用。该应用为收费应用,可以用Free版本进行体验。今天...

在 Linux 平台及 IPv4 环境中构建 IPv6局域网 测试环境

在 Linux 平台及 IPv4 环境中构建 IPv6 测试环境 1 IPv6简介 IPv6(Internet Protocol Version 6)作为 IPv4 的升级版本,它是作为一共软件升级安装在设备和操作系统中。为什么需要使用 IPv6,一个最直接的答案就是目前广泛应用的 IPv4 已经无法提供足够的 IP 地址来满足迅速增长的网络。IPv4 采...

win7怎样开启loopback接口(环回网卡)

本地loopback口用于和vmware通信,vmware桥接到Loopback网卡 https://jingyan.baidu.com/article/046a7b3eef6d69f9c27fa9ea.html 进行网络实验时,如果有个loopback环回网卡做帮助,实验会事半功倍。win7中开启loopback并不像xp中那样简单,笔者在自学cisco...