Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Все руководства
    • Создание нового Kubernetes-проекта в Yandex Cloud
    • Создание кластера Kubernetes без доступа в интернет
    • Запуск рабочих нагрузок с GPU
    • Использование групп узлов c GPU без предустановленных драйверов
    • Установка Time-Slicing GPUs
    • Миграция ресурсов в другую зону доступности
    • Использование модулей Yandex Cloud в Terraform
    • Шифрование секретов в Managed Service for Kubernetes
      • Интеграция с Argo CD
      • Интеграция с Crossplane
      • Синхронизация с секретами Yandex Lockbox
      • Настройка Fluent Bit для работы с Cloud Logging
      • Настройка Gateway API
      • Настройка L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
      • Настройка логирования для L7-балансировщика Application Load Balancer с помощью Ingress-контроллера
      • Создание L7-балансировщика с профилем безопасности Smart Web Security через Ingress-контроллер Application Load Balancer
      • Проверка состояния приложений в кластере Managed Service for Kubernetes с помощью L7-балансировщика Application Load Balancer
      • Использование Jaeger для трассировки запросов в Managed Service for YDB
      • Настройка Kyverno & Kyverno Policies
      • Использование Metrics Provider для трансляции метрик
      • Редактирование изображений для сайтов с помощью Thumbor
      • Использование Istio
      • Использование HashiCorp Vault для хранения секретов
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Необходимые платные ресурсы
  • Перед началом работы
  • Установите Istio
  • Установите тестовое приложение
  • Посмотрите схему сервисной сети на дашборде Kiali
  • Маршрутизируйте запросы
  • Внедрите сбой в работу сервиса
  • Перераспределите трафик
  • Установите режим аутентификации с помощью mutual TLS
  • Посмотрите метрики Istio на дашборде Prometheus
  • Посмотрите метрики Istio на дашборде Grafana
  • Удалите созданные ресурсы
  1. Практические руководства
  2. Использование продуктов Cloud Marketplace
  3. Использование Istio

Использование Istio

Статья создана
Yandex Cloud
Обновлена 28 марта 2025 г.
  • Необходимые платные ресурсы
  • Перед началом работы
  • Установите Istio
  • Установите тестовое приложение
  • Посмотрите схему сервисной сети на дашборде Kiali
  • Маршрутизируйте запросы
  • Внедрите сбой в работу сервиса
  • Перераспределите трафик
  • Установите режим аутентификации с помощью mutual TLS
  • Посмотрите метрики Istio на дашборде Prometheus
  • Посмотрите метрики Istio на дашборде Grafana
  • Удалите созданные ресурсы

Istio предназначен для организации service mesh — инфраструктурного уровня с низкой задержкой, который нужен для обработки большого объема сетевых коммуникаций между сервисами в кластере Managed Service for Kubernetes.

Чтобы посмотреть варианты использования Istio:

  1. Установите Istio.
  2. Установите тестовое приложение.
  3. Посмотрите схему сервисной сети на дашборде Kiali.
  4. Маршрутизируйте запросы.
  5. Внедрите сбой в работу сервиса.
  6. Перераспределите трафик.
  7. Установите режим аутентификации с помощью mutual TLS.
  8. Посмотрите метрики Istio на дашборде Prometheus.
  9. Посмотрите метрики Istio на дашборде Grafana.

Если созданные ресурсы вам больше не нужны, удалите их.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки описываемого решения входят:

  • Плата за кластер Managed Service for Kubernetes: использование мастера и исходящий трафик (см. тарифы Managed Service for Kubernetes).
  • Плата за узлы кластера (ВМ): использование вычислительных ресурсов, операционной системы и хранилища (см. тарифы Compute Cloud).
  • Плата за публичный IP-адрес, если он назначен узлам кластера (см. тарифы Virtual Private Cloud).

