是否可以将流量路由到特定的Pod?

coo*_*eze 7 gcloud kubernetes google-kubernetes-engine

假设我在GKE中运行我的应用程序,这是一个多租户应用程序。

我创建了多个托管应用程序的Pod。

现在我要:客户1-1000使用Pod1客户1001-2000使用Pod2等。

如果我有一个指向我的集群的gcloud全局IP,是否可以根据传入的ipaddress /域将请求路由到包含客户数据的正确Pod?

sur*_*ren 9

您可以保证与服务的会话亲和性,但不能如您所描述的那样。因此,您的客户 1-1000 不会使用 pod-1,但他们会使用所有 pod(作为服务进行简单的负载平衡),但是每个客户在返回访问您的服务时将被重定向到同一个豆荚。

注意:始终在指定的时间内(默认 10800):

service.spec.sessionAffinityConfig.clientIP.timeoutSeconds
Run Code Online (Sandbox Code Playgroud)

这将是服务的 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
Run Code Online (Sandbox Code Playgroud)

如果您还想指定时间,则需要添加以下内容:

  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10
Run Code Online (Sandbox Code Playgroud)

请注意,上面的示例可以直接访问 ClusterIP 类型服务(这很不常见)或使用 Loadbalancer 类型服务,但不适用于 NodePort 类型服务后面的 Ingress。这是因为对于 Ingress,请求来自许多随机选择的源 IP 地址。


Jon*_*ton 2

单独使用 Pod 不可以,但您应该可以使用服务。

Pod 旨在成为无状态且彼此无法区分的。

但是您应该能够为每个客户组创建一个部署,并为每个部署创建一个服务。Ingress nginx 应该能够被告知通过与特定客户组服务相关的任何属性来映射传入请求。