Как использовать Gateway API в APISIX Ingress Controller
Yeqi Peng
November 11, 2022
Что такое Kubernetes Gateway API
Gateway API — это еще одна спецификация, инициированная сообществом (управляемая sig-network), которая помогает пользователям экспонировать сервисы в Kubernetes за пределами кластера, помимо нативных Service и Ingress.
Gateway API поддерживает множество распространенных сетевых протоколов (например, HTTP, TCP, UDP), а также TLS. Более того, Gateway API включает ресурсы Gateway, которые позволяют управлять жизненным циклом прокси или шлюза через Kubernetes API.
Зачем нужен Gateway API
По сравнению с Ingress, Gateway API представляет собой функциональное надмножество Ingress с следующими улучшениями:
- Ориентированность на роли: Gateway состоит из API-ресурсов, которые моделируют организационные роли, использующие и настраивающие сетевые сервисы Kubernetes.
- Выразительность: Ресурсы Gateway API поддерживают базовые функции, такие как сопоставление на основе заголовков, взвешивание трафика и другие возможности, которые в Ingress были доступны только через пользовательские аннотации.
- Расширяемость: Gateway API позволяет связывать пользовательские ресурсы на различных уровнях API, что делает возможной детальную настройку в соответствующих местах структуры API.
Кроме того, стандарт включает такие функции, как переносимость, общие шлюзы и кросс-неймспейсные ссылки.
Как показано на диаграмме, ориентированный на роли дизайн позволяет совместно использовать сетевую инфраструктуру внутри кластера между различными командами, а также совместно использовать политики и ограничения, установленные администратором кластера. Это позволяет различным типам ролей, таким как поставщики инфраструктуры, администраторы кластеров и разработчики приложений, сосредоточиться на своей работе, а не на том, за что отвечают другие роли.

Разные роли настраивают различные уровни ресурсов Gateway API, и эти уровни работают вместе:

Текущее состояние Gateway API
В настоящее время с выпуском Gateway API v0.5.0 некоторые важные основные API впервые перешли в стадию Beta, включая GatewayClass, Gateway и HTTPRoute.
Как использовать Gateway API в APISIX Ingress
Поддержка APISIX Ingress Controller для Gateway API находится в стадии разработки и находится на этапе Alpha, поддерживая такие ресурсы, как HTTPRoute, TCPRoute.
Установка CRD для Gateway API
Чтобы использовать Gateway API, сначала необходимо установить CRD для Gateway API, либо через копию в репозитории APISIX Ingress Controller, либо через официальный репозиторий kubernetes-sigs/gateway-api. В качестве примера здесь используется копия CRD из репозитория APISIX Ingress Controller.
Выполните следующую команду для установки CRD для Gateway API.
git pull git@github.com:apache/apisix-ingress-controller.git cd apisix-ingress-controller kubectl apply -f ./samples/deploy/gateway-api/
Установка APISIX Ingress Controller
Поддержка Gateway API по умолчанию не включена в APISIX Ingress Controller и может быть активирована с помощью параметра -enable-gateway-api=true.
При установке с помощью Helm вы можете включить ее, настроив значения.
Используйте следующую команду для установки APISIX и APISIX Ingress Controller.
helm repo add apisix https://charts.apiseven.com helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update kubectl create ns apisix-ingress helm install apisix apisix/apisix --namespace apisix-ingress \ --set gateway.type=NodePort \ --set ingress-controller.enabled=true \ --set ingress-controller.config.apisix.serviceNamespace=apisix-ingress \ --set ingress-controller.config.kubernetes.enableGatewayAPI=true
Обратите внимание на параметр -set ingress-controller.config.kubernetes.enableGatewayAPI=true, который используется для включения поддержки Gateway API.
Эти команды создадут полную тестовую среду в пространстве имен apisix-ingress, включая APISIX, etcd и APISIX Ingress Controller.
Развертывание тестовой нагрузки
Используйте образ kennethreitz/httpbin в качестве тестовой нагрузки.
Используйте следующую команду для развертывания этих нагрузок в пространстве имен по умолчанию.
kubectl run httpbin --image kennethreitz/httpbin --port 80 kubectl expose pod httpbin --port 80
Настройка HTTPRoute
В настоящее время APISIX Ingress Controller поддерживает версию v1alpha2 ресурса Gateway API.
Для тестирования используйте следующую конфигурацию HTTPRoute и сохраните ее в файл httproute.yaml:
# httproute.yaml apiVersion: gateway.networking.k8s.io/v1alpha2 kind: HTTPRoute metadata: name: basic-http-route spec: hostnames: - local.httpbin.org rules: - backendRefs: - name: httpbin port: 80 matches: - path: type: PathPrefix value: /
Используйте следующую команду для развертывания этой конфигурации HTTPRoute:
kubectl apply -f ./httproute.yaml
Проверка
Проверку можно выполнить непосредственно в Pod APISIX, выполнив следующую команду:
kubectl -n apisix-ingress exec -it $(kubectl -n apisix-ingress get Pods -l "app.kubernetes.io/name=apisix" -o name) -c apisix -- curl -H "Host: local.httpbin.org" localhost:9080/ip
Ожидаемый вывод:
{ "origin": "127.0.0.1" }
Это указывает на то, что наша конфигурация успешно вступила в силу.
Как APISIX Ingress поддерживает Gateway API
В настоящее время APISIX Ingress Controller добавляет поддержку Gateway API и поддерживает такие ресурсы, как HTTPRoute, TCPRoute и другие.
Поддержка Gateway и Gateway Class в APISIX Ingress Controller активно разрабатывается, поэтому конфигурация этих ресурсов пока не будет действовать.
Итог
В этой статье мы представили Gateway API — совершенно новую спецификацию в сообществе для экспонирования сервисов за пределами кластера, и описали, как использовать ее в APISIX Ingress Controller.
Полная поддержка Gateway API в APISIX Ingress Controller активно разрабатывается.