Рейтинг:0

Ограничение глобальной скорости Istio TCP

флаг in

Я пытаюсь реализовать глобальное ограничение скорости для соединений tcp через входной шлюз istio.Я следил за официальными документами для реализации глобальной службы ограничителя скорости http и сумел заставить ее работать. https://istio.io/latest/docs/tasks/policy-enforcement/rate-limit/, но не обрабатывает TCP-соединения.

Вот конфиги ограничения скорости http

версия API: networking.istio.io/v1alpha3
тип: EnvoyFilter
метаданные:
  имя: предел скорости фильтра
  #namespace: istio-вход
спецификация:
  Селектор рабочей нагрузки:
    # выбрать по метке в том же пространстве имен
    этикетки:
      Истио: вход
  configPatches:
    # Конфигурация Envoy, которую вы хотите изменить
    - применить к: HTTP_FILTER
      соответствовать:
        контекст: ШЛЮЗ
        слушатель:
          фильтрЦепь:
            фильтр:
              имя: "envoy.filters.network.http_connection_manager"
              подфильтр:
                имя: "envoy.filters.http.router"
      пластырь:
        операция: INSERT_BEFORE
        # Добавляет Envoy Rate Limit Filter в цепочку фильтров HTTP.
        стоимость:
          имя: envoy.filters.http.ratelimit
          типизированная_конфигурация:
            "@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit
            # домен может быть любым! Сопоставьте его с конфигурацией сервиса ratelimter
            домен: ctfd-ratelimit
            failure_mode_deny: правда
            тайм-аут: 10 сек.
            rate_limit_service:
              grpc_service:
                envoy_grpc:
                  имя_кластера: rate_limit_cluster
                тайм-аут: 10 сек.
              транспорт_апи_версия: V3
    - применить к: КЛАСТЕР
      соответствовать:
        контекст: ШЛЮЗ
        кластер:
          сервис: ratelimit.istio-ingress.svc.cluster.local
      пластырь:
        операция: ДОБАВИТЬ
        # Добавляет кластер службы ограничения скорости для службы ограничения скорости, определенной на шаге 1.
        стоимость:
          имя: rate_limit_cluster
          тип: STRICT_DNS
          connect_timeout: 10 с
          lb_policy: ROUND_ROBIN
          http2_protocol_options: {}
          load_assignment:
            имя_кластера: rate_limit_cluster
            конечные точки:
            - lb_конечные точки:
              - конечная точка:
                  адрес:
                    адрес_сокета:
                      адрес: ratelimit.istio-ingress.svc.cluster.local
                      порт_значение: 8081
версия API: networking.istio.io/v1alpha3
тип: EnvoyFilter
метаданные:
  имя: filter-ratelimit-svc
  #namespace: istio-вход
спецификация:
  Селектор рабочей нагрузки:
    этикетки:
      Истио: вход
  configPatches:
    - применить к: VIRTUAL_HOST
      соответствовать:
        контекст: ШЛЮЗ
        конфигурация маршрута:
          vhost:
            имя: ""
            маршрут:
              действие: ЛЮБОЕ
      пластырь:
        операция: ОБЪЕДИНИТЬ
        # Применяет правила ограничения скорости.
        стоимость:
          rate_limits:
            - действия: # любые действия здесь
              - Заголовки_запроса:
                  header_name: ":путь"
                  дескриптор_ключ: "ПУТЬ"
апиВерсия: v1
вид: карта конфигурации
метаданные:
  имя: ratelimit-config
данные:
  конфиг.yaml: |
    домен: tcp-ratelimit
    дескрипторы:
      - ключ: ПУТЬ
        скорость_лимит:
          единица измерения: минута
          запросы_на_юнит: 1

Я начал изменять ссылки на фильтры посланников, чтобы они были более сетевыми, но я не уверен, что еще мне не хватает, или это правильный способ сделать это. Вот что я изменил по сравнению с предыдущей конфигурацией на данный момент

версия API: networking.istio.io/v1alpha3
тип: EnvoyFilter
метаданные:
  имя: предел скорости фильтра
  #namespace: istio-вход
спецификация:
  Селектор рабочей нагрузки:
    # выбрать по метке в том же пространстве имен
    этикетки:
      Истио: вход
  configPatches:
    # Конфигурация Envoy, которую вы хотите изменить
    - применить к: NETWORK_FILTER
      соответствовать:
        контекст: ШЛЮЗ
        слушатель:
          фильтрЦепь:
            фильтр:
              имя: "envoy.filters.network.ratelimit"
      пластырь:
        операция: INSERT_BEFORE
        # Добавляет Envoy Rate Limit Filter в цепочку фильтров HTTP.
        стоимость:
          имя: envoy.filters.network.ratelimit
          типизированная_конфигурация:
            "@type": type.googleapis.com/envoy.extensions.filters.network.ratelimit.v3.RateLimit
            # домен может быть любым! Сопоставьте его с конфигурацией сервиса ratelimter
            домен: tcp-ratelimit
            failure_mode_deny: правда
            тайм-аут: 10 сек.
            rate_limit_service:
              grpc_service:
                envoy_grpc:
                  имя_кластера: rate_limit_cluster
                тайм-аут: 10 сек.
              транспорт_апи_версия: V3
    - применить к: КЛАСТЕР
      соответствовать:
        контекст: ШЛЮЗ
        кластер:
          сервис: ratelimit.istio-ingress.svc.cluster.local
      пластырь:
        операция: ДОБАВИТЬ
        # Добавляет кластер службы ограничения скорости для службы ограничения скорости, определенной на шаге 1.
        стоимость:
          имя: rate_limit_cluster
          тип: STRICT_DNS
          connect_timeout: 10 с
          lb_policy: ROUND_ROBIN
          http2_protocol_options: {}
          load_assignment:
            имя_кластера: rate_limit_cluster
            конечные точки:
            - lb_конечные точки:
              - конечная точка:
                  адрес:
                    адрес_сокета:
                      адрес: ratelimit.istio-ingress.svc.cluster.local
                      порт_значение: 8081

Возможно ли то, что я пытаюсь сделать?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.