我正在使用Type:NodePort运行2个pod和一个服务,以便在pod之间对请求进行负载均衡。我想知道何时向服务发送请求,请求转发到哪个pod。有没有办法找到这个,因为查看响应,看起来所有请求都由同一个pod处理。
答案 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)
您可以查看应用程序日志文件(如果您使用的话)。如果您在标准输出中打印任何内容,请使用kubectl logs <pod>
查看该消息。
为了进行测试,您可以在响应中包含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:
部分
您还可以执行到容器中,查看该端口是否可访问或绑定到该容器本身。如果它没有收听或回答,很可能是因为该服务没有与命名空间中的应用程序相关联。