Опция случайной балансировки нагрузки прокси-сервера Envoy не является случайной

Мы используем приведенный ниже YAML-файл балансировки нагрузки Envoy. Он работает, но НЕ распределяет запросы между узлами 1, 2 и 3 случайным образом. В нашем случае высокая нагрузка исходит от одного исходного IP-адреса (клиентского сервера). Мы хотим распределить трафик по узлам следующим образом:

Запрос 1 -> Узел 1 Запрос 2 -> Узел 2 Запрос 3 -> Узел 3 Запрос 4 -> Узел 1

Однако происходит вот что:

Запрос 1 -> Узел 1 Запрос 2 -> Узел 1 Запрос 3 -> Узел 1 Запрос 4 -> Узел 1

Через ДЛИТЕЛЬНОЕ время (минуты) он в конечном итоге начнет отправлять некоторый трафик на узел 2, но только на узел 2. Опять же, обратите внимание, что все запросы поступают с одного IP-адреса клиента.

Ниже мы используем Random, но и циклический алгоритм делает то же самое. Итак, наш вопрос: как это исправить? Это похоже на огромную ошибку, поскольку на самом деле это не балансировка нагрузки. Любое руководство будет оценено по достоинству. Мы используем последнюю версию Envoy.

      static_resources:
    listeners:
      - name: listener_http
        address:
          socket_address:
            address: 0.0.0.0
            port_value: 80
        filter_chains:
          - filters:
              - name: envoy.filters.network.tcp_proxy
                typed_config:
                  "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
                  stat_prefix: destination
                  cluster: http_cluster
      - name: listener_https
        address:
          socket_address:
            address: 0.0.0.0
            port_value: 443
        filter_chains:
          - filters:
              - name: envoy.filters.network.tcp_proxy
                typed_config:
                  "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy
                  stat_prefix: destination2
                  cluster: https_cluster
    clusters:
      - name: http_cluster
        connect_timeout: 30s
        type: strict_dns
        dns_lookup_family: V4_ONLY
        lb_policy: random
        load_assignment:
          cluster_name: http_cluster
          endpoints:
            - lb_endpoints:
                - endpoint:
                    address:
                      socket_address:
                        address: node1.mydomain.com
                        port_value: 80
                - endpoint:
                    address:
                      socket_address:
                        address: node2.mydomain.com
                        port_value: 80
                - endpoint:
                    address:
                      socket_address:
                        address: node3.mydomain.com
                        port_value: 80
      - name: https_cluster
        connect_timeout: 30s
        type: strict_dns
        dns_lookup_family: V4_ONLY
        lb_policy: random
        load_assignment:
          cluster_name: https_cluster
          endpoints:
            - lb_endpoints:
                - endpoint:
                    address:
                      socket_address:
                        address: node1.mydomain.com
                        port_value: 443
                - endpoint:
                    address:
                      socket_address:
                        address: node2.mydomain.com
                        port_value: 443
                - endpoint:
                    address:
                      socket_address:
                        address: node3.mydomain.com
                        port_value: 443

0 ответов

Другие вопросы по тегам