调试Kubernetes Service 5个简单的步骤

栏目: IT技术 · 发布时间: 4年前

——了解Kubernetes的网络和调试服务

调试Kubernetes Service 5个简单的步骤

在上一篇文章中,我们调试了Kubernetes pods。现在,该检查Kubernetes服务(service)了,这些服务是工作负载的抽象接口(主机+端口),工作负载可能由几个pod组成。

在深入研究调试之前,先简要介绍一下作为K8s service基础的网络。

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

• 所有的pod都可以通过IP与其他pod进行通信。

• 每个节点(node)都可以看到所有的pod,反过来也是一样的。

• pod可以看到所有的service。

在实践中这意味着什么?

调试Kubernetes Service 5个简单的步骤

K8s网络

图中:

• 容器B位于pod 1中,以localhost直连容器A。

• 容器B可以通过它的IP直接访问pod 2 (kubectl get pod –o wide)。我们知道这不是一个可靠的通信方式,因为pod 2可能会发生故障,继而会生成一个新的pod。因此无法追踪定位一个会变化的目标。

• 其次,容器B可以通过“service x”连接到pod 2和pod 3,它捆绑了它们的IP以及负载均衡;因此,在K8s里,service在支持基于微服务的应用程序方面起着至关重要的作用。

尽管对K8s的网络内部机制的研究超出了本文的范围,但我还是打算发表一些相关的参考资料以供进一步研究。

那么现在,我鼓励大家花一点时间来试验和理解Kubernetes中的网络关系。

例如,你可以启动一个K8s测试Pod,并从这个Pod尝试连接其他Pod、Node、Service!这里看到的命令是在一个pod中打开一个Linux shell。

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

我们现在处于K8s的网络空间内,而且可以使用wget、ping、nslookup等命令进行实验!在K8s集群中测试一些之前列出来的网络需求。例如,nslookup , ping

现在回到我们的主题,故障排除K8s service,它本质上其实就是一个网络结构。

步骤1:检查服务(service)是否存在

Kubectl get svc

如果服务不存在,可能是服务创建失败,请检查service定义。

步骤2:测试服务(service)

请记住,在K8s内部,ClusterIP类型的service是不能在集群之外访问的。有两种方法可以测试它。首先,你可以启动一个测试pod, SSH到它,并尝试访问你的service,就像这样:

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

在这里,我们开始一个alpine Docker镜像作为一个pod,从service内部进行测试。

#works for http services

wget :#Confirm there is a DNS entry for the service!

nslookup

或者,你可以将端口转发到本地机器并在本地进行测试。

kubectl port-forward 8000:8080

现在可以将service定位为localhost:8000。

步骤3:检查服务(service)是否对映相关Pod

请记住,K8sservice根据标签选择器将入站流量路由到其中一个pod。流量通过IP路由到目标Pod。

因此,检查service是否绑定到这些Pod上。

kubectl describe service | grep Endpoints

你应该看到与列出的工作负载相关的所有pod的IP。如果没有,转到步骤4。

步骤4:检查Pod标签

请确保K8s service的选择器(selector)与pod的标签匹配!

kubectl get pods --show-labels

kubectl describe svc

在下面的截图中,你可以在右边看到pod的标签。四个pod分别被标记为app=tinywebsite和tier=frontend,它们与下面描述的service选择器相匹配。

在这四个匹配的pod中,只有三个在运行,在高亮显示的那一行可以看到,IP作为服务的Endpoints,而且还可以在“IP”列中看到相同的IP。

调试Kubernetes Service 5个简单的步骤

步骤5:确认service端口与你的Pod匹配

最后,确保pod中的代码实际上监听了你为service指定的targetPort(例如,如上面的屏幕截图所示,端口8001)!

这很容易,要进一步研究和深入K8s网络的世界,请参阅下面的文章。但是,假如你的K8s集群由一个云服务托管,该供应商应该负责去处理任何底层集群级别的问题。

感谢你的阅读!

参考

在Kubernetes部署一个应用( https://medium.com/better-prog ... 2e533

调试service( https://kubernetes.io/docs/tas ... exist

Kubernetes网络( https://kubernetes.io/docs/con ... king/

原文链接: https://medium.com/better-prog ... f024c


以上所述就是小编给大家介绍的《调试Kubernetes Service 5个简单的步骤》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

互联网思维的企业

互联网思维的企业

[美] Dave Gray Thomas Vander Wal / 张 玳 / 人民邮电出版社 / 2014-4-25 / 59.00元

本书指导企业跳出仅更新自家产品和服务的怪圈,在管理方式、组织结构和公司文化方面进行变革,建立具有互联网思维的企业。书中通过大量图示和示例阐述了互联式公司必需的基础元素(透明的互动和交流平台,推崇自治和应变的组织结构,实验和学习的企业文化),以及一套鼓励员工创新的新式管理和奖励体系。最后,讨论板可方便你在工作时间和同事探讨如何增加公司的互联程度。一起来看看 《互联网思维的企业》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具