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