如何在Kubernetes集群内的内部服务之间设置会话关联性
这是我的问题:我在kubernetes yaml文件中定义了3个服务:如何在Kubernetes集群内的内部服务之间设置会话关联性,kubernetes,session-cookies,kubernetes-ingress,sticky-session,session-affinity,Kubernetes,Session Cookies,Kubernetes Ingress,Sticky Session,Session Affinity,这是我的问题:我在kubernetes yaml文件中定义了3个服务: 一个前端(网站) 一个后端:有状态,用于用户会话 一个后端:无状态 我需要有状态服务上的会话亲和性,但无状态或前端服务上不需要。我需要会话关联是基于cookie的,而不是基于clientIP的 mydomain/stateful ===> Front-End Service (3 pods) ===> Stateful Service (3 pods, need session affinity) mydo
- 一个前端(网站)
- 一个后端:有状态,用于用户会话
- 一个后端:无状态
mydomain/stateful ===> Front-End Service (3 pods) ===> Stateful Service (3 pods, need session affinity)
mydomain/stateless ===> Front-End Service (3 pods) ===> Stateless Service (3 pods, do not need session affinity)
我尝试使用Ingress服务,但我看不出如何在Kubernetes集群内的两个服务之间使用它作为代理。我看到的所有示例都展示了如何使用入口作为来自集群外部的请求的路由器
这是我目前的poc.yaml:
####################################################################
######################### STATEFUL BACKEND #########################
# Deployment for pocbackend containers, listening on port 3000
apiVersion: apps/v1
kind: Deployment
metadata:
name: stateful-deployment
spec:
replicas: 3
selector:
matchLabels:
app: stateful-backend
tier: backend
template:
metadata:
labels:
app: stateful-backend
tier: backend
spec:
containers:
- name: pocbackend
image: pocbackend:2.0
ports:
- name: http
containerPort: 3000
---
# Service for Stateful containers, listening on port 3000
apiVersion: v1
kind: Service
metadata:
name: api-stateful
spec:
selector:
app: stateful-backend
tier: backend
ports:
- protocol: TCP
port: 3002
targetPort: http
#sessionAffinity: ClientIP
---
#####################################################################
######################### STATELESS BACKEND #########################
# Deployment for pocbackend containers, listening on port 3000
apiVersion: apps/v1
kind: Deployment
metadata:
name: stateless-backend
spec:
replicas: 3
selector:
matchLabels:
app: stateless-backend
tier: backend
template:
metadata:
labels:
app: stateless-backend
tier: backend
spec:
containers:
- name: pocbackend
image: pocbackend:2.0
ports:
- name: http
containerPort: 3000
---
# Service for Stateless containers, listening on port 3000
apiVersion: v1
kind: Service
metadata:
name: api-stateless
spec:
selector:
app: stateless-backend
tier: backend
ports:
- protocol: TCP
port: 3001
targetPort: http
---
#############################################################
######################### FRONT END #########################
# deployment of the container pocfrontend listening to port 3500
apiVersion: apps/v1
kind: Deployment
metadata:
name: front-deployment
spec:
replicas: 1
selector:
matchLabels:
app: frontend
tier: frontend
template:
metadata:
labels:
app: frontend
tier: frontend
spec:
containers:
- name: pocfrontend
image: pocfrontend:2.0
ports:
- name: http
containerPort: 3500
---
# Service exposing frontend on node port 85
apiVersion: v1
kind: Service
metadata:
name: frontend-service
spec:
type: LoadBalancer
selector:
app: frontend
tier: frontend
ports:
- protocol: TCP
port: 85
targetPort: http
你知道如何解决我的问题吗
谢谢 本机Kubernetes本身在服务[概念]级别上不提供
会话关联性
我想到的唯一方法就是使用Istio和它的目的地规则
。摘自istio手册:
DestinationRule
定义在路由发生后应用于服务的流量的策略。这些规则指定负载平衡的配置、sidecar中的连接池大小以及异常检测设置,以从负载平衡池中检测和排除不健康的主机
显示如何使用istio配置粘性会话 谢谢,我正在阅读链接,并将尽快尝试。我认为入口是一种方式,我只是不知道如何在K8s集群内的前端和后端服务之间设置入口。我无法使Istio工作。这看起来很有希望,但我的虚拟服务根本没有被考虑在内。我一定是做错了什么,我要再开一张票。