Настройка правил ALB

Содержание

Введение

Что такое правило?

Правило — это Custom Resource (CR), который определяет, как входящие запросы сопоставляются и обрабатываются ALB.

Ingress, обрабатываемые ALB, могут быть автоматически преобразованы в правила.

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

установка alb и ft

Быстрая демонстрация правила

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

NOTE

правило должно быть привязано к frontend и alb через метки.

apiVersion: crd.alauda.io/v1
kind: Rule
metadata:
  labels:
    alb2.cpaas.io/frontend: alb-demo-00080
    alb2.cpaas.io/name: alb-demo
  name: alb-demo-00080-test
  namespace: cpaas-system
spec:
  backendProtocol: "https"
  certificate_name: "a/b"
  dslx:
    - type: URL
      values:
        - - STARTS_WITH
          - /
  priority: 4
  serviceGroup:
    services:
      - name: hello-world
        namespace: default
        port: 80
        weight: 100
  1. Обязательно, указывает Frontend, к которому принадлежит это правило.
  2. Обязательно, указывает ALB, к которому принадлежит это правило.
  3. backendProtocol
  4. certificate_name
  5. dslx
  6. Чем меньше число, тем выше приоритет.
  7. serviceGroup

сопоставление запроса с dslx и приоритетом

dslx

DSLX — это предметно-ориентированный язык, используемый для описания критериев сопоставления. Например, правило ниже сопоставляет запрос, который удовлетворяет всем следующим условиям:

  • url начинается с /app-a или /app-b
  • метод — post
  • параметр url с ключом group равен vip
  • host соответствует *.app.com
  • заголовок location равен east-1 или east-2
  • есть cookie с именем uid
  • исходные IP находятся в диапазоне 1.1.1.1-1.1.1.100
dslx:
  - type: METHOD
    values:
      - - EQ
        - POST
  - type: URL
    values:
      - - STARTS_WITH
        - /app-a
      - - STARTS_WITH
        - /app-b
  - type: PARAM
    key: group
    values:
      - - EQ
        - vip
  - type: HOST
    values:
      - - ENDS_WITH
        - .app.com
  - type: HEADER
    key: LOCATION
    values:
      - - IN
        - east-1
        - east-2
  - type: COOKIE
    key: uid
    values:
      - - EXIST
  - type: SRC_IP
    values:
      - - RANGE
        - "1.1.1.1"
        - "1.1.1.100"

приоритет

Приоритет — это целое число от 0 до 10, где меньшие значения означают более высокий приоритет. Чтобы настроить приоритет правила в ingress, можно использовать следующий формат аннотации:

# alb.cpaas.io/ingress-rule-priority-$rule_index-$path_index
alb.cpaas.io/ingress-rule-priority-0-0: "10"

Для правил достаточно задать приоритет напрямую в .spec.priority целочисленным значением.

Действия

После того, как запрос сопоставлен с правилом, к запросу можно применить следующие действия

ФункцияОписаниеСсылка
TimeoutНастройка параметров таймаута для запросов.timeout
RedirectПеренаправление входящих запросов на указанный URL.redirect
CORSВключение Cross-Origin Resource Sharing (CORS) для приложения.cors
Header ModificationПозволяет изменять заголовки запроса или ответа.header modification
URL RewriteПерезаписывает URL входящих запросов перед их пересылкой.url-rewrite
WAFИнтеграция Web Application Firewall (WAF) для повышения безопасности.waf
OTELВключение OpenTelemetry (OTEL) для распределённого трассирования и мониторинга.otel
KeepaliveВключение или отключение функции keepalive для приложения.keepalive

Backend

протокол backend

По умолчанию протокол backend установлен в HTTP. Если требуется использовать TLS повторное шифрование, можно настроить HTTPS.

Группа сервисов и политика сессионной аффинности

В правиле можно настроить один или несколько сервисов.

По умолчанию ALB использует алгоритм round-robin (RR) для распределения запросов между backend-сервисами. Однако можно назначать веса отдельным сервисам или выбрать другой алгоритм балансировки нагрузки.

Подробнее смотрите в разделе Balance Algorithm.

Создание правила

Использование веб-консоли

  1. Перейдите в Container Platform.
  2. В левой навигационной панели выберите Network > Load Balancing.
  3. Кликните по имени балансировщика нагрузки.
  4. Кликните по имени порта слушателя.
  5. Нажмите Add Rule.
  6. Используйте описания ниже для настройки соответствующих параметров.
  7. Нажмите Add.

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

Использование CLI

kubectl apply -f alb-rule-demo.yaml -n cpaas-system

HTTPS

Если протокол frontend (ft) — HTTPS или GRPCS, правило также может быть настроено на использование HTTPS. Сертификат можно указать либо в правиле, либо в ingress, чтобы сопоставить сертификат для конкретного порта.

Поддерживается termination, а также повторное шифрование, если протокол backend — HTTPS. Однако вы не можете указывать сертификат для связи с backend-сервисом.

Аннотация сертификата в Ingress

Сертификаты могут ссылаться на секреты из других namespace через аннотацию.

alb.networking.cpaas.io/tls: qq.com=cpaas-system/dex.tls,qq1.com=cpaas-system/dex1.tls

Сертификат в правиле

В .spec.certificate_name формат: $secret_namespace/$secret_name

Режим TLS

Edge Mode

В режиме edge клиент общается с ALB по HTTPS, а ALB общается с backend-сервисами по HTTP. Для этого:

  1. создайте ft с протоколом https
  2. создайте правило с backendProtocol http и укажите сертификат через .spec.certificate_name

Re-encrypt Mode

В режиме re-encrypt клиент общается с ALB по HTTPS, а ALB общается с backend-сервисами по HTTPS. Для этого:

  1. создайте ft с протоколом https
  2. создайте правило с backendProtocol https и укажите сертификат через .spec.certificate_name

Ingress

синхронизация ingress

Каждый ALB создаёт IngressClass с таким же именем и обрабатывает ingress в пределах одного проекта.

Если namespace ingress имеет метку вида cpaas.io/project: demo, это означает, что ingress принадлежит проекту demo.

ALB, у которых в конфигурации .spec.config.projects указан проект demo, автоматически преобразуют эти ingress в правила.

NOTE

ALB слушает ingress и автоматически создаёт Frontend или Rule. Поле source определяется следующим образом:

  1. spec.source.type в настоящее время поддерживает только ingress.
  2. spec.source.name — имя ingress.
  3. spec.source.namespace — namespace ingress.

стратегия ssl

Для ingress без настроенных сертификатов ALB предоставляет стратегию использования сертификата по умолчанию.

Вы можете настроить Custom Resource ALB следующими параметрами:

  • .spec.config.defaultSSLStrategy: определяет SSL-стратегию для ingress без сертификатов
  • .spec.config.defaultSSLCert: задаёт сертификат по умолчанию в формате $secret_ns/$secret_name

Доступные SSL-стратегии:

  • Never: не создавать правила на HTTPS-портах (поведение по умолчанию)
  • Always: создавать правила на HTTPS-портах с использованием сертификата по умолчанию