kubernetes - Kubernetes中的公开服务和副本集关系

标签 kubernetes kubectl minikube kubernetes-ingress kubernetes-pod

我有一个问题,当有多个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/

相关文章:

ssl - 如何将证书颁发机构 (CA) 添加到 k8s?

javascript - 使用Kubernetes JavaScript客户端的createDeployment()

amazon-web-services - 设置 AWS EKS - 不知道配置的用户名和密码

macos - Minikube 无法在 Mac 上使用 VPN 启动

kubernetes - 在部署定义中使用 "topologySpreadConstraints"时创建服务失败

nginx - 使用 Kubernetes Ingress 资源公开具有多个 IP 的多个后端

kubernetes - 使用 yaml 配置为 secret 自动生成字符串

kubernetes - 使用 “kubectl patch”更新部署标签在v1.18中不起作用

azure - 从本地计算机断开与 Azure ACS 的连接