如何找到处理请求的Kubernetes pod

时间:2017-06-14 16:28:28

标签: docker kubernetes

我正在使用Type:NodePort运行2个pod和一个服务,以便在pod之间对请求进行负载均衡。我想知道何时向服务发送请求,请求转发到哪个pod。有没有办法找到这个,因为查看响应,看起来所有请求都由同一个pod处理。

3 个答案:

答案 0 :(得分:2)

默认情况下,kubernetes Service将使用WRR进行负载平衡。创建服务时,将在节点中生成iptables规则。

确保,ssh进入节点并运行iptables-save|less。搜索服务的名称。在下面的示例中,服务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输出与上述不同,则可能是您的服务配置不正确。与Heidi所说的一样,pod与服务无关。

答案 1 :(得分:0)

  1. 您可以查看应用程序日志文件(如果您使用的话)。如果您在标准输出中打印任何内容,请使用kubectl logs <pod>查看该消息。

  2. 为了进行测试,您可以在响应中包含pod hostname。

答案 2 :(得分:0)

很可能是因为您的上下文和缺少命名空间,您无法查看日志。

尝试kubectl get pods -o wide --all-namespaces | grep <pod>以获取pod所在的命名空间和节点IP地址的信息。

然后输入并进入下面的命令,以获得日志最后100行的运行尾部 kubectl --namespace <namespace> logs --tail 100 -f <pod>

还有一个远程机会,即pod与服务无关。要检查运行kubectl describe services --namespace <namespace> <service>并在Selector:部分

中查找应用名称

您还可以执行到容器中,查看该端口是否可访问或绑定到该容器本身。如果它没有收听或回答,很可能是因为该服务没有与命名空间中的应用程序相关联。