Облачная платформаEvolution

Публикация приложения с помощью Traefik


Traefik — обратный прокси и балансировщик нагрузки, который используется в Kubernetes для маршрутизации трафика.

В инструкции описано, как опубликовать приложение в кластере Managed Kubernetes с помощью Traefik, используя IngressRoute или Gateway API.

Перед началом работы

  1. Создайте кластер Managed Kubernetes и хотя бы одну группу узлов.

    Минимальные параметры для группы узлов:

    • Гарантированная доля vCPU, %10.

    • CPU, шт.2.

    • RAM, ГБ4.

    • Объем хранилища, ГБ40.

    • Количество узлов1.

  2. Подключитесь к кластеру Managed Kubernetes.

1. Установите Traefik

  1. В созданном кластере перейдите в раздел Плагины и в правом верхнем углу нажмите Добавить плагин.

  2. В списке плагинов выберите Traefik и нажмите Установить.

  3. Выберите версию плагина.

  4. Чтобы включить Gateway API, в разделе Расширенная конфигурация → YAML укажите:

    providers:
    kubernetesGateway:
    enabled: true
  5. Нажмите Установить.

    Дождитесь, когда состояние плагина изменится на «Установлен».

  6. Убедитесь, что все поды Traefik в статусе «Running»:

    kubectl get pods -n traefik

    Результат:

    NAME READY STATUS RESTARTS AGE
    traefik-7bc45c5***-***** 1/1 Running 0 96s

2. Разверните приложение

  1. Создайте cloudru-whoami.yaml с манифестами:

    apiVersion: v1
    kind: Namespace
    metadata:
    name: whoami
    ----
    apiVersion: v1
    kind: Service
    metadata:
    name: whoami
    namespace: whoami
    spec:
    ports:
    - port: 80
    selector:
    app: whoami
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: whoami
    namespace: whoami
    spec:
    replicas: 2
    selector:
    matchLabels:
    app: whoami
    template:
    metadata:
    labels:
    app: whoami
    spec:
    containers:
    - name: whoami
    image: emk8s.cr.cloud.ru/traefik/whoami:v1.12.0
    ports:
    - containerPort: 80
  2. Примените манифесты:

    kubectl apply -f cloudru-whoami.yaml

    Примерный результат:

    namespace/whoami created
    service/whoami created
    deployment.apps/whoami created
  3. Убедитесь, что поды запущены.

    kubectl get pods -n whoami

    Примерный результат:

    NAME READY STATUS RESTARTS AGE
    whoami-664bd79***-***** 1/1 Running 0 90s
    whoami-664bd79***-***** 1/1 Running 0 91s

3. Опубликуйте приложение

В зависимости от ваших потребностей опубликовать приложение в Managed Kubernetes с помощью Traefik можно через IngressRoute или Gateway API:


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

  1. Создайте cloudru-httproute-whoami.yaml и сохраните манифест:

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
    name: whoami
    namespace: whoami
    spec:
    parentRefs:
    - name: traefik-gateway
    hostnames:
    - "whoami.localhost"
    rules:
    - matches:
    - path:
    type: PathPrefix
    value: /
    backendRefs:
    - name: whoami
    port: 80
  2. Примените манифест:

    kubectl apply -f cloudru-httproute-whoami.yaml

    Примерный результат:

    httproute.gateway.networking.k8s.io/whoami created

4. Проверьте работу приложения

Отправьте запрос:

curl -H "Host: whoami.localhost" http://localhost/

Пример успешного ответа:

Hostname: whoami-664bd79***-*****
IP: 127.0.0.1
IP: ::1
IP: 10.42.0.18
IP: fe80::d4c0:3bff:fe20:b0a3
RemoteAddr: 10.42.0.17:39872
GET / HTTP/1.1
Host: whoami.localhost
User-Agent: curl/7.68.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 10.42.0.1
X-Forwarded-Host: whoami.localhost
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: traefik-7bc45c5***-*****
X-Real-Ip: 10.42.0.1