• Русский
  • Развертывание ALB

    ALB

    ALB — это кастомный ресурс, представляющий балансировщик нагрузки. alb-operator, который по умолчанию встроен во все кластеры, отслеживает операции создания/обновления/удаления ресурсов ALB и в ответ создает соответствующие Deployment и Service.

    Для каждого ALB создаётся соответствующий Deployment, который отслеживает все Frontend и Rule, прикрепленные к этому ALB, и маршрутизирует запросы к backend на основе этих конфигураций.

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

    Высокая доступность Load Balancer требует VIP. Пожалуйста, обратитесь к разделу Настройка VIP.

    Конфигурация ALB

    Конфигурация ALB состоит из трёх частей.

    # test-alb.yaml
    apiVersion: crd.alauda.io/v2beta1
    kind: ALB2
    metadata:
      name: alb-demo
      namespace: cpaas-system
    spec:
      address: 192.168.66.215
      config:
        vip:
          enableLbSvc: false
          lbSvcAnnotations: {}
        networkMode: host
        nodeSelector:
          cpu-model.node.kubevirt.io/Nehalem: "true"
        replicas: 1
        resources:
          alb:
            limits:
              cpu: 200m
              memory: 256Mi
            requests:
              cpu: 200m
              memory: 256Mi
          limits:
            cpu: 200m
            memory: 256Mi
          requests:
            cpu: 200m
            memory: 256Mi
        projects:
          - ALL_ALL
      type: nginx

    Конфигурация ресурсов

    Поля, связанные с ресурсами, описывают конфигурацию развертывания alb.

    ПолеТипОписание
    .spec.config.nodeSelectormap[string]stringселектор узлов для alb
    .spec.config.replicasint, необязательно, по умолчанию 3количество реплик alb
    .spec.config.resources.limitsk8s container-resource, необязательнолимиты контейнера nginx alb
    .spec.config.resources.requestsk8s container-resource, необязательнозапросы контейнера nginx alb
    .spec.config.resources.alb.limitsk8s container-resource, необязательнолимиты контейнера alb
    .spec.config.resources.alb.requestsk8s container-resource, необязательнозапросы контейнера alb
    .spec.config.antiAffinityKeystring, необязательно, по умолчанию localk8s antiAffinityKey

    Конфигурация сети

    Поля, связанные с сетью, описывают способ доступа к ALB. Например, в режиме host alb использует hostnetwork, и доступ к ALB осуществляется по IP узла.

    ПолеТипОписание
    .spec.config.networkModestring: host или container, необязательно, по умолчанию hostВ режиме container оператор создаёт Service типа LoadBalancer и использует его адрес как адрес ALB.
    .spec.addressstring, обязательноможно вручную указать адрес alb
    .spec.config.vip.enableLbSvcbool, необязательноАвтоматически true в режиме container.
    .spec.config.vip.lbSvcAnnotationsmap[string]string, необязательноДополнительные аннотации для Service типа LoadBalancer.

    Конфигурация проекта

    ПолеТип
    .spec.config.projects[]string, обязательно
    .spec.config.portProjectsstring, необязательно
    .spec.config.enablePortProjectbool, необязательно

    Добавление ALB в проект означает:

    1. В веб-интерфейсе только пользователи данного проекта могут найти и настроить этот ALB.
    2. Этот ALB будет обрабатывать ingress-ресурсы, принадлежащие этому проекту. Пожалуйста, обратитесь к ingress-sync.
    3. В веб-интерфейсе правила, созданные в проекте X, не будут доступны для просмотра или настройки в проекте Y.

    Если вы включаете порт-проект и назначаете диапазон портов проекту, это означает:

    1. Вы не можете создавать порты, не входящие в назначенный проекту диапазон портов.

    Настройка параметров

    В alb CR есть некоторые глобальные настройки, которые можно изменить.

    Операции с ALB

    Создание

    Через веб-консоль

    Некоторые общие настройки доступны в веб-интерфейсе. Следуйте этим шагам для создания балансировщика нагрузки:

    1. Перейдите в раздел Administrator.
    2. В левой боковой панели нажмите Network Management > Load Balancer.
    3. Нажмите Create Load Balancer.

    Каждое поле ввода в веб-интерфейсе соответствует полю CR:

    ПараметрОписание
    Assigned Address.spec.address
    Allocated ByInstance означает режим проекта, где можно выбрать проект ниже, port — режим порт-проекта, где можно назначить диапазон портов после создания alb
    Через CLI
    kubectl apply -f test-alb.yaml -n cpaas-system

    Обновление

    Через веб-консоль
    NOTE

    Обновление балансировщика нагрузки приведёт к прерыванию сервиса на 3–5 минут. Пожалуйста, выбирайте подходящее время для этой операции!

    1. Войдите в Administrator.

    2. В левой навигационной панели нажмите Network Management > Load Balancer.

    3. Нажмите ⋮ > Update.

    4. Обновите конфигурацию сети и ресурсов по необходимости.

      • Пожалуйста, устанавливайте спецификации разумно в соответствии с бизнес-требованиями. Также можно обратиться к соответствующему руководству Как правильно выделять CPU и память.

      • Внутренний роутинг поддерживает только обновление из состояния Disabled в Enabled.

    5. Нажмите Update.

    Удаление

    Через веб-консоль
    NOTE

    После удаления балансировщика нагрузки связанные порты и правила также будут удалены и не подлежат восстановлению.

    1. Войдите в Administrator.

    2. В левой навигационной панели нажмите Network Management > Load Balancer.

    3. Нажмите ⋮ > Delete и подтвердите.

    Через CLI
    kubectl delete alb2 alb-demo -n cpaas-system

    Порты слушателя (Frontend)

    Frontend — это кастомный ресурс, который определяет порт слушателя и протокол для ALB. Поддерживаемые протоколы: L7 (http|https|grpc|grpcs) и L4 (tcp|udp). В L4 Proxy frontend используется для прямой настройки backend-сервиса. В L7 Proxy frontend настраивает порты слушателя, а backend-сервис настраивается через rule. Если необходимо добавить HTTPS-порт слушателя, следует также обратиться к администратору для назначения TLS-сертификата текущему проекту для шифрования.

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

    Сначала создайте ALB.

    Конфигурация Frontend

    # alb-frontend-demo.yaml
    apiVersion: crd.alauda.io/v1
    kind: Frontend
    metadata:
      labels:
        alb2.cpaas.io/name: alb-demo
      name: alb-demo-00080
      namespace: cpaas-system
    spec:
      port: 80
      protocol: http
      certificate_name: ""
      backendProtocol: "http"
      serviceGroup:
        session_affinity_policy: ""
        services:
          - name: hello-world
            namespace: default
            port: 80
            weight: 100
    1. alb label: Обязательно, указывает экземпляр ALB, к которому принадлежит этот Frontend.

    2. имя frontend: Формат $alb_name-$port.

    3. port: порт, на котором слушает.

    4. protocol: протокол, используемый на этом порту.

      • L7 протоколы https|http|grpcs|grpc и L4 протоколы tcp|udp.
      • При выборе HTTPS обязательно должен быть добавлен сертификат; для протокола gRPC добавление сертификата необязательно.
      • При выборе протокола gRPC backendProtocol по умолчанию gRPC, который не поддерживает сохранение сессии. Если для gRPC установлен сертификат, балансировщик нагрузки снимет сертификат gRPC и перенаправит незашифрованный трафик gRPC на backend-сервис.
      • В кластере Google GKE балансировщик нагрузки одного типа контейнерной сети не может одновременно иметь протоколы слушателя TCP и UDP.
    5. certificate_name: для протоколов grpcs и https, указывает используемый сертификат по формату $secret_ns/$secret_name.

    6. backendProtocol: протокол, используемый backend-сервисом.

    7. По умолчанию serviceGroup:

      • L4 proxy: обязательно. ALB напрямую перенаправляет трафик в группу сервисов по умолчанию.
      • L7 proxy: необязательно. ALB сначала сопоставляет правила на этом Frontend; если совпадений нет, используется группа сервисов по умолчанию.
    8. session_affinity_policy

    Операции с Frontend

    Создание

    Через веб-консоль

    1. Перейдите в Container Platform.

    2. В левой навигационной панели нажмите Network > Load Balancing.

    3. Нажмите на имя балансировщика нагрузки, чтобы перейти на страницу деталей.

    4. Нажмите Add Port.

    Каждое поле ввода в веб-интерфейсе соответствует полю CR

    ПараметрОписание
    Session Affinity.spec.serviceGroup.session_affinity_policy
    Через CLI
    kubectl apply -f alb-frontend-demo.yaml -n cpaas-system

    Последующие действия

    Для трафика с портов HTTP, gRPC и HTTPS, помимо группы внутреннего роутинга по умолчанию, можно задать более разнообразные правила сопоставления backend-сервисов rules. Балансировщик нагрузки сначала сопоставит соответствующий backend-сервис согласно заданным правилам; если совпадений не будет, он сопоставит backend-сервисы, соответствующие упомянутой группе внутреннего роутинга.

    Связанные операции

    Вы можете нажать на значок ⋮ справа на странице списка или нажать Actions в правом верхнем углу страницы деталей, чтобы при необходимости обновить маршрут по умолчанию или удалить порт слушателя.

    NOTE

    Если метод выделения ресурсов балансировщика нагрузки — Port, только администраторы могут удалять связанные порты слушателя в представлении Administrator.

    Логи и мониторинг

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

    Просмотр логов

    1. Перейдите в Administrator.

    2. В левой навигационной панели нажмите Network Management > Load Balancer.

    3. Нажмите на Имя Load Balancer.

    4. Во вкладке Logs просмотрите логи работы балансировщика нагрузки с точки зрения контейнера.

    Метрики мониторинга

    NOTE

    В кластере, где расположен балансировщик нагрузки, должны быть развернуты сервисы мониторинга.

    1. Перейдите в Administrator.

    2. В левой навигационной панели нажмите Network Management > Load Balancer.

    3. Нажмите на Имя Load Balancer.

    4. Во вкладке Monitoring просмотрите информацию о тенденциях метрик балансировщика нагрузки с точки зрения узла.

      • Usage Rate: текущая загрузка CPU и памяти балансировщика нагрузки на данном узле.

      • Throughput: общий входящий и исходящий трафик экземпляра балансировщика нагрузки.

    Для более подробной информации о метриках мониторинга смотрите ALB Monitoring.