我有一个问题,当有多个Pod副本时,kubernetes如何决定服务Pod。
例如,假设我有一个在k8s集群上运行的Web应用程序,它是多个Pod副本,它们由服务公开。
当客户端发送请求时,它将转到服务和kube-proxy。但是kubernetes会在何时何地决定应为哪个Pod服务请求?
我想知道这个问题的kubernetes内部。我们可以控制吗?我们能否根据客户的要求和自定义条件决定应使用哪个 pods ?
最佳答案
can we decide which pod should serve based on client requests and custom conditions?
由于kube-proxy适用于 L4 负载平衡内容,因此您可以基于客户端IP 来控制 session 。它不读取客户端请求的 header 。
您可以使用服务对象中的以下字段 service.spec.sessionAffinityConfig 控制 session
以下命令提供说明
kubectl explain service.spec.sessionAffinityConfig
以下段落和链接提供了详细的答案。
Client-IP based session affinity can be selected by setting service.spec.sessionAffinity to “ClientIP” (the default is “None”), and you can set the max session sticky time by setting the field service.spec.sessionAffinityConfig.clientIP.timeoutSeconds if you have already set service.spec.sessionAffinity to “ClientIP” (the default is “10800”)-service-proxies
服务对象是这样的
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 - Kubernetes中的公开服务和副本集关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56144216/