Kgateway — легковесный Gateway API на основе Envoy, который реализует Kubernetes Gateway API. В отличие от Istio, Kgateway предоставляет более простое и быстрое решение для управления входящим трафиком.
В инструкции рассмотрим пример настройки Kgateway в кластере Managed Kubernetes для предоставления доступа к контейнерному приложению извне.
Создайте кластер Managed Kubernetes и хотя бы одну группу узлов.
Минимальные параметры для группы узлов:
Гарантированная доля vCPU, % — 10.
CPU, шт. — 2.
RAM, ГБ — 4.
Объем хранилища, ГБ — 40.
Количество узлов — 1.
В созданном кластере перейдите в раздел Плагины и в правом верхнем углу нажмите Добавить плагин.
В списке плагинов выберите Kgateway и нажмите Установить.
Выберите версию плагина.
Нажмите Установить.
Дождитесь, когда состояние плагина изменится на «Установлен».
Убедитесь, что все поды Kgateway в статусе «Running»:
kubectl get pods -n kgateway-system
Результат:
NAME READY STATUS RESTARTS AGEkgateway-58d8******-***** 1/1 Running 0 25m
Создайте cloudru-httpbin.yaml и сохраните манифест:
apiVersion: v1kind: Namespacemetadata:name: httpbin---apiVersion: v1kind: Servicemetadata:name: httpbinnamespace: httpbinspec:ports:- port: 8000targetPort: 8080selector:app: httpbin---apiVersion: apps/v1kind: Deploymentmetadata:name: httpbinnamespace: httpbinspec:replicas: 1selector:matchLabels:app: httpbintemplate:metadata:labels:app: httpbinspec:containers:- name: httpbinimage: emk8s.cr.cloud.ru/nginx:latestports:- containerPort: 8080
Примените манифесты:
kubectl apply -f cloudru-httpbin.yaml
Примерный результат:
namespace/httpbin createdservice/httpbin createddeployment.apps/httpbin created
Убедитесь, что поды запущены.
kubectl -n httpbin get pods
Примерный результат:
NAME READY STATUS RESTARTS AGEhttpbin-6d8b******-***** 1/1 Running 0 69s
Создайте cloudru-gateway.yaml и сохраните манифест:
kind: GatewayapiVersion: gateway.networking.k8s.io/v1metadata:name: httpnamespace: httpbinspec:gatewayClassName: kgatewaylisteners:- protocol: HTTPport: 8080name: http
Создайте cloudru-gateway-http.yaml и сохраните манифест:
apiVersion: gateway.networking.k8s.io/v1kind: HTTPRoutemetadata:name: httpbinnamespace: httpbinspec:parentRefs:- name: httprules:- backendRefs:- name: httpbinport: 8000
Последовательно выполните:
kubectl apply -f cloudru-gateway.yamlkubectl apply -f cloudru-gateway-http.yaml
Результат:
gateway.gateway.networking.k8s.io/http createdhttproute.gateway.networking.k8s.io/httpbin created
Получите внешний IP-адрес Gateway:
kubectl get svc -n httpbin
Вы получите примерно такой вывод:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEhttp LoadBalancer 10.***.**.*** <external-ip> 8080:32610/TCP 110shttpbin ClusterIP 10.**.**.*** <none> 8000/TCP 7m22s
Где <external-ip> — назначенный IP-адрес.
Откройте браузер и в адресную строку введите: http://<external-ip>.
В результате вы увидите стандартную страницу приветствия Nginx.