• Русский
  • Включение внедрения sidecar

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

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

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

    Включение внедрения sidecar с использованием меток Namespace

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

    Процедура

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

      kubectl get istiorevisions

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

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

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

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

    2. Убедитесь, что существующие рабочие нагрузки в целевом пространстве имен отображают 1/1 готовых контейнеров, выполнив команду ниже. Это подтверждает, что pod'ы в данный момент запущены без 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 для всех deployments с помощью этой команды:

      kubectl -n bookinfo rollout restart deployments

    Проверка

    1. Чтобы проверить rollout, убедитесь, что новые pod'ы отображают 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.

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

    Проверка

    1. Убедитесь, что в обновленном pod'е или pod'ах отсутствует sidecar container и отображается 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 с использованием меток Pod

    С помощью этого метода можно выбирать отдельные рабочие нагрузки для внедрения sidecar, а не включать его для всего пространства имен. Это лучше всего подходит для случаев, когда только небольшому числу рабочих нагрузок требуется включение в service mesh. В примере также показано, как использовать revision label для внедрения sidecar, где ресурс Istio называется my-mesh. Использование отдельного имени ресурса Istio необходимо, когда в одном кластере существует несколько control plane Istio или при обновлении control plane на основе revision.

    Процедура

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

      kubectl get istiorevisions

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

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

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

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

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

      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, добавив необходимую метку внедрения pod или revision. Здесь это 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.

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

    Проверка

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