У 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
$ kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
Начиная с этого момента, варианты установки могут различаться в зависимости от того, используете ли вы его в производственных целях или экспериментируете с ним в собственной изолированной среде.
Мы собираемся предположить, что это последний случай, и установить istio без аутентификации TLS.
$ kubectl apply -f install/kubernetes/istio-demo.yaml
Развертывание приложений и 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
Рекомендации
Фактическая архитектура имеет много компонентов, таких как Pilot, Citadel и Mixer, каждый из которых выполняет свою важную роль.