我正在运行2个pod和一个服务,类型为:NodePort,以平衡pod之间的请求。我想知道当我向服务发送请求时,请求被转发到哪个pod。有没有办法找到这个,因为看响应,它看起来像所有请求都由同一个pod处理。
aiqt4smr1#
kubernetes Service默认使用WRR进行负载均衡。当您创建Service时,iptables规则将在节点中生成。为了确保这一点,使用ssh进入节点并运行iptables-save|less。搜索服务的名称。在下面的示例中,Service microbot负载平衡microbot部署与3个副本。在您的案例中应该有2个条目,因为您只有2个pod。
Service
iptables
iptables-save|less
microbot
-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没有关联。
at0kjp5o2#
您可以从运行中的pod的yaml文件中获取podIP,它会因每个pod而异。
podIP
的数据现在你可以检查所有传入请求的入口日志。通过匹配这个podIP值来过滤日志,它将在日志中显示为serverIp。参考下面的截图
serverIp
的通过这种方式,您可以找到哪个K8s pod处理了请求。
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本身。如果它没有侦听或响应,很可能是由于服务与命名空间中的应用程序没有关联。
kubectl get pods -o wide --all-namespaces | grep <pod>
kubectl --namespace <namespace> logs --tail 100 -f <pod>
kubectl describe services --namespace <namespace> <service>
Selector:
lmvvr0a84#
1.你可以查看应用程序日志文件,如果你正在使用的话。如果你在stdout中打印任何东西,使用kubectl logs <pod>查看消息。1.为了测试,您可以在响应中包含pod主机名。
kubectl logs <pod>
4条答案
按热度按时间aiqt4smr1#
kubernetes
Service
默认使用WRR进行负载均衡。当您创建Service时,iptables
规则将在节点中生成。为了确保这一点,使用ssh进入节点并运行
iptables-save|less
。搜索服务的名称。在下面的示例中,Servicemicrobot
负载平衡microbot
部署与3个副本。在您的案例中应该有2个条目,因为您只有2个pod。字符串
如果
iptables
的输出与上面的不一样,很可能是您的Service配置不正确。就像Heidi所说的那样,Pod与Service没有关联。at0kjp5o2#
您可以从运行中的pod的yaml文件中获取
podIP
,它会因每个pod而异。的数据
现在你可以检查所有传入请求的入口日志。通过匹配这个
podIP
值来过滤日志,它将在日志中显示为serverIp
。参考下面的截图的
通过这种方式,您可以找到哪个K8s pod处理了请求。
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本身。如果它没有侦听或响应,很可能是由于服务与命名空间中的应用程序没有关联。
lmvvr0a84#
1.你可以查看应用程序日志文件,如果你正在使用的话。如果你在stdout中打印任何东西,使用
kubectl logs <pod>
查看消息。1.为了测试,您可以在响应中包含pod主机名。