Вы можете использовать Kubernetes Gateway API для создания ресурсов Gateway
и HTTPRoute
для развертывания шлюза. Эти ресурсы настраивают шлюз так, чтобы сделать сервис внутри mesh доступным для трафика извне. Затем вы можете изменить Service
шлюза на LoadBalancer
, чтобы открыть его для трафика вне кластера.
Создайте новое пространство имён с именем httpbin
с помощью следующей команды:
Разверните пример сервиса httpbin
с помощью этой команды:
Создайте файл с именем httpbin-k8s-gw.yaml
, который определяет ресурс Kubernetes Gateway
. Это настроит прокси-шлюзы для открытия порта 80 (HTTP) для хоста httpbin.example.com
.
По умолчанию каждый Gateway
автоматически создаёт Service
и Deployment
. Они будут иметь имена в формате <Gateway name>-<GatewayClass name>
(за исключением GatewayClass
с именем istio-waypoint
, который не добавляет суффикс). Эти конфигурации будут автоматически обновляться при изменении Gateway
(например, при добавлении нового порта).
Пример файла ресурса gateway
Service
для шлюза; по умолчанию LoadBalancer
.Примените YAML-файл с помощью команды:
Создайте YAML-файл с именем httpbin-hr.yaml
, который определяет ресурс HTTPRoute
. Этот ресурс задаёт правила маршрутизации трафика от прокси-шлюза к сервису httpbin
.
Пример файла HTTPRoute
HTTPRoute
с ранее созданным Kubernetes Gateway
, добавляя имя шлюза в список.httpbin
, определяя запись backendRefs
с именем и портом сервиса httpbin
.Примените YAML-файл, выполнив команду:
Убедитесь, что сервис Gateway API готов и имеет выделенный адрес, выполнив команду:
Создайте пространство имён для клиента curl
, выполнив команду:
Разверните клиента curl
с помощью следующей команды:
Установите переменную CURL_POD
с именем pod клиента curl
с помощью команды:
С клиента curl
отправьте запрос к эндпоинту /headers
приложения httpbin
через сервис ingress gateway. Установите заголовок Host
в httpbin.example.com
, чтобы он совпадал с хостом, указанным в ресурсах Kubernetes Gateway
и HTTPROUTE
. Выполните следующую команду curl
:
В ответе должен быть статус HTTP 200 OK
, что указывает на успешный запрос.
Пример вывода
Отправьте запрос curl
к эндпоинту без совпадающего префикса URI в HTTPROUTE
сервиса httpbin
, выполнив команду:
В ответе будет статус 404 Not Found
. Это ожидаемо, так как эндпоинт /get
не имеет совпадающего префикса URI, определённого в ресурсе HTTPROUTE
сервиса httpbin
.
Пример вывода
Откройте прокси-шлюз для внешнего трафика, установив тип его Service
в значение по умолчанию LoadBalancer
. Выполните команду:
Проверьте, что сервис httpbin
доступен извне кластера, используя внешний хост или IP-адрес сервиса шлюза. Убедитесь, что переменная INGRESS_HOST
установлена в соответствии с окружением вашего кластера.
Установите переменную INGRESS_HOST
, выполнив команду:
Установите переменную INGRESS_PORT
, выполнив команду:
Используя хост шлюза, отправьте запрос curl
к сервису httpbin
с помощью команды:
Убедитесь, что в ответе отображается статус HTTP/1.1 200 OK
, что подтверждает успешность запроса.