如何使用Ingress Nginx负载均衡套接字

时间:2019-10-10 19:36:02

标签: nginx kubernetes socket.io load-balancing kubernetes-ingress

在kubernetes中,我部署了3个Pod来负责套接字。

我希望在部署的Pod之间平衡流量。为此,我使用的是通过图表stable/nginx-ingress通过Helm安装的NGINX Ingress控制器。

问题在于客户端始终连接到同一吊舱。没有平衡。

为了测试负载平衡,我使用了使用数据的电话(2-6个电话)。他们每个人都打开一个套接字连接。

我有2条进入规则。对于我正在使用的套接字:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-socket-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/websocket-services: "node-socket-service"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"    
    nginx.ingress.kubernetes.io/upstream-hash-by: "$host"
spec:
  tls:
    - hosts:
      - example.com
  rules:
    - host: example.com
      http:
        paths:     
          - path: /socket.io/
            backend:
              servicePort: 4000
              serviceName: node-socket-service

服务:

apiVersion: v1
kind: Service
metadata:
  name: node-socket-service
spec:
  type: ClusterIP
  selector:
    component: node-socket
  ports:
    - port: 4000
      targetPort: 4000

我尝试通过以下方式更改upstream-hash-by的值:$binary_remote_addr $remote_addr $host ewma $request_uri,但未成功...

我想知道我的测试方式是否良好。可能是负载平衡运作良好,但需要有更多客户端。

1 个答案:

答案 0 :(得分:0)

我假设您正在使用以下架构来访问您的Pod:

入口控制器---> kubernetes服务---> kubernetes部署(POD)

如果是这种情况,那么您已经在使用带有统计轮询策略的负载平衡。我可以得出结论,您的部署只有一个副本。通过运行kubectl describe deployment $YOUR_DEPLOYMENT检查副本的数量。通过运行kubectl scale deployment --replicas=5增加副本的数量。

如果您使用的是其他体系结构,则需要对其进行检查,以验证负载平衡为什么不起作用。您很有可能没有使用Deployment Bud Pod来部署容器。