Kubernetes:尽管我将sessionAffinity设置为ClientIP,为什么我的请求被重定向到不同的POD?

Kubernetes:尽管我将sessionAffinity设置为ClientIP,为什么我的请求被重定向到不同的POD?,kubernetes,kubernetes-service,session-affinity,Kubernetes,Kubernetes Service,Session Affinity,在我的headless服务中,我配置sessionAffinity,以便每次都将来自特定客户端的连接传递到同一个Pod 这是舱单: apiVersion: v1 kind: Service metadata: name: service1 spec: clusterIP: None selector: app: nginx sessionAffinity: ClientIP sessionAffinityConfig: clientIP: time

在我的headless服务中,我配置sessionAffinity,以便每次都将来自特定客户端的连接传递到同一个Pod

这是舱单:

apiVersion: v1
kind: Service
metadata:
  name: service1
spec:
  clusterIP: None
  selector:
    app: nginx
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 30
我运行了一些nginx pod来测试:

$ kubectl create deployment nginx --image=stenote/nginx-hostname
问题是,当我卷曲我的服务时,我被重定向到不同的pod,而sessionAffinity似乎被忽略了

$ kubectl run --generator=run-pod/v1 --rm utils -it --image arunvelsriram/utils bash
root@utils:/# for i in $(seq 1 10) ; do curl service1; done
nginx-78d58889-b7fm2
nginx-78d58889-b7fm2
nginx-78d58889-b7fm2
nginx-78d58889-b7fm2
nginx-78d58889-b7fm2
nginx-78d58889-8rpxd
nginx-78d58889-b7fm2
nginx-78d58889-62jlw
nginx-78d58889-8rpxd
nginx-78d58889-62jlw
注意。当我和

$ kubectl describe  svc service1
Name:              service1
Namespace:         abdelghani
Labels:            <none>
Annotations:       <none>
Selector:          app=nginx
Type:              ClusterIP
IP Families:       <none>
IP:                None
IPs:               <none>
Session Affinity:  ClientIP
Events:            <none>
$kubectl描述svc服务1
姓名:service1
名称空间:abdelghani
标签:
注释:
选择器:app=nginx
类型:集群
知识产权家庭:
IP:没有
IPs:
会话关联:ClientIP
活动:
SessionAffinity
存在配置

请注意,我的服务是无头的,即
集群ip:None
。SessionAffinity似乎可以很好地处理非headless服务。但是,我在文档中找不到明确的解释。这是否与平台不进行代理有关


Abdelghani

当使用headless服务(clusterIP:None)时,您不使用代理

发件人:

对于无头服务,不分配群集IP,kube代理则分配群集IP 不处理这些服务,并且没有负载平衡或代理 由平台为他们完成。DNS是如何自动配置的 取决于服务是否定义了选择器

因此,当使用headless服务时,dns会响应与给定服务相关的所有POD的随机IP列表

/app # dig service1 +search +short
172.17.0.8
172.17.0.10
172.17.0.9
/app # dig service1 +search +short
172.17.0.9
172.17.0.10
172.17.0.8
/app # dig service1 +search +short
172.17.0.8
172.17.0.10
172.17.0.9
/app # dig service1 +search +short
172.17.0.10
172.17.0.9
172.17.0.8
/app # dig service1 +search +short
172.17.0.9
172.17.0.8
172.17.0.10
旋度只得到一个,然后继续


因为这会产生每个请求,所以每次您从dns获得不同的ip时,您都会连接到不同的pod。

当使用headless服务(clusterIP:None)时,您不会使用代理

发件人:

对于无头服务,不分配群集IP,kube代理则分配群集IP 不处理这些服务,并且没有负载平衡或代理 由平台为他们完成。DNS是如何自动配置的 取决于服务是否定义了选择器

因此,当使用headless服务时,dns会响应与给定服务相关的所有POD的随机IP列表

/app # dig service1 +search +short
172.17.0.8
172.17.0.10
172.17.0.9
/app # dig service1 +search +short
172.17.0.9
172.17.0.10
172.17.0.8
/app # dig service1 +search +short
172.17.0.8
172.17.0.10
172.17.0.9
/app # dig service1 +search +short
172.17.0.10
172.17.0.9
172.17.0.8
/app # dig service1 +search +short
172.17.0.9
172.17.0.8
172.17.0.10
旋度只得到一个,然后继续


因为这会产生每个请求,所以每次您从dns获得不同的ip时,您都会连接到不同的pod。

Thx获取您的答案。你认为这与代理或负载平衡更相关吗?什么与什么相关?你指的是什么?我指的是这种行为。sessionAffinity不适用于headless服务的事实在本例中,我认为它与负载平衡更相关,因为代理用于转发请求,而在本例中,数据包不被转发。您只需获得随机IP并直接连接到它,中间没有任何代理。谢谢您的回答。你认为这与代理或负载平衡更相关吗?什么与什么相关?你指的是什么?我指的是这种行为。sessionAffinity不适用于headless服务的事实在本例中,我认为它与负载平衡更相关,因为代理用于转发请求,而在本例中,数据包不被转发。你只需得到随机IP并直接连接到中间,中间没有任何代理。