• Русский
  • Как настроить и применить изменения конфигурации к ресурсам 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