• Русский
  • Waypoint proxies

    После развертывания прокси ZTunnel можно внедрять waypoint proxies для обеспечения расширенных возможностей обработки на уровне Layer 7.

    Ambient mode разделяет функциональность Istio на два отдельных слоя:

    • безопасный L4 оверлей, управляемый прокси ZTunnel
    • L7 слой, управляемый опциональными waypoint proxies

    Waypoint proxy — это прокси на базе Envoy, который выполняет обработку L7 для рабочих нагрузок, работающих в ambient mode. Он функционирует как шлюз для конкретного ресурса — например, namespace, сервиса или pod — и может устанавливаться, обновляться и масштабироваться независимо от приложений, которые он обслуживает. Конфигурация основана на Kubernetes Gateway API.

    В отличие от модели sidecar, где у каждой рабочей нагрузки свой прокси Envoy, waypoint proxies снижают потребление ресурсов, обслуживая несколько рабочих нагрузок, которые разделяют одну и ту же границу безопасности (например, все рабочие нагрузки в namespace).

    Waypoint назначения обеспечивает применение политик, выступая в роли шлюза: весь входящий трафик, направленный к ресурсу, такому как namespace, сервис или pod, проходит через waypoint перед достижением назначения.

    Прокси узла ZTunnel обрабатывает функции L4, включая шифрование mTLS, обработку L4 трафика и телеметрию. ZTunnel и waypoint proxies взаимодействуют через HBONE (HTTP-Based Overlay Network) — протокол, который туннелирует трафик поверх HTTP/2 CONNECT с mTLS на порту 15008.

    Рассмотрите возможность развертывания waypoint proxy, если вашим рабочим нагрузкам необходимы следующие возможности L7:

    • Управление трафиком — расширенный HTTP-маршрутизатор, балансировка нагрузки, circuit breaking, ограничение скорости, fault injection, повторные попытки и тайм-ауты
    • Безопасность — политики авторизации на основе атрибутов L7, таких как тип запроса или HTTP-заголовки
    • Наблюдаемость — HTTP-метрики, логирование доступа и трассировка трафика приложений

    Развертывание waypoint proxy

    Вы можете развернуть waypoint proxy в namespace приложения Bookinfo, чтобы маршрутизировать трафик через Istio ambient data plane и применять политики L7.

    Требования

    • Установлен Alauda Service Mesh Operator версии 2.1.1 или выше.
    • Активная сессия ACP CLI (kubectl) с правами администратора кластера (cluster-admin).
    • Локально установлен istioctl для выполнения инструкций.
    • Istio развернут в ambient mode.
    • Развернуто примерное приложение Bookinfo (для следующего примера).
    • К namespace назначения применена метка istio.io/dataplane-mode=ambient.

    Процедура

    1. Создайте waypoint proxy в namespace bookinfo. Сохраните следующий манифест как waypoint.yaml:

      apiVersion: gateway.networking.k8s.io/v1
      kind: Gateway
      metadata:
        labels:
          istio.io/waypoint-for: service
        name: waypoint
        namespace: bookinfo
      spec:
        gatewayClassName: istio-waypoint
        listeners:
          - name: mesh
            port: 15008
            protocol: HBONE
      1. Метка istio.io/waypoint-for: service указывает, что этот waypoint обрабатывает трафик для сервисов. Значение метки определяет тип обрабатываемого трафика. Подробнее см. Waypoint traffic types (документация Istio).
    2. Примените кастомный ресурс waypoint (CR):

      kubectl apply -f waypoint.yaml
    3. Зарегистрируйте namespace bookinfo для использования waypoint:

      kubectl label namespace bookinfo istio.io/use-waypoint=waypoint

      После регистрации namespace все запросы от pod-ов в ambient data plane к сервисам в bookinfo будут маршрутизироваться через waypoint для обработки L7 и применения политик.

    Проверка

    Убедитесь, что waypoint proxy связан со всеми сервисами в namespace bookinfo:

    istioctl -n ztunnel ztunnel-config services

    Пример вывода

    NAMESPACE    SERVICE NAME   SERVICE VIP  WAYPOINT ENDPOINTS
    bookinfo     details        10.4.21.11   waypoint 1/1
    bookinfo     details-v1     10.4.84.241  waypoint 1/1
    bookinfo     productpage    10.4.192.245 waypoint 1/1
    bookinfo     productpage-v1 10.4.35.101  waypoint 1/1
    bookinfo     ratings        10.4.203.217 waypoint 1/1
    bookinfo     ratings-v1     10.4.156.208 waypoint 1/1
    bookinfo     reviews        10.4.188.144 waypoint 3/3
    bookinfo     reviews-v1     10.4.247.94  waypoint 1/1
    bookinfo     reviews-v2     10.4.147.169 waypoint 1/1
    bookinfo     reviews-v3     10.4.203.165 waypoint 1/1
    bookinfo     waypoint       10.4.15.65   None     1/1
    istio-system istiod         10.4.110.96  None     1/1
    NOTE

    Вы также можете настроить использование waypoint только для конкретных сервисов или pod-ов, добавив соответствующие метки к сервису или pod. При явной регистрации pod добавьте метку istio.io/waypoint-for: workload к соответствующему ресурсу gateway.

    Включение использования waypoint между namespace

    Cross-namespace waypoint позволяет ресурсам из одного namespace маршрутизировать трафик через waypoint, развернутый в другом namespace.

    Процедура

    1. Добавьте метку istio-discovery=enabled к namespace common-infrastructure:

      kubectl label namespace common-infrastructure istio-discovery=enabled
    2. Создайте ресурс Gateway, который разрешит рабочим нагрузкам в namespace bookinfo использовать waypoint из namespace common-infrastructure. Сохраните следующий манифест как waypoint-common.yaml:

      apiVersion: gateway.networking.k8s.io/v1
      kind: Gateway
      metadata:
        name: waypoint-common
        namespace: common-infrastructure
      spec:
        gatewayClassName: istio-waypoint
        listeners:
          - name: mesh
            port: 15008
            protocol: HBONE
            allowedRoutes:
              namespaces:
                from: Selector
                selector:
                  matchLabels:
                    kubernetes.io/metadata.name: bookinfo
    3. Примените cross-namespace waypoint:

      kubectl apply -f waypoint-common.yaml
    4. Добавьте метки, необходимые для использования cross-namespace waypoint:

      • Укажите namespace, где расположен waypoint:

        kubectl label namespace bookinfo istio.io/use-waypoint-namespace=common-infrastructure
      • Укажите waypoint для использования:

        kubectl label namespace bookinfo istio.io/use-waypoint=waypoint-common

    Дополнительные ресурсы