Назад | Перейти на главную страницу

Эффективная сеть в k8s - 2 стратегии входа

Прямо сейчас у меня есть

  1. кластер из 9 серверов K8s (1 мастер, 3 обычных и 5 статических работников).
  2. Ingress работает как nodeport на 80 (я знаю, что это не рекомендуется).
  3. static.xxx.com DNS указывает на работников со статическим контентом.

Я столкнулся с проблемой высокого сетевого трафика внутри кластера. Что случается?

  1. Запросу требуется статический контент.
  2. Он переходит к работнику, который может обработать запрос, однако он все еще должен быть загружен входом, поэтому он перенаправляется на узел, у которого есть модуль nginx-ingres. (и это не всегда на одном сервере, по умолчанию используется его политика roundrobin)
  3. Запрос должен перейти к входу и обратно к любому модулю статического контента, вызывающему дополнительную проблему с сетью (я могу ошибаться в количестве прыжков)

Это статурирует ссылку в кластере. У меня есть несколько идей - иметь 2 входа в кластер (один для обычного и один для статического контента) и принудительный вход статического контента для обработки запроса на том же сервере. - измените политику nginx-ingress для обработки запросов на этом сервере, если это возможно.

Как можно добиться отсутствия переходов, если запрос может обслуживаться на этом хосте?

Можно ли настроить 2 входа в самоуправляемый кластер?

Можно ли создать nodeport только на определенных хостах?

Как можно добиться отсутствия переходов, если запрос может обслуживаться на этом хосте?

Установить Local значение service.spec.externalTrafficPolicy аннотация в службе Ingress Controller для NodePort. Он будет проксировать запросы к локальным конечным точкам, никогда не перенаправляя трафик на другие узлы = пакеты, отправленные на узлы без определенных конечных точек (Pod), отбрасываются. Читать Вот подробнее об этой встроенной функции K8S Service.

Можно ли настроить 2 входа в самоуправляемый кластер?

Да, вы просто различаете их в определении ресурса Ingress с помощью kubernetes.io/ingress.class аннотация (например, kubernetes.io/ingress.class: "nginx").
Читать Вот подробнее о возможности развертывания нескольких контроллеров Ingress в одном кластере K8S.

Можно ли создать nodeport только на определенных хостах?

Косвенно через использование сходство узлов, который заставляет модули планироваться / запускаться на определенных узлах. С помощью функции, заданной в вашем первом вопросе (service.spec.externalTrafficPolicy: Local) вы добьетесь этого.