如何find处理请求的Kubernetes吊舱

我正在运行2个豆荚和一个Type:NodePort的服务来负载平衡豆荚之间的请求。 我想知道什么时候向服务发送一个请求,这个请求被转发到哪个服务器上。 有没有办法find这个,因为看着这个响应,看起来所有的请求都是由同一个pod来处理的。

kubernetes Service默认使用WRR进行负载平衡。 当你创build一个服务时, iptables规则将在节点中生成。

可以肯定的是,进入节点并运行iptables-save|less 。 search服务的名称。 在下面的例子中,一个服务microbot负载均衡微microbot部署与3个副本。 你的情况应该有2个条目,因为你只有2个豆荚。

 -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输出看起来不像上面那样,那很可能是你的服务configuration不正确。 就像海蒂所说的那样,豆荚与服务无关。

  1. 你可以看看应用程序的日志文件,如果你使用的话。 如果你在stdout中打印任何东西,使用kubectl logs <pod>查看消息。

  2. 对于testing,您可以在响应中包含pod主机名。

很可能是因为你的上下文和命名空间不足,你看不到日志。

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

然后在下面的命令中input和获得日志的最后100行的尾部kubectl --namespace <namespace> logs --tail 100 -f <pod>

也有一个远程机会,吊舱与服务没有关联。 要检查运行kubectl describe services --namespace <namespace> <service>并在Selector:部分查找应用程序名称

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