Перед началом работыПеред началом работы

  1. Создайте кластер и группу узлов Kubernetes.

    Вручную
    Terraform
    1. Если у вас еще нет сети, создайте ее.

    2. Если у вас еще нет подсетей, создайте их в зонах доступности, где будут созданы кластер Kubernetes и группа узлов.

    3. Создайте сервисные аккаунты:

      • Сервисный аккаунт с ролями k8s.clusters.agent и vpc.publicAdmin на каталог, в котором создается кластер Kubernetes. От его имени будут создаваться ресурсы, необходимые кластеру Kubernetes.
      • Сервисный аккаунт с ролью container-registry.images.puller. От его имени узлы будут скачивать из реестра необходимые Docker-образы.

      Совет

      Вы можете использовать один и тот же сервисный аккаунт для управления кластером Kubernetes и его группами узлов.

    4. Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.

      Важно

      От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.

    5. Создайте кластер Kubernetes и группу узлов с оперативной памятью не менее 6 ГБ и с группами безопасности, созданными ранее.

    1. Если у вас еще нет Terraform, установите его.

    2. Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.

    3. Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его.

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

    5. Скачайте в ту же рабочую директорию файл конфигурации кластера k8s-cluster.tf. В файле описаны:

      • Сеть.

      • Подсеть.

      • Кластер Kubernetes.

      • Сервисный аккаунт, необходимый для работы кластера и группы узлов Managed Service for Kubernetes.

      • Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.

        Важно

        От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.

    6. Укажите в файле k8s-cluster.tf:

      • Идентификатор каталога.
      • Версию Kubernetes для кластера и групп узлов Kubernetes.
      • Оперативную память для группы узлов не менее 6 ГБ. Значение должно быть кратно количеству vCPU.
      • CIDR кластера Kubernetes.
      • Имя сервисного аккаунта кластера Managed Service for Kubernetes.
    7. Проверьте корректность файлов конфигурации Terraform с помощью команды:

      terraform validate
      

      Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    8. Создайте необходимую инфраструктуру:

      1. Выполните команду для просмотра планируемых изменений:

        terraform plan
        

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

      2. Если вас устраивают планируемые изменения, внесите их:

        1. Выполните команду:

          terraform apply
          
        2. Подтвердите изменение ресурсов.

        3. Дождитесь завершения операции.

      В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

  2. Установите kubectl и настройте его на работу с созданным кластером.

Установите IstioУстановите Istio

  1. Установите продукт Istio из каталога приложений Yandex Cloud Marketplace. При установке приложения:

    1. Создайте новое пространство имен istio-system.
    2. Установите дополнения для Istio (Kiali, Prometheus, Grafana, Loki, Jaeger).
  2. Убедитесь, что все поды Istio и его дополнений перешли в статус Running:

    kubectl get pods -n istio-system
    

    Результат:

    NAME                                    READY   STATUS    RESTARTS   AGE
    grafana-75c6d4fcf7-v4sfp                1/1     Running   0          2h
    istio-ingressgateway-6496999d57-hdbnf   1/1     Running   0          2h
    istiod-665dbb97c9-s6xxk                 1/1     Running   0          2h
    jaeger-5468d9c886-x2bq8                 1/1     Running   0          2h
    kiali-6854cc8574-26t65                  1/1     Running   0          2h
    loki-0                                  1/1     Running   0          2h
    prometheus-54f86f6676-vmqqr             2/2     Running   0          2h
    

