如何找到处理请求的Kubernetes pod

kninwzqo  于 11个月前  发布在  Kubernetes
关注(0)|答案(4)|浏览(115)

我正在运行2个pod和一个服务,类型为:NodePort,以平衡pod之间的请求。我想知道当我向服务发送请求时,请求被转发到哪个pod。有没有办法找到这个,因为看响应,它看起来像所有请求都由同一个pod处理。

aiqt4smr

aiqt4smr1#

kubernetes Service默认使用WRR进行负载均衡。当您创建Service时,iptables规则将在节点中生成。
为了确保这一点,使用ssh进入节点并运行iptables-save|less。搜索服务的名称。在下面的示例中,Service microbot负载平衡microbot部署与3个副本。在您的案例中应该有2个条目,因为您只有2个pod。

-A KUBE-SVC-LX5ZXALLN4UQ7ZFL -m comment --comment "default/microbot:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-OZCDYTQTC3KQGJK5
-A KUBE-SVC-LX5ZXALLN4UQ7ZFL -m comment --comment "default/microbot:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-SKIRAXBCCQB5R4MV
-A KUBE-SVC-LX5ZXALLN4UQ7ZFL -m comment --comment "default/microbot:" -j KUBE-SEP-SPMPNZCOIJIRSNNQ

字符串
如果iptables的输出与上面的不一样,很可能是您的Service配置不正确。就像Heidi所说的那样,Pod与Service没有关联。

at0kjp5o

at0kjp5o2#

您可以从运行中的pod的yaml文件中获取podIP,它会因每个pod而异。


的数据
现在你可以检查所有传入请求的入口日志。通过匹配这个podIP值来过滤日志,它将在日志中显示为serverIp。参考下面的截图



通过这种方式,您可以找到哪个K8s pod处理了请求。

bgibtngc

bgibtngc3#

很可能是因为您的上下文和缺少名称空间,您无法看到日志。
尝试kubectl get pods -o wide --all-namespaces | grep <pod>获取pod所在命名空间和节点IP地址信息。
然后将和输入到下面的命令中,以获取日志kubectl --namespace <namespace> logs --tail 100 -f <pod>的最后100行的尾部
也有可能pod与服务没有关联。要检查,请运行kubectl describe services --namespace <namespace> <service>并在Selector:部分中查找应用程序名称
您也可以exec到容器中,查看端口是否可访问或绑定到pod本身。如果它没有侦听或响应,很可能是由于服务与命名空间中的应用程序没有关联。

lmvvr0a8

lmvvr0a84#

1.你可以查看应用程序日志文件,如果你正在使用的话。如果你在stdout中打印任何东西,使用kubectl logs <pod>查看消息。
1.为了测试,您可以在响应中包含pod主机名。

相关问题