Kubernetes中的公开服务和副本集关系
我有一个问题,当有多个豆荚的复制品时,库伯内特斯如何决定服务豆荚 例如,假设有一个web应用程序作为多个pod副本在k8s集群上运行,它们由服务公开 当客户机发送请求时,它将转到服务和kube代理。但是kubernetes在何时何地决定哪个pod应该为请求服务 我想知道kubernetes在这件事上的内部情况。我们能控制吗?我们是否可以根据客户请求和自定义条件来决定应该提供哪个pod 我们是否可以根据客户请求和自定义条件来决定应该提供哪个pod 由于kube代理在L4负载平衡设备上工作,因此您可以基于客户端IP控制会话。它不读取客户端请求的标头 您可以使用服务obejct中的service.spec.sessionAffinityConfig字段控制会话 下面的命令提供了解释Kubernetes中的公开服务和副本集关系,kubernetes,kubectl,minikube,kubernetes-ingress,kubernetes-pod,Kubernetes,Kubectl,Minikube,Kubernetes Ingress,Kubernetes Pod,我有一个问题,当有多个豆荚的复制品时,库伯内特斯如何决定服务豆荚 例如,假设有一个web应用程序作为多个pod副本在k8s集群上运行,它们由服务公开 当客户机发送请求时,它将转到服务和kube代理。但是kubernetes在何时何地决定哪个pod应该为请求服务 我想知道kubernetes在这件事上的内部情况。我们能控制吗?我们是否可以根据客户请求和自定义条件来决定应该提供哪个pod 我们是否可以根据客户请求和自定义条件来决定应该提供哪个pod 由于kube代理在L4负载平衡设备上工作,因此您可
kubectl解释服务.spec.sessionAffinityConfig
下面的段落和链接提供了详细的答案
可以通过将service.spec.sessionAffinity设置为“ClientIP”(默认值为“None”)来选择基于客户端IP的会话关联性,如果已经将service.spec.sessionAffinityConfig.ClientIP.timeoutSeconds设置为“ClientIP”,则可以通过设置字段service.spec.sessionAffinity来设置最大会话粘性时间(默认值为“10800”)
服务对象应该是这样的
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10000
Kubernetes服务创建一个负载平衡器(以及它的端点),默认情况下将使用循环机制在POD之间分发请求 你可以改变这种行为。
正如Suresh所说,您还可以使用sessionAffinity来确保对特定会话值的请求总是发送到同一个pod。谢谢Suresh!另外,当没有服务运行时,我创建了两个独立的pod运行同一个应用程序。有什么类似于AffinityConfig的吗?服务对象为pod提供稳定性,一个s podIP可以在其生命周期中更改,因为它是一个不可变的对象。两个独立的Pod不是彼此的副本。此外,您需要有一个服务对象才能在内部或外部公开它。当然,服务更灵活、更方便。但是我们可以在Pod级别进行上述设置吗?我没有发现任何与会话a相关的内容在podspec中,您还可以使用以下命令进行验证
kubectl explain pod.spec--recursive|grep-i affinity