说我在GKE中运行我的应用程序,这是一个多租户应用程序。
我创建了多个承载我的应用程序的Pod。
现在我想要: 客户1-1000使用Pod1 客户1001-2000使用Pod2 等
如果我有一个指向我的群集的gcloud全局IP,是否可以根据传入的ipaddress / domain将请求路由到包含客户数据的正确Pod?
答案 0 :(得分:2)
您可以保证与服务的会话亲和力,但不能像您所描述的那样。因此,您的客户1-1000将不会使用pod-1,但他们将使用所有pod(作为服务进行简单的负载平衡),但每个客户在返回到您的服务时,将被重定向到同一个豆荚。
注意:始终在(默认10800)中指定的时间内:
service.spec.sessionAffinityConfig.clientIP.timeoutSeconds
这将是该服务的yaml文件:
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: 10
请注意,上面的示例可以直接使用ClusterIP类型服务(这是非常罕见的)或使用Loadbalancer类型服务,但不会使用Ingress在NodePort类型服务之后。这是因为对于Ingress,请求来自许多随机选择的源IP地址。
答案 1 :(得分:1)
不是自己使用Pod,但您应该能够使用服务。
Pods是无国籍的,彼此无法区分。
但您应该能够为每个客户组创建一个部署,并为每个部署创建一个服务。应该能够告诉Ingress nginx通过与特定客户组服务相关的任何属性来映射传入请求。