• Русский
  • Обновление компонентов ambient mode

    На этой странице описано, как обновить плоскость управления Istio, плагин Istio CNI и прокси ZTunnel в режиме ambient mode. Все три компонента используют стратегию обновления InPlace и должны обновляться именно в этом порядке. Прокси waypoint автоматически разворачиваются после обновления плоскости управления; см. Обновление прокси waypoint для соответствующих шагов проверки.

    Установка ambient mode с определенной версией

    Вы можете установить плоскость управления Istio, плагин Istio CNI и прокси ZTunnel в режиме ambient mode с явно закрепленной версией, что позволяет затем выполнить процедуру обновления.

    NOTE

    Этот раздел нужен, чтобы вы могли пройти процесс обновления, начиная с известной исходной версии. Пропустите его, если кластер уже работает с Istio в режиме ambient mode. Шаги установки повторяют Установку ambient mode Istio, за исключением того, что для каждого ресурса spec.version закрепляется за более ранним выпуском.

    Процедура

    1. Создайте пространства имен istio-cni, istio-system и ztunnel, добавив для каждого метку istio-discovery=enabled, чтобы плоскость управления могла обнаружить их:

      kubectl create namespace istio-cni
      kubectl create namespace istio-system
      kubectl create namespace ztunnel
      kubectl label namespace istio-cni istio-system ztunnel istio-discovery=enabled
    2. Создайте ресурс IstioCNI с исходной версией:

      cat <<EOF | kubectl apply -f -
      apiVersion: sailoperator.io/v1
      kind: IstioCNI
      metadata:
        name: default
      spec:
        version: v1.28.3
        namespace: istio-cni
        profile: ambient
        values:
          cni:
            cniConfDir: /etc/cni/multus/net.d
            excludeNamespaces:
              - istio-cni
              - kube-system
            ambient:
              reconcileIptablesOnStartup: true
      EOF
      1. Закрепление spec.version определяет версию, с которой начинается процедура обновления.
      2. Параметр reconcileIptablesOnStartup позволяет агенту CNI обнаруживать и исправлять несовместимые правила iptables в уже запущенных pod'ах ambient после перезапуска агента — именно такую ситуацию и создает обновление.
    3. Дождитесь, пока pod'ы Istio CNI перейдут в состояние готовности:

      kubectl wait --for=condition=Ready istiocnis/default --timeout=3m
    4. Создайте ресурс Istio с той же исходной версией:

      cat <<EOF | kubectl apply -f -
      apiVersion: sailoperator.io/v1
      kind: Istio
      metadata:
        name: default
      spec:
        version: v1.28.3
        namespace: istio-system
        profile: ambient
        updateStrategy:
          type: InPlace
        values:
          pilot:
            trustedZtunnelNamespace: ztunnel
          meshConfig:
            discoverySelectors:
              - matchLabels:
                  istio-discovery: enabled
      EOF
      1. InPlace — стратегия по умолчанию, поэтому это поле необязательно; здесь оно показано для явного указания стратегии. В режиме ambient mode другие стратегии не поддерживаются.
    5. Дождитесь, пока плоскость управления Istio перейдет в состояние готовности:

      kubectl wait --for=condition=Ready istios/default --timeout=3m
    6. Создайте ресурс ZTunnel с той же исходной версией:

      cat <<EOF | kubectl apply -f -
      apiVersion: sailoperator.io/v1
      kind: ZTunnel
      metadata:
        name: default
      spec:
        version: v1.28.3
        namespace: ztunnel
      EOF
      1. В отличие от руководства по установке, в этом примере spec.version задан, чтобы на этапе обновления ZTunnel ниже был более старый вариант, с которого можно перейти.
    7. Дождитесь, пока pod'ы ZTunnel перейдут в состояние готовности:

      kubectl wait --for=condition=Ready ztunnel/default --timeout=3m
    8. Настройте рабочие нагрузки приложений в кластере. Например, вы можете развернуть образец приложения Bookinfo в пространстве имен bookinfo. Следующие шаги представляют собой сокращенную версию Развертывания приложения Bookinfo в режиме ambient mode.

      a. Создайте пространство имен bookinfo и добавьте метку istio-discovery=enabled, чтобы плоскость управления могла обнаружить его:

      kubectl create namespace bookinfo
      kubectl label namespace bookinfo istio-discovery=enabled

      b. Разверните приложение Bookinfo:

      kubectl apply -n bookinfo -f https://raw.githubusercontent.com/alauda-mesh/istio/refs/heads/istio-1.28/samples/bookinfo/platform/kube/bookinfo.yaml

      c. Разверните сервисы приложения Bookinfo для каждой версии:

      kubectl apply -n bookinfo -f https://raw.githubusercontent.com/alauda-mesh/istio/refs/heads/istio-1.28/samples/bookinfo/platform/kube/bookinfo-versions.yaml

      d. Подключите все рабочие нагрузки пространства имен к ambient mesh:

      kubectl label namespace bookinfo istio.io/dataplane-mode=ambient

    Обновление компонентов

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

    • Вы вошли в веб-консоль Alauda Container Platform как cluster-admin.
    • Вы установили плагин Alauda Container Platform Networking for Multus, а версия kube-ovn должна быть v4.1.5 или более поздней.
    • Вы обновили Alauda Service Mesh Operator до версии 2.1.2 или более поздней, и в Operator доступна новая целевая версия. Дополнительные сведения см. в разделе Понимание обновлений и каналов Operator.
    • Istio развернут в режиме ambient mode. В этом примере ресурсы Istio, IstioCNI и ZTunnel называются default.
    • На локальном компьютере установлен istioctl.
    • Рабочие нагрузки приложений подключены к ambient mesh. В этом примере приложение Bookinfo работает в пространстве имен bookinfo; см. Развертывание приложения Bookinfo в режиме ambient mode.

    Обновление плоскости управления Istio

    1. Измените версию в ресурсе Istio. Например, чтобы обновиться до Istio 1.28.6, задайте для поля spec.version значение v1.28.6, выполнив следующую команду:

      kubectl patch istio default --type='merge' -p '{"spec":{"version":"v1.28.6"}}'

      Operator заменяет запущенную плоскость управления новой версией. ZTunnel и любые прокси waypoint автоматически переподключаются к новому экземпляру istiod; pod'ы приложений продолжают работать и не требуют перезапуска.

    2. Дождитесь, пока плоскость управления перейдет в состояние готовности:

      kubectl wait --for=condition=Ready istios/default --timeout=3m
    3. Убедитесь, что плоскость управления сообщает о новой версии:

      kubectl get istio default

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

      NAME      NAMESPACE      PROFILE   REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
      default   istio-system   ambient   1           1       0        default           Healthy   v1.28.6   12m

    Обновление плагина Istio CNI

    Обновляйте плагин Istio CNI только после завершения обновления плоскости управления, поскольку плагин CNI версии 1.x поддерживает плоскость управления версии 1.x или 1.x+1.

    1. Установите для поля spec.version ресурса IstioCNI ту же версию, что и у плоскости управления:

      kubectl patch istiocni default --type='merge' -p '{"spec":{"version":"v1.28.6"}}'
    2. Наблюдайте за развертыванием DaemonSet istio-cni-node:

      kubectl rollout status daemonset/istio-cni-node -n istio-cni
    3. Дождитесь, пока ресурс IstioCNI сообщит о готовности:

      kubectl wait --for=condition=Ready istiocnis/default --timeout=5m
    4. Убедитесь, что плагин CNI сообщает о новой версии:

      kubectl get istiocni default

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

      NAME      NAMESPACE   PROFILE   READY   STATUS    VERSION   AGE
      default   istio-cni   ambient   True    Healthy   v1.28.6   15m

    Подробные сведения о ресурсе IstioCNI и его поведении при обновлении см. в разделе Процесс обновления Istio CNI.

    Обновление прокси ZTunnel

    Обновляйте прокси ZTunnel последним, после того как и плоскость управления, и плагин CNI начнут работать в новой версии.

    WARNING

    Замена pod'а ZTunnel может сбросить долгоживущие TCP-соединения на этом узле. Если ваши рабочие нагрузки используют долгоживущие соединения, перед этим шагом ознакомьтесь с разделом Процесс обновления ZTunnel и выберите подходящий способ снижения риска.

    1. Установите для поля spec.version ресурса ZTunnel ту же версию, что и у плоскости управления:

      kubectl patch ztunnel default --type='merge' -p '{"spec":{"version":"v1.28.6"}}'
    2. Наблюдайте за развертыванием DaemonSet ZTunnel:

      kubectl rollout status daemonset/ztunnel -n ztunnel
      NOTE

      DaemonSet заменяет pod'ы ZTunnel по одному узлу за раз, чтобы сохранить доступность сетевой связности mesh, поэтому на больших кластерах развертывание может занять несколько минут.

    3. Дождитесь, пока ресурс ZTunnel сообщит о готовности:

      kubectl wait --for=condition=Ready ztunnel/default --timeout=10m
    4. Убедитесь, что прокси ZTunnel сообщает о новой версии:

      kubectl get ztunnel default

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

      NAME      NAMESPACE   READY   STATUS    VERSION   AGE
      default   ztunnel     True    Healthy   v1.28.6   18m
    5. Проверьте pod'ы ZTunnel по узлам:

      kubectl get pods -n ztunnel -o wide

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

      NAME            READY   STATUS    RESTARTS   AGE     IP           NODE
      ztunnel-2b6pb   1/1     Running   0          2m11s   10.3.0.202   192.168.136.57
      ztunnel-2s7m7   1/1     Running   0          2m3s    10.3.0.203   192.168.143.119
      ztunnel-95g2q   1/1     Running   0          115s    10.3.0.204   192.168.141.97

    Проверка рабочих нагрузок ambient

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

    1. Проверьте, что pod'ы приложения запущены:

      kubectl get pods -n bookinfo

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

      NAME                              READY   STATUS    RESTARTS   AGE
      details-v1-657cf9fcfb-r75r4       1/1     Running   0          25m
      productpage-v1-667466dfd9-k6ddq   1/1     Running   0          25m
      ratings-v1-5bdc95577b-s7n8w       1/1     Running   0          25m
      reviews-v1-8468d47c78-m7fww       1/1     Running   0          25m
      reviews-v2-869977f6f8-jklhm       1/1     Running   0          25m
      reviews-v3-7bcdd7dd74-zdc87       1/1     Running   0          25m
    2. Убедитесь, что ZTunnel по-прежнему проксирует рабочие нагрузки. Pod'ы, подключенные к ambient mesh, сообщают протокол HBONE:

      istioctl -n ztunnel ztunnel-config workloads

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

      NAMESPACE    POD NAME                        ADDRESS    NODE            WAYPOINT PROTOCOL
      bookinfo     details-v1-657cf9fcfb-r75r4     10.3.0.192 192.168.141.97  None     HBONE
      bookinfo     productpage-v1-667466dfd9-k6ddq 10.3.0.197 192.168.141.97  None     HBONE
      bookinfo     ratings-v1-5bdc95577b-s7n8w     10.3.0.193 192.168.143.119 None     HBONE
      bookinfo     reviews-v1-8468d47c78-m7fww     10.3.0.194 192.168.143.119 None     HBONE
      bookinfo     reviews-v2-869977f6f8-jklhm     10.3.0.195 192.168.143.119 None     HBONE
      bookinfo     reviews-v3-7bcdd7dd74-zdc87     10.3.0.196 192.168.141.97  None     HBONE
    3. Проверьте связность через mesh, вызвав сервис из другого pod'а:

      kubectl exec "$(kubectl get pod -l app=ratings -n bookinfo \
        -o jsonpath='{.items[0].metadata.name}')" \
        -c ratings -n bookinfo \
        -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"

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

      <title>Simple Bookstore App</title>

    Если вы развернули прокси waypoint, дополнительно проверьте их, как описано в разделе Обновление прокси waypoint.

    Удаление ресурсов обновления из среды разработки

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

    # Remove the Bookinfo namespace from the ambient data plane and delete it
    kubectl label namespace bookinfo istio.io/dataplane-mode-
    kubectl delete namespace bookinfo
    # Remove the mesh components and their namespaces
    kubectl delete istio/default istiocni/default ztunnel/default
    kubectl delete ns/istio-system ns/istio-cni ns/ztunnel