Использование traefik для балансировки нагрузки на kubernetes apiserver - PullRequest
0 голосов
/ 30 апреля 2018

В настоящее время мы пробуем traefik и рассматриваем возможность его использования в качестве входного контроллера для нашего внутреннего кластера kubernetes.

Теперь мне интересно, можно ли использовать traefik для балансировки нагрузки на kube-apiserver? У нас есть установка HA с 3 мастерами.

Как мне поступить здесь?

По сути, я просто хочу сбалансировать запросы API со всех узлов кластера между 3 мастерами.

Должен ли я просто запустить traefik вне кластера?

Я пытаюсь обернуть голову вокруг этого ... Мне трудно понять, как это может работать вместе с traefik в качестве входного контроллера.

Спасибо за любой вклад, высоко ценится!

1 Ответ

0 голосов
/ 30 апреля 2018

Одним из способов достижения этого является использование провайдера файлов и создание статической настройки, указывающей на узлы вашего сервера API; как то так (не проверено)

[file]
[backends]
  [backends.backend1]
    [backends.backend1.servers]
      [backends.backend1.servers.server1]
        url = "http://apiserver1:80"
        weight = 1
      [backends.backend1.servers.server2]
        url = "http://apiserver2:80"
        weight = 1
      [backends.backend1.servers.server3]
        url = "http://apiserver3:80"
        weight = 1

[frontends]
  [frontends.frontend1]
    entryPoints = ["http"]
    backend = "backend1"
    passHostHeader = true

    [frontends.frontend1.routes]
      [frontends.frontend1.routes.route1]
        rule = "Host:apiserver"

(Это предполагает простую настройку только по протоколу HTTP; для HTTPS потребуется дополнительная настройка.)

Когда Traefik предоставляется этот фрагмент конфигурации (и все остальное, что вам нужно сделать через файл TOML или параметры CLI), он будет округлять запросы с apiserver заголовком хоста на трех узлах. .

Другим, по крайней мере, потенциальным вариантом является создание объекта Service, который захватывает узлы вашего сервера API и другой объект Ingress, ссылающийся на эту службу, и сопоставляет желаемый путь URL-адреса и хост с вашим сервером API. Это даст вам больше гибкости, поскольку Служба должна автоматически приспосабливаться к изменениям на вашем сервере API, что может быть интересно, когда в игру вступают такие вещи, как непрерывные обновления. Однако одним из отягчающих обстоятельств может быть то, что Traefik необходимо обратиться к серверу API для обработки Ingresses и Services (и в этом случае конечных точек), чего не может быть, если сервер API недоступен. Возможно, вам понадобится какая-то настройка HA или вы захотите выдержать определенную недоступность. (FWIW, Traefik должен самостоятельно восстанавливаться после временных простоев.)

Если вы хотите запустить Traefik в кластере или вне кластера, решать только вам. Первый, безусловно, проще в настройке, если вы хотите обрабатывать объекты API, так как вам не нужно передавать параметры конфигурации сервера API, хотя те же ограничения в отношении подключения к серверу API применяются, если вы хотите пойти по маршруту Ingress / Service. С подходом провайдера файлов вам не нужно беспокоиться об этом - вполне возможно запустить Traefik внутри Kubernetes без использования провайдера Kubernetes.

...