Установите тестовое приложениеУстановите тестовое приложение

  1. Создайте новое пространство имен todoapp:

    kubectl create namespace todoapp
    
  2. Добавьте пространству имен todoapp метку istio-injection:

    kubectl label namespace todoapp istio-injection=enabled
    
  3. Установите тестовое приложение todoapp:

    kubectl apply -f https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-todo-app/main/kube/todoapp.yaml -n todoapp
    

    Результат:

    deployment.apps/todoapp-v1 created
    deployment.apps/todoapp-v2 created
    deployment.apps/recommender-v1 created
    deployment.apps/todoapp-redis-v1 created
    service/todoapp created
    service/recommender created
    service/todoapp-redis created
    
  4. Проверьте состояние подов:

    kubectl get pods -n todoapp
    

    Результат:

    NAME                                READY   STATUS    RESTARTS   AGE
    recommender-v1-7865c4cfbb-hsp2k     2/2     Running   0          60s
    recommender-v1-7865c4cfbb-vqt68     2/2     Running   0          59s
    todoapp-redis-v1-dbdf4d44-48952     2/2     Running   0          59s
    todoapp-v1-6d4b78b6c9-gfkxd         2/2     Running   0          60s
    todoapp-v1-6d4b78b6c9-jc962         2/2     Running   0          60s
    todoapp-v2-7dd69b445f-2rznm         2/2     Running   0          60s
    todoapp-v2-7dd69b445f-gr4vn         2/2     Running   0          60s
    

    Убедитесь, что все поды перешли в статус Running и READY=2/2.

  5. Проверьте состояние сервисов:

    kubectl get services -n todoapp
    

    Результат:

    NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
    recommender     ClusterIP   10.96.255.93    <none>        80/TCP     80s
    todoapp         ClusterIP   10.96.232.143   <none>        80/TCP     80s
    todoapp-redis   ClusterIP   10.96.174.100   <none>        6379/TCP   80s
    
  6. Проверьте, что веб-приложение работает:

    kubectl exec "$(kubectl get pod -l app=recommender -n todoapp -o jsonpath='{.items[0].metadata.name}')" -n todoapp \
       -- curl --silent --show-error todoapp:80 | grep -o "<title>.*</title>"
    

    Результат:

    <title>Тудуапп</title>
    
  7. Опубликуйте приложение:

    kubectl apply -f https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-todo-app/main/kube/todoapp-gateway.yaml -n todoapp
    

    Результат:

    gateway.networking.istio.io/todoapp-gateway created
    virtualservice.networking.istio.io/todoapp-vs created
    
  8. Получите IP-адрес Ingress-шлюза для доступа к приложению:

    kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
    
  9. Чтобы запустить веб-приложение, вставьте в адресную строку браузера полученный IP-адрес.

    Примечание

    Если ресурс недоступен по указанному URL, то убедитесь, что группы безопасности для кластера Managed Service for Kubernetes и его групп узлов настроены корректно. Если отсутствует какое-либо из правил — добавьте его.

    При обновлении страницы ее содержимое будет меняться. В зависимости от версии пода, который обслуживает ваш запрос, вы увидите:

    • версия пода v1 — блок со списком дел;
    • версия пода v2 — блок со списком дел и блок с рекомендациями.

Посмотрите схему сервисной сети на дашборде KialiПосмотрите схему сервисной сети на дашборде Kiali

  1. Убедитесь, что сервис kiali установлен и доступен в кластере Managed Service for Kubernetes:

    kubectl get service kiali -n istio-system
    

    Результат:

    NAME    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)              AGE
    kiali   ClusterIP   10.96.207.108   <none>        20001/TCP,9090/TCP   15d
    
  2. Настройте переадресацию порта сервиса kiali на локальный компьютер:

    kubectl port-forward service/kiali 8080:20001 -n istio-system
    
  3. Чтобы открыть дашборд Kiali, вставьте в адресную строку браузера http://localhost:8080.

    Дашборд Kiali содержит различную информацию, например: схему сервисной сети, конфигурацию Istio, конфигурацию сервисов и их состояние, метрики, трейсы и логи из подов.

  4. Чтобы сгенерировать трафик к тестовому приложению, поработайте с ним. Например, добавьте список дел.

  5. На дашборде Kiali перейдите в раздел Graph и выберите пространство имен todoapp. На схеме вы увидите компоненты тестового приложения, работающие в сервисной сети Istio.

    Совет

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

Маршрутизируйте запросыМаршрутизируйте запросы

Поды сервиса todoapp развернуты в версиях v1 и v2 параллельно. При обновлении страницы тестового приложения панель с рекомендациями отображается не всегда, т. к. только поды todoapp версии v2 делают запрос к сервису рекомендаций и отображают результат.

