Kubernetes 中公开的服务和副本集关系
Exposed Service and Replica Set Relation in Kubernetes
我有一个问题,当有多个 pod 副本时,kubernetes 如何决定服务 pod。
例如,假设我在 k8s 集群上有一个 Web 应用程序 运行 作为多个 pod 副本,并且它们由服务公开。
当客户端发送请求时,它会转到服务和 kube-proxy。但是 kubernetes 何时何地决定哪个 pod 应该为请求提供服务?
为了这件事情想了解一下kubernetes的内幕。我们能控制这个吗?我们可以根据客户端请求和自定义条件来决定应该为哪个 pod 提供服务吗?
can we decide which pod should serve based on client requests and custom conditions?
由于 kube-proxy 用于 L4 负载平衡,因此您可以根据 客户端 IP[=28= 控制 session ].它不读取客户端请求的 header。
您可以通过 service obejct 中的以下字段 service.spec.sessionAffinityConfig 控制 session
以下命令提供解释
kubectl explain service.spec.sessionAffinityConfig
以下段落和 link 提供详细答案。
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
服务object会是这样
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 服务创建一个负载均衡器(及其端点),默认情况下将使用循环法在 pods.
之间分配请求
您可以更改此行为。
正如 Suresh 所说,您还可以使用 sessionAffinity 来确保对特定会话值的请求始终转到同一个 pod。
我有一个问题,当有多个 pod 副本时,kubernetes 如何决定服务 pod。
例如,假设我在 k8s 集群上有一个 Web 应用程序 运行 作为多个 pod 副本,并且它们由服务公开。
当客户端发送请求时,它会转到服务和 kube-proxy。但是 kubernetes 何时何地决定哪个 pod 应该为请求提供服务?
为了这件事情想了解一下kubernetes的内幕。我们能控制这个吗?我们可以根据客户端请求和自定义条件来决定应该为哪个 pod 提供服务吗?
can we decide which pod should serve based on client requests and custom conditions?
由于 kube-proxy 用于 L4 负载平衡,因此您可以根据 客户端 IP[=28= 控制 session ].它不读取客户端请求的 header。
您可以通过 service obejct 中的以下字段 service.spec.sessionAffinityConfig 控制 session
以下命令提供解释
kubectl explain service.spec.sessionAffinityConfig
以下段落和 link 提供详细答案。
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
服务object会是这样
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 服务创建一个负载均衡器(及其端点),默认情况下将使用循环法在 pods.
之间分配请求您可以更改此行为。 正如 Suresh 所说,您还可以使用 sessionAffinity 来确保对特定会话值的请求始终转到同一个 pod。