当前位置:   article > 正文

kubernetes:五步法定位 service问题_k8s如何查询某个servicename是否存在

k8s如何查询某个servicename是否存在

kuberbetes的网络设计该要总结,它是K8S服务的基础:

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

所有pod都可以通过IP与其他pod通信。

每个节点都可以看到所有pod,反之亦然。

pod可以看到所有服务。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

如下图
在这里插入图片描述
位于pod 1中的容器B可以直接将容器A寻址为localhost。

容器B可以通过其IP直接寻址pod 2(kubectl get pod-o wide)。我们知道这不是一个可靠的通信通道,因为pod 2 可能出现故障,一个新的pod可能出现在它的位置。我们不能追逐移动的目标。

下一步,容器B可以通过“service x”对POD2和POD3进行寻址,将它们的IP和负载平衡捆绑在一起;因此,在支持基于K8s的微服务应用程序方面发挥了关键作用。

下面说说具体的debug步骤:
1.检查service是否存在

kubectl get svc
  • 1

2.测试 service
请记住,在集群外部无法访问内部K8s ClusterIP服务。有两种方法可以测试它。首先,可以启动一个test pod,SSH到其中,然后尝试访问服务,如下所示:

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

在这里,我们使用alpine 启动一个pod,以测试服务从内部。

#works for http services
wget <servicename>:<httpport>
#Confirm there is a DNS entry for the service!
nslookup <servicename>
  • 1
  • 2
  • 3
  • 4

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

kubectl port-forward <service_name> 8000:8080
  • 1

之后通过 localhost:8000.访问服务

3:检查服务是否真正针对相关的pod
记住,K8s服务基于标签选择器将入站流量路由到其中一个pod。流量通过IP路由到目标pod。
所以,检查服务是否绑定到这些pod。

kubectl describe service <service-name> | grep Endpoints
  • 1

4.检查pod标签

确保K8s服务中的选择器与pods的标签匹配!

kubectl get pods --show-labels
kubectl describe svc <service_name>
  • 1
  • 2

在这里插入图片描述
5.确认服务端口与Pod匹配
最后,确保pods中的代码真正监听您为服务指定的targetPort(例如,如上图所示的端口8001)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/73313
推荐阅读
相关标签
  

闽ICP备14008679号