如何联系kubernetes中同一节点中一个服务的随机pod(同一pod的多个实例)
我只有一个节点。在这个节点上,我有2个多实例应用程序(每个3个pod) 应用程序A需要联系应用程序B 我的问题是:应用程序A始终与应用程序B的同一个pod联系。 我想要备用pod(例如循环中的负载平衡) 例如: 第一个请求:AppPod3响应 第二个请求:AppPod1响应 第三个请求:AppPod2响应 我怎么能做到 非常感谢你的帮助。。。 你可以在下面看到我的应用程序B配置 我试图为sessionaffinity设置timeoutSeconds,但它不起作用如何联系kubernetes中同一节点中一个服务的随机pod(同一pod的多个实例),kubernetes,networking,devops,kubernetes-ingress,kubernetes-pod,Kubernetes,Networking,Devops,Kubernetes Ingress,Kubernetes Pod,我只有一个节点。在这个节点上,我有2个多实例应用程序(每个3个pod) 应用程序A需要联系应用程序B 我的问题是:应用程序A始终与应用程序B的同一个pod联系。 我想要备用pod(例如循环中的负载平衡) 例如: 第一个请求:AppPod3响应 第二个请求:AppPod1响应 第三个请求:AppPod2响应 我怎么能做到 非常感谢你的帮助。。。 你可以在下面看到我的应用程序B配置 我试图为sessionaffinity设置timeoutSeconds,但它不起作用 kind: Deployment
kind: Deployment
metadata:
name: AppB
spec:
selector:
matchLabels:
app: AppB
replicas: 3
template:
metadata:
labels:
app: AppB
spec:
containers:
- name: AppB-container
image: image
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: AppB
labels:
app: svc-AppB
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: AppB
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 1```
@user3683760您必须在部署中应用负载平衡策略。Kube有很多选择来平衡服务之间的流量。我建议大家尽量少用一些模式,看看什么最适合你的需要。默认情况下,该服务应该以循环方式使用后端播客。如果POD是无状态的,则不需要sessionAffinity设置;否则,您将根据源ID重定向到同一pod 也许您可以将日志添加到pod中,并观察它们何时被访问。对服务的后续调用应以循环方式重定向到POD,并使用最少的服务配置 更新:这是我正在使用的部署。它按照预期平衡豆荚;发送到服务clustrip:port的每个curl请求都在不同的pod上结束。我的k8s安装是本地的,v1.18.3
apiVersion: apps/v1
kind: Deployment
metadata:
name: baseDeployment
labels:
app: baseApp
namespace: nm-app1
spec:
replicas: 2
selector:
matchLabels:
app: baseApp
template:
metadata:
labels:
app: baseApp
spec:
containers:
- name: baseApp
image: local-registry:5000/baseApp
ports:
- containerPort: 8080
---
kind: Service
apiVersion: v1
metadata:
name: baseService
namespace: nm-app1
spec:
selector:
app: baseApp
ports:
- protocol: TCP
port: 80
targetPort: 8080
谢谢你的回答,但我已经准备好尝试这个,但它不是那样工作。我在应用程序B上安装了记录器,在通话间隔1秒时启动了40个请求(从应用程序A到应用程序B)。我有来自应用程序B同一个pod的所有时间记录器我使用GRPC流,但是,我创建了40个新的GRPC流你的url是什么?或者?它是baseService的集群。在我的例子中,
kubectl get svc-n nm-app1
将在nm-app1名称空间中列出所有具有集群的服务。我已经尝试了你的答案,它是有效的。事实上,在我的例子中,appa是一个控制台应用程序,它使用AppB(python)打开一个GRPC流。这种联系保持了几分钟。如果我用AppB启动另一个流(新的)GRPC,它始终是AppA联系的同一个pod。我如何联系其他pod?因为如果我理解的话,AppA总是联系AppB的同一个pod,因为他在这个pod上有一些GRPC流活动..查看这篇关于GRPC负载平衡的博文:这回答了你的问题吗?