Открытие сервиса через Kubernetes Gateway API в ambient-режиме
В ambient-режиме Istio Kubernetes Gateway API является рекомендуемым способом настройки маршрутизации входящего трафика. Вы можете создать ресурсы Gateway и HTTPRoute для развертывания шлюза, который делает сервисы внутри mesh доступными для внешнего трафика.
Содержание
Waypoint-прокси для маршрутизации уровня 7Предварительные требованияПроцедураПроверкаОчисткаWaypoint-прокси для маршрутизации уровня 7
Для применения политик маршрутизации уровня 7 (L7) — включая маршрутизацию по пути и сопоставление заголовков — разверните waypoint-прокси в namespace, содержащем целевой сервис. Waypoint-прокси обрабатывает L7-трафик и применяет правила маршрутизации, определённые через ресурсы HTTPRoute и GRPCRoute.
В ambient-режиме ресурсы VirtualService имеют ограниченную совместимость и не должны использоваться вместе с конфигурацией Gateway API. Используйте ресурсы Kubernetes Gateway API как стандартный способ маршрутизации трафика в ambient-режиме.
Предварительные требования
- Установлен оператор Alauda Service Mesh v2.
- Ресурсы
IstioиIstioCNIнастроены с профилем ambient. - Создан ресурс
Ztunnel. - Подтвердите совместимость с ядром Linux.
- Ваш Kubernetes-кластер поддерживает внешние балансировщики нагрузки (то есть сервисы типа
LoadBalancer).
Процедура
-
Создайте namespace с именем
httpbin: -
Добавьте метку
istio-discovery=enabledв namespacehttpbin: -
Включите ambient-режим для namespace, применив метку режима dataplane:
-
Разверните пример сервиса
httpbin: -
Создайте файл
httpbin-waypoint.yamlдля определения waypoint-прокси. Этот ресурсGatewayиспользует класс шлюзаistio-waypointдля обработки L7-трафика сервисов в namespace.- Метка
istio.io/waypoint-for: serviceуказывает, что этот waypoint обрабатывает трафик для сервисов. Значение метки определяет тип обрабатываемого трафика. Подробнее см. Waypoint traffic types (документация Istio). - Указывает класс шлюза
istio-waypoint, который разворачивает waypoint-прокси вместо стандартного ingress-шлюза.
- Метка
-
Примените конфигурацию waypoint-прокси:
-
Пометьте сервис
httpbin, чтобы направлять входящий трафик через waypoint-прокси:NOTEМетка
istio.io/ingress-use-waypoint=trueгарантирует, что трафик, поступающий из ingress-шлюза, проходит через waypoint-прокси, позволяя применять политики L7, настроенные на waypoint, до того, как трафик достигнет сервисаhttpbin. -
Свяжите все сервисы в namespace с waypoint-прокси, пометив namespace:
-
Создайте файл
httpbin-gw.yaml, определяющий ресурс KubernetesGateway. Он настраивает gateway-прокси для приёма HTTP-трафика на порту 80 для хостаhttpbin.example.com.- Указывает тип
Serviceдля шлюза; по умолчаниюLoadBalancer. - Указывает виртуальное имя хоста, которое клиенты используют при доступе к mesh-сервису на этом порту.
- Указывает тип
-
Примените конфигурацию шлюза:
-
Создайте файл
httpbin-ingress-hr.yaml, определяющий ресурсHTTPRouteдля ingress-шлюза. Этот ресурс задаёт, как трафик маршрутизируется от gateway-прокси к сервисуhttpbin.- Привязывает этот
HTTPRouteк KubernetesGateway, созданному на предыдущем шаге. - Маршрутизирует подходящий трафик к сервису
httpbinна порт 8000.
- Привязывает этот
-
Примените ingress HTTPRoute:
-
Создайте файл
httpbin-waypoint-hr.yaml, определяющий ресурсHTTPRouteдля waypoint-прокси. Этот ресурс настраивает правила маршрутизации по пути, которые применяет waypoint.- Привязывает этот
HTTPRouteк сервисуhttpbin. В сочетании с меткойistio.io/ingress-use-waypoint=trueэто настраивает правила маршрутизации L7, которые применяет waypoint-прокси для трафика, направленного к сервису. - Перенаправляет подходящий трафик к сервису
httpbinна порт 8000.
- Привязывает этот
-
Примените waypoint HTTPRoute:
NOTEВ этой конфигурации трафик из ingress-шлюза проходит через waypoint-прокси благодаря метке
istio.io/ingress-use-waypoint=trueна сервисе. Затем waypointHTTPRouteприменяет политики маршрутизации по пути до того, как трафик достигнет сервисаhttpbin. -
Дождитесь готовности waypoint-прокси:
Проверка
-
Создайте namespace для клиента
curl: -
Разверните клиент
curl: -
Добавьте метку
istio-discovery=enabledв namespacecurl: -
Включите ambient-режим для namespace
curl: -
Сохраните имя pod клиента
curlв переменную: -
С клиента
curlотправьте запрос к эндпоинту/headersприложенияhttpbinчерез ingress-шлюзService. Установите заголовокHostвhttpbin.example.com, чтобы он соответствовал хосту, указанному в ресурсах KubernetesGatewayиHTTPRoute:В ответе должен быть статус
HTTP/1.1 200 OK, что означает успешную обработку запроса.Пример вывода
-
Отправьте запрос к эндпоинту без соответствующего префикса URI в waypoint
HTTPRoute:В ответе будет
HTTP/1.1 404 Not Found, что ожидаемо, так как путь/getне имеет соответствующего префикса в waypointHTTPRoute.Пример вывода
-
Откройте gateway-прокси для трафика вне кластера, изменив тип
Serviceна значение по умолчаниюLoadBalancer: -
Проверьте доступность сервиса
httpbinизвне кластера, используя внешний hostname или IP-адрес gatewayService. Установите переменнуюINGRESS_HOSTв соответствии с вашей средой кластера.a. Установите переменную
INGRESS_HOST:b. Установите переменную
INGRESS_PORT:c. Отправьте запрос
curlк сервисуhttpbin, используя хост gateway:INFOЕсли
$INGRESS_HOST— это IPv6-адрес, заключите его в квадратные скобки при формировании URL. Например: -
Убедитесь, что в ответе присутствует статус
HTTP/1.1 200 OK, что означает успешное выполнение запроса.Пример вывода
Очистка
Удалите ресурсы, созданные в этой процедуре: