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