• Русский
  • Включение инъекции сайдкара

    В следующих процедурах используется приложение Bookinfo для иллюстрации различных методов настройки инъекции сайдкара.

    Предварительные требования

    • Установлен оператор Alauda Service Mesh v2, создан ресурс Istio, и оператор успешно развернул Istio.
    • Создан ресурс IstioCNI, и оператор развернул необходимые поды IstioCNI.
    • Созданы пространства имён, предназначенные для mesh, и они доступны для управляющей плоскости Istio.
    • Необязательно: рабочие нагрузки, которые должны быть включены в mesh, уже развернуты. В последующих примерах приложение Bookinfo развернуто в пространстве имён bookinfo, но инъекция сайдкара (как описано в шаге 2) ещё не настроена. Подробнее см. "Deploying the Bookinfo application".

    Включение инъекции сайдкара с помощью меток пространства имён

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

    Процедура

    1. Проверьте имя ревизии управляющей плоскости Istio с помощью следующей команды:

      kubectl get istiorevisions

      Вы должны увидеть вывод, похожий на следующий пример:

      Пример вывода

      NAME      NAMESPACE      PROFILE   READY   STATUS    IN USE   VERSION   AGE
      default   istio-system             True    Healthy   False    v1.28.3   2m

      Поскольку имя ревизии — default, можно использовать стандартные метки инъекции без указания точной ревизии.

    2. Убедитесь, что существующие рабочие нагрузки в целевом пространстве имён показывают 1/1 готовых контейнеров, выполнив команду ниже. Это подтверждает, что поды в данный момент работают без сайдкаров.

      kubectl get pods -n bookinfo

      Вы должны увидеть вывод, похожий на следующий пример:

      Пример вывода

      NAME                              READY   STATUS    RESTARTS   AGE
      details-v1-c66556f6d-6zldd        1/1     Running   0          3m42s
      productpage-v1-5f568ff46d-kx7nn   1/1     Running   0          3m42s
      ratings-v1-74bcfcb96d-jp4xk       1/1     Running   0          3m42s
      reviews-v1-549bfb5f44-sv2n9       1/1     Running   0          3m42s
      reviews-v2-6486bc9868-56h7n       1/1     Running   0          3m42s
      reviews-v3-6c66dc6cdd-vmczd       1/1     Running   0          3m42s
    3. Примените метку инъекции к пространству имён bookinfo, выполнив следующую команду:

      kubectl label namespace bookinfo istio-injection=enabled

      Пример вывода

      namespace/bookinfo labeled
    4. Чтобы применить инъекцию сайдкара, повторно разверните рабочие нагрузки в пространстве имён bookinfo. Запустите rolling update для всех деплойментов с помощью этой команды:

      kubectl -n bookinfo rollout restart deployments

    Проверка

    1. Чтобы проверить развертывание, убедитесь, что новые поды показывают 2/2 контейнеров в состоянии READY, что подтверждает успешную инъекцию сайдкара. Используйте следующую команду:

      kubectl get pods -n bookinfo

      Вы должны увидеть вывод, похожий на следующий пример:

      Пример вывода

      NAME                              READY   STATUS    RESTARTS   AGE
      details-v1-85c7fcfd5b-hftlt       2/2     Running   0          31s
      productpage-v1-775ffc67d8-482s6   2/2     Running   0          31s
      ratings-v1-6c79fdf684-d7jmn       2/2     Running   0          31s
      reviews-v1-685fb87cb6-rch6v       2/2     Running   0          31s
      reviews-v2-76c4659bc6-vjcd8       2/2     Running   0          31s
      reviews-v3-f7b4c8678-zdnm7        2/2     Running   0          31s

    Исключение рабочей нагрузки из mesh

    Можно запретить инъекцию сайдкара для конкретной рабочей нагрузки, даже если инъекция включена для всего её пространства имён.

    NOTE

    Этот пример служит только для демонстрации. Для корректной работы приложения Bookinfo все его рабочие нагрузки должны быть частью mesh.

    Процедура

    1. Отредактируйте ресурс Deployment приложения. В этом примере исключим сервис ratings-v1.

      kubectl -n bookinfo edit deployments ratings-v1
    2. В разделе spec.template.metadata.labels ресурса Deployment добавьте метку sidecar.istio.io/inject: "false", чтобы отключить инъекцию сайдкара.

      kind: Deployment
      apiVersion: apps/v1
      metadata:
      name: ratings-v1
      namespace: bookinfo
      labels:
        app: ratings
        version: v1
      spec:
        template:
          metadata:
            labels:
              sidecar.istio.io/inject: "false"
      NOTE

      Процесс инъекции сайдкара не затрагивается, если эта метка добавлена в верхний уровень раздела labels ресурса Deployment.

      При обновлении деплоймента запускается rollout, который создаёт новый ReplicaSet с изменёнными подами.

    Проверка

    1. Убедитесь, что обновлённые поды не содержат сайдкар-контейнер и показывают 1/1 работающих контейнеров, выполнив команду:

      kubectl get pods -n bookinfo

      Вы должны увидеть вывод, похожий на следующий пример:

      Пример вывода

      NAME                              READY   STATUS    RESTARTS   AGE
      details-v1-85c7fcfd5b-hftlt       2/2     Running   0          4m7s
      productpage-v1-775ffc67d8-482s6   2/2     Running   0          4m7s
      ratings-v1-7988b9b7f4-7hdwm       1/1     Running   0          16s
      reviews-v1-685fb87cb6-rch6v       2/2     Running   0          4m7s
      reviews-v2-76c4659bc6-vjcd8       2/2     Running   0          4m7s
      reviews-v3-f7b4c8678-zdnm7        2/2     Running   0          4m7s

    Включение инъекции сайдкара с помощью меток пода

    С помощью этого метода можно выбрать отдельные рабочие нагрузки для инъекции сайдкара, а не включать её для всего пространства имён. Это лучше всего подходит для случаев, когда в mesh нужно включить лишь небольшое количество рабочих нагрузок. В примере также показано, как использовать метку ревизии для инъекции сайдкара, где ресурс Istio называется my-mesh. Использование отдельного имени ресурса Istio необходимо, когда в кластере существует несколько управляющих плоскостей Istio или при обновлении управляющей плоскости на основе ревизий.

    Процедура

    1. Проверьте имя ревизии управляющей плоскости Istio, выполнив команду:

      kubectl get istiorevisions

      Вы должны увидеть вывод, похожий на следующий пример:

      Пример вывода

      NAME      NAMESPACE      PROFILE   READY   STATUS    IN USE   VERSION   AGE
      my-mesh   istio-system             True    Healthy   False    v1.28.3   22s

      Поскольку имя ревизии — my-mesh, для активации инъекции сайдкара необходимо использовать метку ревизии istio.io/rev=my-mesh.

    2. Убедитесь, что существующие поды работают без сайдкаров, проверив, что они показывают 1/1 контейнеров в состоянии READY. Используйте эту команду:

      kubectl get pods -n bookinfo

      Вы должны увидеть вывод, похожий на следующий пример:

      Пример вывода

      NAME                              READY   STATUS    RESTARTS   AGE
      details-v1-85c7fcfd5b-8kzrc       1/1     Running   0          74s
      productpage-v1-775ffc67d8-rtbxj   1/1     Running   0          74s
      ratings-v1-6c79fdf684-ntzdr       1/1     Running   0          74s
      reviews-v1-685fb87cb6-l9fvr       1/1     Running   0          74s
      reviews-v2-76c4659bc6-7gt2l       1/1     Running   0          74s
      reviews-v3-f7b4c8678-lw59c        1/1     Running   0          74s
    3. Отредактируйте ресурс Deployment приложения. В этом примере измените сервис ratings-v1.

      kubectl -n bookinfo edit deployments ratings-v1
    4. Измените раздел spec.template.metadata.labels ресурса Deployment, добавив необходимую метку инъекции пода или метку ревизии. Здесь это istio.io/rev: my-mesh:

      kind: Deployment
      apiVersion: apps/v1
      metadata:
      name: ratings-v1
      namespace: bookinfo
      labels:
        app: ratings
        version: v1
      spec:
        template:
          metadata:
            labels:
              istio.io/rev: my-mesh
      NOTE

      Размещение метки в верхнем уровне раздела labels ресурса Deployment не повлияет на инъекцию сайдкара.

      Это обновление деплоймента инициирует rollout, который создаёт новый ReplicaSet с изменёнными подами.

    Проверка

    1. Убедитесь, что сайдкар был успешно внедрён, проверив, что только под ratings-v1 показывает 2/2 готовых контейнеров. Выполните следующую команду:

      kubectl get pods -n bookinfo

      Вы должны увидеть вывод, похожий на следующий пример:

      Пример вывода

      NAME                              READY   STATUS    RESTARTS   AGE
      details-v1-85c7fcfd5b-8kzrc       1/1     Running   0          2m29s
      productpage-v1-775ffc67d8-rtbxj   1/1     Running   0          2m29s
      ratings-v1-86d864565d-g8sqw       2/2     Running   0          17s
      reviews-v1-685fb87cb6-l9fvr       1/1     Running   0          2m29s
      reviews-v2-76c4659bc6-7gt2l       1/1     Running   0          2m29s
      reviews-v3-f7b4c8678-lw59c        1/1     Running   0          2m29s
    2. Повторите тот же процесс для любых других рабочих нагрузок, которые вы хотите добавить в mesh.