Traefik — обратный прокси и балансировщик нагрузки, который используется в Kubernetes для маршрутизации трафика.
В инструкции описано, как опубликовать приложение в кластере Managed Kubernetes с помощью Traefik, используя IngressRoute или Gateway API.
Создайте кластер Managed Kubernetes и хотя бы одну группу узлов.
Минимальные параметры для группы узлов:
Гарантированная доля vCPU, % — 10.
CPU, шт. — 2.
RAM, ГБ — 4.
Объем хранилища, ГБ — 40.
Количество узлов — 1.
В созданном кластере перейдите в раздел Плагины и в правом верхнем углу нажмите Добавить плагин.
В списке плагинов выберите Traefik и нажмите Установить.
Выберите версию плагина.
Чтобы включить Gateway API, в разделе Расширенная конфигурация → YAML укажите:
providers:kubernetesGateway:enabled: true
Нажмите Установить.
Дождитесь, когда состояние плагина изменится на «Установлен».
Убедитесь, что все поды Traefik в статусе «Running»:
kubectl get pods -n traefik
Результат:
NAME READY STATUS RESTARTS AGEtraefik-7bc45c5***-***** 1/1 Running 0 96s
Создайте cloudru-whoami.yaml с манифестами:
apiVersion: v1kind: Namespacemetadata:name: whoami----apiVersion: v1kind: Servicemetadata:name: whoaminamespace: whoamispec:ports:- port: 80selector:app: whoami---apiVersion: apps/v1kind: Deploymentmetadata:name: whoaminamespace: whoamispec:replicas: 2selector:matchLabels:app: whoamitemplate:metadata:labels:app: whoamispec:containers:- name: whoamiimage: emk8s.cr.cloud.ru/traefik/whoami:v1.12.0ports:- containerPort: 80
Примените манифесты:
kubectl apply -f cloudru-whoami.yaml
Примерный результат:
namespace/whoami createdservice/whoami createddeployment.apps/whoami created
Убедитесь, что поды запущены.
kubectl get pods -n whoami
Примерный результат:
NAME READY STATUS RESTARTS AGEwhoami-664bd79***-***** 1/1 Running 0 90swhoami-664bd79***-***** 1/1 Running 0 91s
В зависимости от ваших потребностей опубликовать приложение в Managed Kubernetes с помощью Traefik можно через IngressRoute или Gateway API:
Используйте Gateway API, если начинаете новый проект или планируете миграцию, так как это обеспечивает наилучшую перспективу, переносимость и соответствие современным практикам Kubernetes.
Создайте cloudru-httproute-whoami.yaml и сохраните манифест:
apiVersion: gateway.networking.k8s.io/v1kind: HTTPRoutemetadata:name: whoaminamespace: whoamispec:parentRefs:- name: traefik-gatewayhostnames:- "whoami.localhost"rules:- matches:- path:type: PathPrefixvalue: /backendRefs:- name: whoamiport: 80
Примените манифест:
kubectl apply -f cloudru-httproute-whoami.yaml
Примерный результат:
httproute.gateway.networking.k8s.io/whoami created
Отправьте запрос:
curl -H "Host: whoami.localhost" http://localhost/
Пример успешного ответа:
Hostname: whoami-664bd79***-*****IP: 127.0.0.1IP: ::1IP: 10.42.0.18IP: fe80::d4c0:3bff:fe20:b0a3RemoteAddr: 10.42.0.17:39872GET / HTTP/1.1Host: whoami.localhostUser-Agent: curl/7.68.0Accept: */*Accept-Encoding: gzipX-Forwarded-For: 10.42.0.1X-Forwarded-Host: whoami.localhostX-Forwarded-Port: 80X-Forwarded-Proto: httpX-Forwarded-Server: traefik-7bc45c5***-*****X-Real-Ip: 10.42.0.1