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

Содержание

Overview

Background information

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

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

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

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

  • Компонент service mesh 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 в будущем платформа не будет выполнять обновление совместимости для ресурсов, не управляемых Controller. Вам потребуется самостоятельно оценивать совместимость и выполнять необходимые действия.

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. В namespace, где расположен сервис, найдите ресурс 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