Как загрузить балансировочные сокеты с помощью ingress nginx - PullRequest
2 голосов
/ 10 октября 2019

В kubernetes у меня есть развертывание из 3 модулей, отвечающих за сокеты.

Я хочу сбалансировать нагрузку трафика между модулями развертывания. Для этого я использую контроллер NGINX Ingress, установленный через Helm, используя диаграмму stable / 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 голосов
/ 11 октября 2019

Я предполагаю, что вы используете следующую архитектуру для доступа к вашему модулю:

Контроллер входа ---> Сервис Kubernetes ---> Развертывание Kubernetes (POD)

Если этоВ этом случае вы уже используете балансировку нагрузки с политикой циклического перебора. Для чего я бы пришел к выводу, что ваше развертывание имеет только одну реплику. Проверьте количество реплик, запустив kubectl describe deployment $YOUR_DEPLOYMENT. Увеличьте количество реплик, запустив kubectl scale deployment --replicas=5.

Если вы используете другую архитектуру, мне нужно проверить ее, чтобы убедиться, что балансировка нагрузки не работает. Скорее всего, вы не используете компонент Deployment bud Pod для развертывания вашего контейнера.

...