С помощью маршрутизации направьте пользователей к конкретной версии сервиса:

  1. Направьте все запросы к версии v1:

    kubectl apply -f https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-todo-app/main/kube/virtualservice-route-v1.yaml -n todoapp
    

    Результат:

    destinationrule.networking.istio.io/todoapp-dr created
    virtualservice.networking.istio.io/todoapp-vs configured
    
  2. Обновите страницу тестового приложения несколько раз. Теперь все запросы обрабатываются подами версии v1. На странице отображается только блок со списком дел.

  3. Направьте все запросы к версии v2:

    kubectl apply -f https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-todo-app/main/kube/virtualservice-route-v2.yaml -n todoapp
    

    Результат:

    destinationrule.networking.istio.io/todoapp-dr unchanged
    virtualservice.networking.istio.io/todoapp-vs configured
    
  4. Обновите страницу тестового приложения несколько раз. Теперь все запросы обрабатываются подами версии v2. На странице отображаются блок со списком дел и блок с рекомендациями.

Чтобы отменить маршрутизацию, выполните команду:

kubectl apply -f https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-todo-app/main/kube/todoapp-gateway.yaml -n todoapp

Результат:

gateway.networking.istio.io/todoapp-gateway unchanged
virtualservice.networking.istio.io/todoapp-vs configured

Внедрите сбой в работу сервисаВнедрите сбой в работу сервиса

Istio позволяет тестировать надежность приложения с помощью внедрения сбоев в работу сервисов.
Обращения к сервису recommender имеют тайм-аут в три секунды. Если за это время сервис не отвечает, блок с рекомендациями не отображается.

Смоделировать сбой можно, указав в конфигурации ресурса VirtualService задержку более трех секунд. Например, этот блок реализует 50% вероятность возникновения задержки в пять секунд:

fault:
  delay:
    percentage:
      value: 50.0
    fixedDelay: 5s

Чтобы внедрить сбой в тестовое приложение:

  1. Примените конфигурацию VirtualService:

    kubectl apply -f https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-todo-app/main/kube/virtualservice-delay.yaml -n todoapp
    

    Результат:

    destinationrule.networking.istio.io/recommender-dr created
    virtualservice.networking.istio.io/recommender-vs created
    
  2. Обновите страницу тестового приложения несколько раз. Когда возникает задержка в ответе, блок с рекомендациями не отображается, хотя запрос обрабатывается подом версии v2. Приложение корректно обрабатывает сбой сервиса recommender.

Чтобы откатить конфигурацию VirtualService, выполните команду:

kubectl delete -f https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-todo-app/main/kube/virtualservice-delay.yaml -n todoapp

Результат:

destinationrule.networking.istio.io "recommender-dr" deleted
virtualservice.networking.istio.io "recommender-vs" deleted

Перераспределите трафикПерераспределите трафик

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

Чтобы перераспределить трафик в тестовом приложении:

  1. Установите вес 50% для версий v1 и v2:

    kubectl apply -f https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-todo-app/main/kube/virtualservice-weight-v2-50.yaml -n todoapp
    

    Результат:

    destinationrule.networking.istio.io/todoapp-dr unchanged
    virtualservice.networking.istio.io/todoapp-vs configured
    
  2. Обновите страницу тестового приложения несколько раз. Приложение обрабатывается версиями подов v1 и v2 примерно в равной пропорции.

  3. Увеличьте вес до 100% для версии v2:

    kubectl apply -f https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-todo-app/main/kube/virtualservice-weight-v2-100.yaml -n todoapp
    

    Результат:

    destinationrule.networking.istio.io/todoapp-dr unchanged
    virtualservice.networking.istio.io/todoapp-vs configured
    
  4. Обновите страницу тестового приложения несколько раз. Приложение обрабатывается только подами версии v2.

Установите режим аутентификации с помощью mutual TLSУстановите режим аутентификации с помощью mutual TLS

