Использование Kgateway

Используйте аддон Kgateway, чтобы настроить маршрутизацию трафика в кластере Kubernetes через Gateway API и направить запросы к тестовому приложению.

Подготовительные шаги

  1. Создайте кластер актуальной версии, если это еще не сделано.
  2. Установите и настройте kubectl, если это еще не сделано.
  3. Подключитесь к кластеру при помощи kubectl.
  4. Установите аддон Kgateway, если это еще не сделано.

1. Создайте тестовое приложение

  1. Создайте файл манифеста httpbin.yaml для тестового приложения httpbin:

    apiVersion: v1kind: Namespacemetadata:  name: httpbin---apiVersion: v1kind: Servicemetadata:  name: httpbin  namespace: httpbinspec:  ports:    - port: 8000      targetPort: 8080  selector:    app: httpbin---apiVersion: apps/v1kind: Deploymentmetadata:  name: httpbin  namespace: httpbinspec:  replicas: 1  selector:    matchLabels:      app: httpbin  template:    metadata:      labels:        app: httpbin    spec:      containers:        - name: httpbin          image: docker.io/mccutchen/go-httpbin:v2.6.0          ports:            - containerPort: 8080
  2. Примените созданный манифест в кластере:

    kubectl apply -f httpbin.yaml

В результате применения манифеста будет запущено тестовое приложение httpbin в виде Deployment, а также будет создан сервис для внутреннего доступа к этому приложению. Kgateway в дальнейшем будет принимать внешний HTTP-трафик, маршрутизировать его и перенаправлять в этот сервис.

2. Создайте объект Gateway

  1. Создайте файл манифеста my-gateway.yaml для ресурса Gateway API типа Gateway:

    apiVersion: gateway.networking.k8s.io/v1kind: Gatewaymetadata:  name: http  namespace: httpbinspec:  gatewayClassName: kgateway  listeners:    - name: http      protocol: HTTP      port: 8080
  2. Примените созданный манифест в кластере:

    kubectl apply -f my-gateway.yaml

В результате применения манифеста Kgateway создаст сервис типа LoadBalancer. VK Cloud автоматически создаст стандартный балансировщик нагрузки и назначит ему публичный Floating IP-адрес для приема трафика.

3. Создайте объект HTTPRoute

  1. Создайте файл манифеста my-route.yaml для ресурса Gateway API типа HTTPRoute, который описывает правило маршрутизации HTTP-трафика для Kgateway:

    apiVersion: gateway.networking.k8s.io/v1kind: HTTPRoutemetadata:  name: httpbin  namespace: httpbinspec:  parentRefs:    - name: http  rules:    - backendRefs:        - name: httpbin          port: 8000
  2. Примените созданный манифест в кластере:

    kubectl apply -f my-route.yaml

В результате применения манифеста HTTP-запросы будут отправляться в сервис httpbin.

4. Проверьте работу Kgateway

  1. Подождите несколько минут, пока балансировщик нагрузки получит внешний IP-адрес, и выполните команду, чтобы его узнать:

    kubectl get svc -n httpbin

    Найдите для этого балансировщика значение EXTERNAL-IP в выведенной таблице:

    NAME     TYPE             ...     EXTERNAL-IP        PORT(S)            ...http     LoadBalancer     ...     100.70.151.108     8080:30000/TCP     ...
  2. Отправьте тестовый запрос на внешний IP-адрес балансировщика:

    curl http://100.70.151.108:8080/get

    Успешный ответ на запрос означает, что Kgateway корректно обрабатывает ресурсы Gateway API и маршрутизирует трафик к сервису httpbin.

Удалите неиспользуемые ресурсы

Работающий кластер тарифицируется и потребляет вычислительные ресурсы. Если ресурсы Kubernetes, созданные для проверки работы аддона Kgateway, вам больше не нужны, удалите их:

  1. Удалите пространство имен httpbin и связанные с ним ресурсы, включая созданный балансировщик и Floating IP-адрес:

    kubectl delete namespace httpbin
  2. Остановите созданный кластер, чтобы воспользоваться им позже, или удалите его навсегда.