Открытие сервиса через ресурсы Istio Gateway и VirtualService
В этом руководстве показано, как использовать ресурсы Istio Gateway и VirtualService для настройки шлюза, развернутого с помощью внедрения gateway injection. Эти ресурсы настраивают шлюз для открытия сервиса внутри mesh для трафика извне. После этого вы открываете шлюз для трафика, приходящего извне кластера, изменяя тип Service шлюза на LoadBalancer.
Содержание
Предварительные требования
- Шлюз Istio установлен с использованием gateway injection.
Процедура
-
Создайте новое пространство имён с именем
httpbin, выполнив команду: -
Включите внедрение sidecar для пространства имён. Если в вашей конфигурации используется стратегия обновления
InPlace, выполните команду:NOTEЕсли вы используете стратегию обновления
RevisionBased, выполните следующие команды:-
Чтобы узнать ваш
<revision-name>, выполните:Пример вывода:
-
Пометьте пространство имён с помощью имени ревизии, чтобы включить внедрение sidecar:
-
-
Разверните пример сервиса
httpbin, выполнив команду: -
Создайте файл с именем
httpbin-gw.yaml, содержащий определение ресурса IstioGateway. Этот ресурс настраивает прокси шлюза на открытие порта 80 (HTTP) для хостаhttpbin.example.com.- Установите
selectorтак, чтобы он соответствовал уникальной метке или меткам, определённым в шаблоне pod для прокси шлюзаDeployment. По умолчанию конфигурация IstioGatewayприменяется к подходящим pod шлюза во всех пространствах имён. - В поле
hostsперечислите адреса, которые клиенты могут использовать для доступа к mesh-сервису на соответствующем порту.
- Установите
-
Примените YAML-файл командой:
-
Создайте ещё один YAML-файл с именем
httpbin-vs.yamlдля ресурсаVirtualService. ЭтотVirtualServiceопределит правила маршрутизации трафика от прокси шлюза к сервисуhttpbin.- Определите
hosts, к которым будут применяться правила маршрутизацииVirtualService. Указанныеhostsдолжны быть открыты ресурсом IstioGateway, к которому прикреплён этотVirtualService. - Привяжите
VirtualServiceк ресурсу IstioGatewayиз предыдущего шага, добавив имяGatewayв список gateways. - Направьте совпадающий трафик к ранее развернутому сервису
httpbin, определивdestination, который указываетhostиportсервисаhttpbin.
- Определите
-
Примените YAML-файл командой:
Проверка
-
Создайте пространство имён для клиента
curl, выполнив команду: -
Разверните клиента
curlс помощью команды: -
Сохраните имя pod клиента
curlв переменнуюCURL_POD, выполнив команду: -
С клиента
curlотправьте запрос к эндпоинту/headersприложенияhttpbinчерез сервис ingress gateway. Установите заголовокHostвhttpbin.example.com, чтобы он соответствовал хосту, указанному в IstioGatewayиVirtualService. Выполните команду: -
В ответе должен быть статус HTTP
200 OK, что подтверждает успешность запроса.Пример вывода
-
Отправьте ещё один запрос к эндпоинту, для которого в
VirtualServicehttpbinнет соответствующего совпадения URI prefix, выполнив команду:В ответе должен быть статус
404 Not Found. Это ожидаемый результат, поскольку для эндпоинта/getне определено совпадение URI prefix вVirtualServicehttpbin.Пример вывода
-
Откройте прокси шлюза для трафика извне кластера, изменив тип его
ServiceнаLoadBalancer: -
Убедитесь, что сервис
httpbinдоступен извне кластера через внешний hostname или IP-адрес сервиса шлюза. Убедитесь, что переменнаяINGRESS_HOSTкорректно установлена для вашей среды кластера.a. Установите переменную
INGRESS_HOSTкомандой:В некоторых средах балансировщик нагрузки может быть доступен по имени хоста, а не по IP-адресу. В этом случае значение
EXTERNAL-IPingress gateway не будет IP-адресом, а именем хоста, и приведённая выше команда не сможет установить переменную окруженияINGRESS_HOST. Используйте следующую команду для корректировки значенияINGRESS_HOST:b. Отправьте запрос
curlк сервисуhttpbinчерез хост шлюза, выполнив команду: -
Проверьте, что в ответе присутствует статус
HTTP/1.1 200 OK, что подтверждает успешность запроса.