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