☸️ Что такое Kubernetes Service Mesh и Istio

by itisgood

У Kubernetes есть много различных типов ресурсов, которые помогают вам абстрагироваться от идеи служб или микросервисов.

Например, если веб-интерфейс вашего приложения хочет взаимодействовать с бэкэндом, ему не нужно заботиться о том, какой под он ищет, или даже о том, какой IP-адрес он надеется занять.

Поды выставляются через сервис. (Если вы новичок в Kubernetes, я рекомендую этот пост, чтобы лучше понять, что такое поды, а также другие важные понятия.):

☸️ Понимание наборов инструментов в экосистеме kubernetes

По сути, Kubernetes предоставляет внутреннюю службу внутри кластера, и интерфейс взаимодействует с этой службой.

Поды, которые предлагают службу, можно очень заменить, и никто ничего не заметит.

Но с ростом возможностей ваших приложений растет и количество сервисов, которые вам необходимо поддерживать.

Каждый сервис может потенциально взаимодействовать с любым другим сервисом в кластере, и результирующая сеть называется Service Mesh.

У Kubernetes существует множество надстроек, которые помогают нам упростить управление этой сущностью Service Mesh.

Этими дополнениями предлагается множество ключевых функций, таких как TLS, автоматическая балансировка нагрузки, защита API даже во внутренней сети и т. д.

Многие опции, такие как Istio, Linkerd и Conduit, могут быть интегрированы с Kubernetes для достижения этой цели.

Мы рассмотрим Istio в этом руководстве, так как недавно была объявлена ​​его новая версия.

Предпосылки

Чтобы начать работу с Istio, вам понадобится работающий кластер kubernetes.

Есть три способа достичь этой цели:

  • Вы можете установить Minikube для создания кластера с одним узлом на локальном компьютере.
  • Или, если вы используете Docker в Windows или Mac, вы можете включить одноузловой кластер Kubernetes в настройках Docker.
  • Или вы можете использовать онлайн-сервисы, такие как игровая площадка Katacoda

Зачем использовать Service Mesh?

Установка службы, такой как Istio, упрощает работу с микросервисами.

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

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

Это очень помогает как разработчикам, так и админам.

Установка Istio

Для установки Istio необходим кластер Kubernetes.

Если у вас есть кластер с одним узлом, как у Minikube или Docker на рабочем столе, то все команды могут выполняться на вашем локальном узле.

Однако, если вы используете многоузловой кластер, подобный тому, который предлагает площадка Katacoda, имейте в виду, что большинство команд и процедур настройки выполняются на главном узле.

Да, это влияет на весь кластер, но нам нужно взаимодействовать исключительно с главным узлом.

Мы начнем с клонирования (или загрузки) последней версии Istio с Github.

Пользователи Windows могут посетить эту страницу и скачать соответствующий файл .zip.

$ curl -L https://git.io/getLatestIstio | sh -
$ cd istio-1.0.0

Имя репозитория может со временем меняться по мере выхода новых версий. На момент написание этой статьи -> 1.3.5

Это репозиторий содержит не только service mash, но и пример приложения 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.yaml
Изменение в системе может вступить в силу через несколько секунд, и после того, как это будет сделано, ваш kube-apiserver будет иметь встроенные расширения Istio.

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

Мы собираемся предположить, что это последний случай, и установить istio без аутентификации TLS.

$ kubectl apply -f install/kubernetes/istio-demo.yaml
Это создаст новую istio-систему пространства имен, в которую будут установлены все различные компоненты, такие как istio-pilot и входной шлюз.

Развертывание приложений и Istio Injector

тут мы рассмотрим полезность Istio.

Istio добавляет прокси-серверы в ваши службы, и это делается без изменения действительного кода вашего приложения.

Если автоматический istio-sidecar-инжектор включен.

Вы можете пометить пространство имен с помощью istio-jection = enabled, и когда ваше приложение будет развернуто в этом пространстве имен, у самих подов будут специализированные контейнеры Envoy вместе с контейнерами для основного приложения.

Например, давайте пометим пространство имен default.

$ kubectl label namespace default istio-injection=enabled

Теперь давайте развернем образец приложения BookInfo в этом пространстве имен.

Из корневого каталога Isitio, который мы клонировали, запустите:

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Вы можете перечислить все запущенные поды:
$ kubectl get pods
Выберите любой из них и просмотрите его детали.
Например, один из подов приложения BookInfo в моем развертывании называется 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, каждый из которых выполняет свою важную роль.

 

You may also like

Leave a Comment