# Шлюзы

Шлюз - это всегда доступный облачный балансировщик или WEB сервер с гибкими политиками обработки трафика.

![gateways-main](/assets/images/main-19b8b7724c36ce8fe4c771d5447f65ea.png)

## Обзор

Вы можете зарезервировать свой или использовать домен в зоне tuna.am и создать для этого домена шлюз. В описании шлюзов используются [политики трафика](https://tuna.am/docs/traffic-policy.md). После сохранения настройки применятся и запросы начнут обрабатываться нодой за которой закреплён домен и соответственно шлюз.

## Когда это полезно?

Туннели это хорошо, но бывает окружение состоит из нескольких сервисов часть из которых запущено у вас, у вашего коллеги и в тестовом контуре. Но благодаря гибким [политикам трафика](https://tuna.am/docs/traffic-policy.md) вы можете распределять запросы в нужные точки, управлять заголовками, авторизацией, временем работы и много другое.

## Как создать Шлюз?

1. Зарезервируйте домен в разделе с [доменами](https://my.tuna.am/domains) который вы планируете использовать, для примера в этой статье это будет `demo.stage.tuna.am`
2. Перейдите в раздел [Шлюзы](https://my.tuna.am/gateways) и нажмите **Добавить шлюз** , выберете зарезервированный ранее домен.
3. Опишите политику используя синтаксис [политик трафика](https://tuna.am/docs/traffic-policy.md) и нажмите **Создать**.

Если синтаксис корректен, шлюз сразу будет доступен и вы можете работать.

## Пример

Представим демо стенд доступный только в будни, основная часть которого в тестовом контуре, а 2 микросервиса за туннелями разработчиков.

```yaml
rules:
  - expressions:
      - now().Weekday().String() in ["Saturday", "Sunday"]
    actions:
      - type: custom_response
        config:
          statusCode: 200
          content: В выходные не работаем!
          headers:
            content-type: "text/plain; charset=utf-8"
  - expressions:
      - hasPrefix(req.URL.Path, "/admin")
    actions:
     - type: reverse_proxy
       config:
         url: "https://valera-dev.run.tuna.am"
  - expressions:
      - hasPrefix(req.URL.Path, "/checkout")
    actions:
     - type: reverse_proxy
       config:
         url: "https://alena-dev.run.tuna.am"
  - actions:
     - type: reverse_proxy
       config:
         url: "https://testing.example.com"

```

И так по выходным вы будете получать сообщение `В выходные не работаем!`, а в будни все основные запросы отправятся в тестовый контур на `https://testing.example.com`, всё за `/admin` уйдёт на туннель `https://valera-dev.run.tuna.am` , а `/checkout` к `https://alena-dev.run.tuna.am`.
