使用AWS Load Balancer或nginx基于请求标头进行路由

时间:2019-01-22 09:41:44

标签: nginx kubernetes load-balancing aws-load-balancer aws-elb

场景:我有2个客户。假设客户端A和客户端B。两个客户端都有一个公共ID(例如UUID)。配置我的应用程序(它是c ++),就像两个客户端都必须在一台服务器上进行连接一样。

我打算在应用程序前面添加(AWS)ELB / nginx。因此,问题是当我们收到来自客户端A的请求时,它将通过ELB并连接到其中一个节点。当客户端B将请求发送给ELB时,我不确定它是否将连接到客户端A连接的同一节点。客户端B应该在连接客户端A的那个节点上进行连接。

在“我的场景”中,两个客户端都应连接到同一节点。 客户总是成对出现,并具有共同的ID。 在这种情况下应该使用什么?

我的应用程序已被docker化,并且我正在使用kubenetes进行部署。

1 个答案:

答案 0 :(得分:0)

您可以配置Nginx Ingress Controller并使用annotation

nginx.ingress.kubernetes.io/server-snippet

您的Ingress可能如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/server-snippet: |
 set $agentflag 0;

 if ($http_user_agent ~* "(Mobile)" ){
 set $agentflag 1;
 }

 if ( $agentflag = 1 ) {
 return 301 https://m.example.com;
 }

请在Github上查看Annotations for ingress-nginx的详细说明。

如果您有多个节点,则可以使用Node affinity在同一节点上安排POD。也可以使用Node affinity的简单版本nodeSelector来实现。