• Русский
  • Настройка правил 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-портах с использованием сертификата по умолчанию