Как настроить и применить изменения конфигурации к ресурсам Istio?

Содержание

Overview

Background information

Платформа предоставляет возможности Istio через инкапсуляцию CRD или работу с ресурсами Istio (DestinationRule, VirtualService и др.). Способы управления (добавления, удаления, изменения) ресурсами Istio на платформе включают:

  • Пользователи выполняют действия через UI платформы.

    • Выполнение операций на конкретных функциональных страницах. Например, на вкладке Routes страницы деталей сервиса создание ресурса virtual service через Create Route.

    • Прямое редактирование YAML-файла ресурсов Istio на странице Resources кластеров. Администраторы могут создавать, изменять или удалять YAML-операции над ресурсами Kubernetes, включая ресурсы Istio.

  • Компонент сервисной сетки Controller (global-asm-controller/asm-controller) автоматически настраивается согласно CRD или API, и в процессе настройки Controller автоматически обновляет ресурсы Istio.

    Например, после создания политики балансировки нагрузки для сервиса через UI платформы Controller автоматически создаёт соответствующий ресурс DestinationRule; наоборот, после удаления политики балансировки нагрузки Controller автоматически удаляет соответствующий ресурс DestinationRule.

Solution overview

Если функциональность UI продукта не соответствует вашим ожиданиям и нативной поддержке Istio, вы можете воспользоваться этим документом для настройки и применения изменений в YAML-файлах ресурсов Istio на странице Platform Management > Clusters > Resources, временно используя возможности, предоставляемые нативным Istio.

Метод настройки и применения изменений конфигурации ресурсов Istio следующий:

  1. Добавьте аннотацию asm.cpaas.io/user-managed: "true" к ресурсам Istio, чтобы отключить их контроль со стороны Controller и избежать восстановления или изменения ваших кастомных изменений компонентом Controller.

  2. Настройте YAML-конфигурацию на основе справочной документации, предоставленной Istio.

Constraints and limitations

  • Ресурсы Istio, настроенные таким образом, больше не контролируются компонентом Controller и требуют ручного управления пользователем.

  • Если изменённая YAML-конфигурация не соответствует дизайну Istio, могут возникнуть неизвестные проблемы, влияющие на функциональность.

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

Configuration example

Ниже приведён пример на основе сценария изменения ресурса DestinationRule для настройки различных политик балансировки нагрузки для нескольких портов сервиса.

Scenario

Сервис s1 имеет 2 порта: 80 (протокол HTTP) и 81 (протокол TCP). При создании политики балансировки нагрузки для сервиса через UI поддерживается только одинаковая политика для всех портов (например, балансировка по наименьшему количеству запросов). Вы можете изменить ресурс DestinationRule для s1, чтобы настроить разные политики балансировки нагрузки для портов 80 и 81 соответственно.

Procedure

  1. После входа в платформу Service Mesh нажмите Services в левой навигационной панели.

  2. Нажмите на имя сервиса, который нужно настроить.

  3. На вкладке Policies нажмите Create Policy > Load Balancer.

  4. После выбора политики Minimum Request Load нажмите Create.

    Подсказка: После успешного создания политики балансировки нагрузки компонент Controller автоматически создаст ресурс DestinationRule с именем asm-<service name>. Вы можете просмотреть YAML этого ресурса на странице Resources.

  5. Нажмите на переключатель вида продукта в верхней навигационной панели, чтобы перейти в Platform Management.

  6. В левой навигационной панели выберите Clusters > Resources.

    Подсказка: Вы можете переключать кластеры через верхнюю навигацию.

  7. В пространстве имён, где расположен сервис, найдите ресурс DestinationRule с именем asm-<service name>.

  8. Нажмите > Update справа от DestinationRule.

    В соответствии с примером ниже добавьте аннотацию asm.cpaas.io/user-managed: "true" и настройте политики балансировки нагрузки для портов сервиса отдельно.

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      annotations:
        asm.cpaas.io/user-managed: "true"  # Add annotation
        cpaas.io/operator: admin@cpaas.io
        cpaas.io/updated-at: 2024-03-08T03:17:00Z
      creationTimestamp: 2024-03-07T10:22:11Z
      generation: 2
      labels:
        asm.cpaas.io/creator: asm-controller
        asm.cpaas.io/hostname: s1
        servicemesh.cpaas.io/resource: microservice
      name: asm-s1
      namespace: foo-ovn
      ownerReferences:
        - apiVersion: v1
          kind: Endpoints
          name: s1
          uid: b8ae24ba-b0ae-4432-a42c-09619a798963
      resourceVersion: "24795213"
      uid: 99fddf65-4812-4948-a92b-62de33fa3b4f
    spec:
      host: s1
      trafficPolicy:
        loadBalancer:
          simple: LEAST_CONN  # Default to the least request load balancing policy for all ports of the service
        portLevelSettings: # Configure session affinity load balancing policy based on user source IP for port 81
          - loadBalancer:
              consistentHash:
                useSourceIp: true
            port:
              number: 81