Подключение служб между кластерами Kubernetes с помощью Teleproxy

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

Этот инструмент основан на телеприсутствии. Он используется в компании Flare Systems для того, чтобы сохранить нашу систему разработки легкой и при этом иметь возможность быстро подключать наши тестовые приложения к более реалистичной среде «staging».

Смотрите код на https://github.com/flared/teleproxy.

Идеально подходит для минимальных установок Minikube

Большинство разработок Flare Systems основаны на Minikube, инструменте, позволяющем запускать Kubernetes локально в виде одноузлового кластера.

Хотя Minikube — отличный инструмент, мы быстро столкнулись с проблемами производительности. У разработчиков не всегда есть ресурсы для запуска всех служб, необходимых для тестирования программного компонента, над которым они работают, или, может быть, они предпочли бы иметь более 30 минут автономной работы! Они также могут захотеть взаимодействовать с базой данных, которая содержит больше данных, чем та, которую мы поставляем в локальной среде разработки.

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

Использование teleproxy для подмены развертывания kubernetes прокси-сервером

Допустим, у вас есть локальное развертывание someservice с pods, слушающими порт 8080, работающее в вашем локальном кластере, и вы хотите заменить его прокси на другое развертывание, работающее в целевом кластере, вы должны выполнить следующую команду:

tele-proxy 
    --source_context=minikube 
    --source_deployment=someservice 
    --source_port=8080 
    --target_context=staging 
    --target_pod=someservice-77697866c6-vsk59 
    --target_port=8080
Войти в полноэкранный режим Выйти из полноэкранного режима

Как это работает

Teleproxy основан на телеприсутствии. Все, что он делает, это запускает kubectl port-forward в замещающей капсуле telepresence. Если вы еще не знаете, как работает telepresence, следующая диаграмма развертывания должна помочь. Она показывает трафик от клиентской капсулы, которая использует сервис, который мы заменяем, к целевой капсуле, которая является эквивалентной капсулой, работающей в другом кластере.

  1. Трафик исходит от клиента, он, вероятно, нацелен на someservice с помощью службы Kubernetes развертывания.

  2. Трафик принимается контейнером incluster компании Telepresence. Telepresence уменьшила развертывание someservice и заменила капсулы одним прокси-контейнером incluster. Он перенаправляет любой входящий трафик на локальный модуль telepresence, который работает вне кластера.

  3. Трафик принимается локальным контейнером telepresence, который перенаправляет его в контейнер teleproxy.

  4. Трафик принимается teleproxy и перенаправляется в целевую капсулу в кластере B через kubectl port-forward. Этот контейнер способен запустить port-forward на ваш кластер назначения, потому что он монтирует вашу локальную конфигурацию kubectl, некоторые специфические переменные окружения и содержит общие инструменты для аутентификации на кластере kubernetes, такие как AWS и Google Cloud CLI.

Отладка Teleproxy

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

Мы настроили teleproxy для собственного использования и заставили его работать как с GKE, так и с AWS EKS:

  • монтирование ~/.aws , ~/.kube.
  • Установка AWS CLI и Google Cloud CLI
  • Установка симлинков compat для пользователей OSX.

Вероятно, можно сделать еще больше, и мы готовы объединить все, что имеет смысл.

Приложение

  • Telepresence: https://www.telepresence.io/discussion/overview
  • Open Source @ Flare Systems: https://flared.github.io/
  • Телепрокси: https://github.com/Flared/teleproxy

Оцените статью
devanswers.ru
Добавить комментарий