kubernetes:五步法定位 service问题

本文深入探讨Kubernetes(K8S)的网络设计,介绍pod间如何通过共享网络空间和相同IP进行通信,并详细阐述了通过服务(service)实现负载均衡及微服务支持的方法。此外,还提供了实用的debug步骤,帮助读者解决K8S网络配置中常见的问题。

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

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

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

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

pod可以看到所有服务。

如下图
在这里插入图片描述
位于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

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

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

在这里,我们使用alpine 启动一个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.访问服务

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

kubectl describe service <service-name> | grep Endpoints

4.检查pod标签

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值