Приложения с сайдкарами-прокси Istio по умолчанию обмениваются между собой трафиком с mutual TLS шифрованием.

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

Чтобы проверить работу тестового приложения в разных режимах:

  1. Создайте политику аутентификации:

    kubectl apply -f https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-todo-app/main/kube/peerauthentication.yaml -n todoapp
    

    Результат:

    peerauthentication.security.istio.io/default created
    
  2. Попробуйте создать под в пространстве имен default, чтобы проверить соединение с сервисом todoapp:

    kubectl run -i -n default \
       --rm \
       --restart=Never curl \
       --image=curlimages/curl \
       --command \
       -- sh -c 'curl --insecure http://todoapp.todoapp.svc.cluster.local'
    

    Результат:

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    curl: (56) Recv failure: Connection reset by peer
    pod "curl" deleted
    pod default/curl terminated (Error)
    
  3. Удалите политику аутентификации:

    kubectl delete -f https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-todo-app/main/kube/peerauthentication.yaml -n todoapp
    

    Результат:

    peerauthentication.security.istio.io "default" deleted
    
  4. Попробуйте снова создать под:

    kubectl run -i -n default \
       --rm \
       --restart=Never curl \
       --image=curlimages/curl \
       --command \
       -- sh -c 'curl --insecure http://todoapp.todoapp.svc.cluster.local'
    

    Результат:

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  2658  100  2658    0     0   147k      0 --:--:-- --:--:-- --:--:--  152k
    <!DOCTYPE html>
    <html lang="ru">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Тудуапп</title>
    ...
    

Посмотрите метрики Istio на дашборде PrometheusПосмотрите метрики Istio на дашборде Prometheus

  1. Убедитесь, что сервис prometheus установлен и доступен в кластере Managed Service for Kubernetes:

    kubectl get service prometheus -n istio-system
    

    Результат:

    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
    prometheus   ClusterIP   10.96.147.249   <none>        9090/TCP   15d
    
  2. Настройте переадресацию порта сервиса prometheus на локальный компьютер:

    kubectl port-forward service/prometheus 9090:9090 -n istio-system
    
  3. Чтобы открыть дашборд Prometheus, вставьте в адресную строку браузера http://localhost:9090.

  4. Введите в поле Expression запрос:

    istio_requests_total{destination_service="recommender.todoapp.svc.cluster.local"}
    
  5. Перейдите на вкладку Graph. Она показывает метрики Istio.

Посмотрите метрики Istio на дашборде GrafanaПосмотрите метрики Istio на дашборде Grafana

  1. Убедитесь, что сервис grafana установлен и доступен в кластере Managed Service for Kubernetes:

    kubectl get service grafana -n istio-system
    

    Результат:

    NAME      TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    grafana   ClusterIP   10.96.205.86   <none>        3000/TCP   15d
    
  2. Настройте переадресацию порта сервиса grafana на локальный компьютер:

    kubectl port-forward service/grafana 3000:3000 -n istio-system
    
  3. Чтобы открыть дашборд Grafana, вставьте в адресную строку браузера http://localhost:3000.

  4. В списке дашбордов найдите и откройте Istio Mesh Dashboard. Он показывает метрики запросов к сервисам тестового приложения.

Удалите созданные ресурсыУдалите созданные ресурсы

Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:

Вручную
Terraform
  1. Удалите кластер Kubernetes.
  2. Удалите созданные подсети и сети.
  3. Удалите созданные сервисные аккаунты.
  1. В терминале перейдите в директорию с планом инфраструктуры.

    Важно

    Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.

  2. Удалите ресурсы:

    1. Выполните команду:

      terraform destroy
      
    2. Подтвердите удаление ресурсов и дождитесь завершения операции.

    Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.

Была ли статья полезна?

Предыдущая
Редактирование изображений для сайтов с помощью Thumbor
Следующая
Использование HashiCorp Vault для хранения секретов
Проект Яндекса
© 2025 ООО «Яндекс.Облако»