Как использовать Gateway API в APISIX Ingress Controller

Yeqi Peng

November 11, 2022

Products

Что такое 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.

Кроме того, стандарт включает такие функции, как переносимость, общие шлюзы и кросс-неймспейсные ссылки.

Как показано на диаграмме, ориентированный на роли дизайн позволяет совместно использовать сетевую инфраструктуру внутри кластера между различными командами, а также совместно использовать политики и ограничения, установленные администратором кластера. Это позволяет различным типам ролей, таким как поставщики инфраструктуры, администраторы кластеров и разработчики приложений, сосредоточиться на своей работе, а не на том, за что отвечают другие роли.

api-mode.png

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

gateway-roles.png

Текущее состояние 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 активно разрабатывается.

Tags: