Развертывание 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.