Включение инъекции sidecar

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

Содержание

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

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

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

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

Процедура

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

    kubectl get istiorevisions

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

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

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

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

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

    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. Чтобы применить инъекцию sidecar, повторно разверните рабочие нагрузки в пространстве имён bookinfo. Запустите rolling update для всех деплойментов этой командой:

    kubectl -n bookinfo rollout restart deployments

Проверка

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

    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

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

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", чтобы отключить инъекцию sidecar.

    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

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

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

Проверка

  1. Убедитесь, что обновлённые поды не содержат контейнер sidecar и показывают 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

Включение инъекции sidecar с помощью меток подов

С помощью этого метода можно выбрать отдельные рабочие нагрузки для инъекции sidecar, а не включать её для всего пространства имён. Это подходит, когда в mesh нужно включить лишь небольшое количество рабочих нагрузок. В примере также показано, как использовать метку ревизии для инъекции sidecar, где ресурс 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.26.3   22s

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

  2. Убедитесь, что существующие поды работают без sidecar, проверив, что они показывают 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 не повлияет на инъекцию sidecar.

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

Проверка

  1. Убедитесь, что sidecar был успешно внедрён, проверив, что только под 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.