По сути, Kubernetes предоставляет серверная служба внутри кластера и интерфейс взаимодействует с этой службой. Модули, которые предлагают услугу, вполне можно заменить, и никто ничего не заметит. Но по мере роста функций в ваших приложениях растет и количество сервисов, которые вам необходимо поддерживать. Каждая служба потенциально может взаимодействовать с любой другой службой в кластере, и результирующая сеть называется Сервисная сетка.
Для Kubernetes существует множество надстроек, которые помогают нам упростить управление этой Service Mesh. Эти надстройки предлагают множество ключевых функций, таких как TLS, автоматическая балансировка нагрузки, защита API даже во внутренней сети и т. Д. Многие опции, такие как Istio, Linkerd и Conduit, могут быть интегрированы с Kubernetes для достижения этой цели. В этом посте мы рассмотрим Istio, так как это версия 1.0 было недавно анонсировано.
Предпосылки
Чтобы начать работу с Istio, вам понадобится рабочий кластер Kubernetes. Есть три способа получить это.
- Вы можете установить Minikube, чтобы создать кластер с одним узлом на вашем локальном компьютере.
- Или, если вы используете Docker в Windows или Mac, вы можете включить одноузловой кластер Kubernetes в настройках Docker.
- Или вы можете использовать онлайн-сервисы, такие как игровая площадка Katacoda. Мы будем использовать это.
Зачем использовать Service Mesh?
Установка сервисной сети, такой как Istio, упрощает работу с микросервисами. При разработке вам не нужно беспокоиться о том, что ваш микросервис должен будет предлагать поддержку взаимного TLS, балансировки нагрузки или любого другого аспекта, такого как обнаружение сервисов. Идеальная Service Mesh позволяет подключать микросервисы, защищать их друг от друга и от внешнего мира и организованно управлять ими. Это очень помогает как разработчикам, так и операторам.
Установка Istio
Для установки Istio требуется кластер Kubernetes. Если у вас есть кластер с одним узлом, как в Minikube или Docker на рабочем столе, тогда все команды можно запускать на вашем локальном узле. Однако, если вы используете многоузловой кластер, подобный тому, что предлагает игровая площадка Katacoda, имейте в виду, что большинство команд и процедур настройки выполняются на главном узле. Да, это влияет на весь кластер, но нам нужно взаимодействовать только с главным узлом.
Начнем с клонирования (или скачивания) последней версии Istio с Github. Пользователи Windows могут захотеть посетить эту страницу и получить соответствующий .застегивать файл.
$ curl -L https: // git.io / getLatestIstio | ш -$ cd istio-1.0.0
Название репо может измениться со временем по мере выхода новой версии, на момент написания этой статьи 1.0.0 - последняя стабильная версия. Это репозиторий содержит не только расширение служебной сетки, но и образец приложения под названием BookInfo для экспериментальных целей. Скрипт также добавляет новый каталог $ PWD / istio-1.0.0 / bin в вашу переменную PATH.
Этот каталог содержит istioctl двоичный файл, который можно использовать для взаимодействия с кластером. Пользователи Windows могут просто вызвать двоичный файл, перейдя в папку istio-1.0.0 \ bin и звонит .\ istioctl с помощью PowerShell или командной строки. Но это необязательное дополнение.
Если вы используете Mac, вы можете сделать это с помощью следующей команды:
$ export PATH = $ PWD / bin: $ PATHЗатем нам нужно расширить наш Kubernetes API с помощью пользовательских определений ресурсов (CRD), которые istio предоставляет нам.
$ kubectl apply -f install / kubernetes / helm / istio / templates / crds.ямлЭто может вступить в силу через несколько секунд, и как только это будет сделано, в ваш kube-apiserver будут встроены расширения Istio. С этого момента варианты установки различаются в зависимости от того, используете ли вы это в производственных целях или экспериментируете с ним в своей собственной изолированной среде.
Мы предполагаем, что это последний случай, и устанавливаем istio без аутентификации TLS.
$ kubectl apply -f install / kubernetes / istio-demo.ямлЭто создаст новое пространство имен istio-system, в котором будут установлены все различные компоненты, такие как istio-pilot и входной шлюз.
Развертывание приложений и инжектор Istio
А вот и полезность Istio. Istio добавляет к вашим сервисам дополнительные прокси-серверы, и это делается без изменения фактического кода вашего приложения. Если включен автоматический istio-sidecar-injector. Вы можете пометить пространство имен с помощью istio-injection = enabled, и когда ваше приложение будет развернуто в этом пространстве имен, сами поды будут иметь специализированные контейнеры Envoy вместе с контейнерами для основного приложения. Например, обозначим пространство имен по умолчанию
$ kubectl label пространство имен по умолчанию istio-injection = enabledТеперь давайте развернем пример приложения BookInfo в этом пространстве имен. Из корневого каталога репутации Isitio, которую мы клонировали, запустите:
$ kubectl apply -f samples / bookinfo / platform / kube / bookinfo.ямлВы можете перечислить все запущенные поды здесь:
$ kubectl получить подыВыберите любой контейнер и просмотрите его детали. Например, один из модулей приложения BookInfo в моем развертывании называется details-v1-6865b9b99d-6mxx9
$ kubectl describe pods / details-v1-6865b9b99d-6mxx9В описании вы заметите, что модуль содержит два контейнера, первый из которых является компонентом фактического запуска графического приложения. Examples-bookinfo-details-v1: 1.8.0, а второй - istio-proxy, на котором запущено изображение gcr.io / istio-release / proxyv2: 1.0.0 .
Istio предлагает детальный контроль над вашей сервисной сеткой, потому что он внедряет эти контейнеры в те самые поды, где находятся ваши приложения. Это в сочетании с простым в использовании TLS для связи и точным контролем трафика - одна из многих причин, по которым большие приложения могут получить выгоду от такой сервисной сети, как Istio.
Рекомендации
Фактическая архитектура состоит из множества компонентов, таких как Pilot, Citadel и Mixer, каждый из которых выполняет свою важную роль. Вы можете узнать больше об этих компонентах здесь и попробовать развернуть свой собственный микросервис здесь.