[Документация Yandex Cloud](../../index.md) > [Yandex Network Load Balancer](../index.md) > [Пошаговые инструкции](index.md) > Сетевые балансировщики > Создать балансировщик

# Создать сетевой балансировщик

{% note info %}

Перед созданием сетевого балансировщика [создайте](target-group-create.md) целевую группу, чтобы подключить ее к балансировщику.

Задать тип балансировщика (внешний или внутренний) можно только при его создании. В дальнейшем изменить тип балансировщика нельзя.

{% endnote %}

{% list tabs group=instructions %}

- Консоль управления {#console}

  Чтобы создать [сетевой балансировщик](../concepts/index.md):

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, где требуется создать балансировщик.
  1. Перейдите в сервис **Network Load Balancer**.
  1. Нажмите кнопку **Создать сетевой балансировщик**.
  1. Задайте имя балансировщика. Требования к имени:

      * длина — от 3 до 63 символов;
      * может содержать строчные буквы латинского алфавита, цифры и дефисы;
      * первый символ — буква, последний — не дефис.

  1. (Опционально) В поле **Дополнительно**:
      * Включите защиту от DDoS-атак.
      * Включите защиту балансировщика от удаления.

        {% note warning %}

        Включенная защита от удаления не запрещает удалять обработчики и целевые группы балансировщика.

        {% endnote %}

  1. Назначьте балансировщику публичный IP-адрес. Адрес можно назначить автоматически или выбрать из списка зарезервированных адресов.
  1. В блоке **Обработчики** добавьте [обработчик](../concepts/listener.md):
      1. Нажмите кнопку **Добавить обработчик**.
      1. В открывшемся окне задайте параметры обработчика:

          * **Имя**.
          * **Протокол** — `TCP` или `UDP`.

            {% note info %}

            По умолчанию обработчик работает по протоколу TCP. Чтобы использовать протокол UDP, [запросите в технической поддержке](https://kz.center.yandex.cloud/support) эту возможность.

            {% endnote %}

          * **Порт**, на котором обработчик будет принимать входящий трафик. Возможные значения: от `1` до `32767`.
          * **Целевой порт**, куда балансировщик будет направлять трафик. Возможные значения: от `1` до `32767`.

      1. Нажмите кнопку **Добавить**.

  1. В блоке **Целевые группы** добавьте [целевую группу](../concepts/target-resources.md):
      1. Нажмите кнопку **Добавить целевую группу**.
      1. Выберите целевую группу или [создайте новую](target-group-create.md):
          * В поле **Целевая группа** выберите ![image](../../_assets/console-icons/plus.svg) **Создать целевую группу**.
          * В открывшемся окне введите имя целевой группы.
          * Добавьте в целевую группу виртуальные машины.
          * Нажмите кнопку **Создать**.
      1. (Опционально) Под блоком **Проверка состояния** нажмите кнопку **Настроить**. В открывшемся окне задайте параметры [проверки состояния ресурсов](../concepts/health-check.md):
          * **Имя**.
          * **Тип** — `HTTP` или `TCP`. Для проверки по протоколу HTTP в поле **Путь** укажите адрес URL, по которому будут выполняться проверки.
          * **Порт** для проверок. Возможные значения: от `1` до `32767`.
          * **Время ожидания, c** — время ожидания ответа в секундах. Возможные значения: от `1` до `60`. Интервал должен быть больше времени ожидания минимум на 1 секунду.
          * **Интервал, c** — интервал выполнения проверок состояния в секундах. Возможные значения: от `1` до `60`.
          * **Порог работоспособности** — количество успешных проверок, после которого виртуальная машина будет считаться готовой к приему трафика.
          * **Порог неработоспособности** — количество проваленных проверок, после которого на виртуальную машину перестанет подаваться трафик.

      1. Нажмите кнопку **Применить**.
  1. Нажмите кнопку **Создать**.

- CLI {#cli}

  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

  По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

  1. Посмотрите описание команды CLI для создания сетевого балансировщика:

     ```bash
     yc load-balancer network-load-balancer create --help
     ```

  1. Чтобы создать балансировщик с [обработчиком](../concepts/listener.md) и [целевой группой](../concepts/target-resources.md), выполните команду:

     ```bash
     yc load-balancer network-load-balancer create <имя_балансировщика> \
        --deletion-protection \
        --listener name=<имя_обработчика>,`
                  `port=<порт>,`
                  `target-port=<целевой_порт>,`
                  `protocol=<протокол>,`
                  `external-ip-version=<версия_IP-адреса> \
        --target-group target-group-id=<идентификатор_целевой_группы>,`
                      `healthcheck-name=<имя_проверки_состояния>,`
                      `healthcheck-interval=<интервал_между_проверками>s,`
                      `healthcheck-timeout=<таймаут_проверки_состояния>s,`
                      `healthcheck-unhealthythreshold=<количество_проваленных_проверок_для_статуса_Unhealthy>,`
                      `healthcheck-healthythreshold=<количество_успешных_проверок_для_статуса_Healthy>,`
                      `healthcheck-tcp-port=<TCP-порт>,`
                      `healthcheck-http-port=<HTTP-порт>,`
                      `healthcheck-http-path=<адрес_URL>
     ```

     Где:

     * `--deletion-protection` — защита сетевого балансировщика от удаления. Пока опция включена, удалить балансировщик невозможно.

       {% note warning %}

       Включенная защита от удаления не запрещает удалять обработчики и целевые группы балансировщика.

       {% endnote %}

     * `--listener` — параметры обработчика:
         * `name` — имя обработчика.
         * `port` — порт, на котором сетевой балансировщик будет принимать входящий трафик. Возможные значения: от `1` до `32767`.
         * `target-port` — целевой порт, куда балансировщик будет направлять трафик. Возможные значения: от `1` до `32767`.
         * `protocol` — протокол, по которому будет работать обработчик: `tcp` или `udp`.
         * `external-address` — внешний IP-адрес обработчика.
         * `external-ip-version` — версия внешнего IP-адреса: `ipv4` или `ipv6`.

     * `--target-group` — параметры целевой группы и настройки [проверки состояния её ресурсов](../concepts/health-check.md):
         * `target-group-id` — идентификатор целевой группы.
     
           Чтобы узнать идентификатор, [получите](target-group-list.md#list) список целевых групп в каталоге.
     
         * `healthcheck-name` — имя проверки состояния ресурсов.
         * `healthcheck-interval` — интервал выполнения проверок состояния в секундах. Возможные значения: от `1s` до `60s`. Интервал должен быть больше времени ожидания минимум на 1 секунду. 
         * `healthcheck-timeout` — время ожидания ответа в секундах. Возможные значения: от `1s` до `60s`.
         * `healthcheck-unhealthythreshold` — количество проваленных проверок, после которого на виртуальную машину перестанет подаваться трафик. Возможные значения: от `2` до `10`.
         * `healthcheck-healthythreshold` — количество успешных проверок, после которого виртуальная машина будет считаться готовой к приему трафика. Возможные значения: от `2` до `10`.
         * `healthcheck-tcp-port` — порт для проверок по протоколу TCP. Возможные значения: от `1` до `32767`.
         * `healthcheck-http-port` — порт для проверок по протоколу HTTP. Возможные значения: от `1` до `32767`.
         * `healthcheck-http-path` — адрес URL, по которому будут выполняться проверки по протоколу HTTP.
     
         Указывать одновременно `healthcheck-tcp-port` и `healthcheck-http-port` нельзя.
     
         {% note warning %}
         
         Для параметров `healthcheck-interval` и `healthcheck-timeout` необходимо указывать значение в формате `<время_в_секундах>s`, например `20s`.
         
         {% endnote %}

- Terraform {#tf}

  [Terraform](https://www.terraform.io/) позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
  
  Terraform распространяется под лицензией [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE), а [провайдер Yandex Cloud для Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) — под лицензией [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/).
  
  Подробная информация о ресурсах провайдера в документации на сайте [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) или в [зеркале](../../terraform/index.md).

  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../terraform/authentication.md) соответствующим способом.

  1. Опишите в конфигурационном файле параметры ресурса сетевого балансировщика.

     Пример структуры конфигурационного файла:

     ```hcl
     resource "yandex_lb_network_load_balancer" "foo" {
       name = "<имя_балансировщика>"
       deletion_protection = <защитить_балансировщик_от_удаления>
       listener {
         name = "<имя_обработчика>"
         port = <номер_порта>
         external_address_spec {
           ip_version = "<версия_IP-адреса>"
         }
       }
       attached_target_group {
         target_group_id = "<идентификатор_целевой_группы>"
         healthcheck {
           name = "<имя_проверки_состояния>"
           http_options {
             port = <номер_порта>
             path = "<адрес_URL>"
           }
         }
       }
     }
     ```

     Где:

     * `name` — имя сетевого балансировщика.
     * `deletion_protection` — защита сетевого балансировщика от удаления. Пока опция включена, удалить балансировщик невозможно. Значение по умолчанию `false`.

       {% note warning %}

       Включенная защита от удаления не запрещает удалять обработчики и целевые группы балансировщика.

       {% endnote %}

     * `listener` — параметры обработчика:
       * `name` — имя обработчика.
       * `port` — порт, на котором сетевой балансировщик будет принимать входящий трафик, из диапазона от `1` до `32767`.
       * `external_address_spec` — спецификация обработчика для внешнего балансировщика:
         * `ip_version` — описание внешнего IP-адреса. Укажите версию IP-адреса: `ipv4` или `ipv6`. По умолчанию `ipv4`.
     * `attached_target_group` — описание параметров целевой группы для сетевого балансировщика:
        * `target_group_id` — идентификатор целевой группы.

          Чтобы узнать идентификатор, [получите](target-group-list.md#list) список целевых групп в каталоге.

        * `healthcheck` — описание параметров проверки состояния. Укажите имя, порт из диапазона от `1` до `32767` и путь, по которому будут выполняться проверки.

     Подробнее о параметрах ресурса `yandex_lb_network_load_balancer` в Terraform в [документации провайдера](../../terraform/resources/lb_network_load_balancer.md).

  1. Проверьте корректность настроек.

     1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
     1. Выполните команду:
     
        ```bash
        terraform validate
        ```
     
        Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  1. Создайте сетевой балансировщик.

     1. Выполните команду для просмотра планируемых изменений:
     
        ```bash
        terraform plan
        ```
     
        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
     
     1. Если вас устраивают планируемые изменения, внесите их:
        1. Выполните команду:
     
           ```bash
           terraform apply
           ```
     
        1. Подтвердите изменение ресурсов.
        1. Дождитесь завершения операции.

- API {#api}

  Чтобы создать новый сетевой балансировщик, воспользуйтесь методом REST API [create](../api-ref/NetworkLoadBalancer/create.md) для ресурса [NetworkLoadBalancer](../api-ref/NetworkLoadBalancer/index.md) или вызовом gRPC API [NetworkLoadBalancerService/Create](../api-ref/grpc/NetworkLoadBalancer/create.md).

{% endlist %}

## Примеры {#examples}

### Создание сетевого балансировщика без обработчика {#without-listener}

Создайте сетевой балансировщик без обработчика и целевой группы с именем `test-load-balancer-1`.

{% list tabs group=instructions %}

- CLI {#cli}

  Выполните следующую команду:

  ```bash
  yc load-balancer network-load-balancer create test-load-balancer-1
  ```

- Terraform {#tf}

  1. Опишите в конфигурационном файле параметры ресурса без блока `listener` и `attached_target_group`:

     ```hcl
     resource "yandex_lb_network_load_balancer" "foo" {
       name = "test-load-balancer-1"
     }
     ```

     Подробнее о ресурсах, которые вы можете создать с помощью Terraform, в [документации провайдера](../../terraform/resources/lb_network_load_balancer.md).

  1. Проверьте корректность настроек.

     1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
     1. Выполните команду:
     
        ```bash
        terraform validate
        ```
     
        Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  1. Создайте сетевой балансировщик.

     1. Выполните команду для просмотра планируемых изменений:
     
        ```bash
        terraform plan
        ```
     
        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
     
     1. Если вас устраивают планируемые изменения, внесите их:
        1. Выполните команду:
     
           ```bash
           terraform apply
           ```
     
        1. Подтвердите изменение ресурсов.
        1. Дождитесь завершения операции.

- API {#api}

  Воспользуйтесь методом API [create](../api-ref/NetworkLoadBalancer/create.md) и передайте в теле запроса:

  ```api
  {
    "folderId": "<идентификатор_каталога>",
    "name": "test-load-balancer-1",
    "type": "EXTERNAL"
  }
  ```

{% endlist %}

### Создание сетевого балансировщика с обработчиком и подключенной целевой группой {#with-listener-and-target-group}

Создайте сетевой балансировщик с обработчиком и подключенной целевой группой с тестовыми характеристиками:

* Имя `test-load-balancer-2`.
* Параметры обработчика:
    * Имя `test-listener`.
    * Порт `80`.
    * Целевой порт `81`.
    * Протокол `TCP`.
    * Версия IP-адреса `ipv4`.
* Идентификатор целевой группы `enpu2l7q9kth********`.
* Параметры проверки состояния ресурсов целевой группы:
    * Имя `http`.
    * Интервал выполнения проверок состояния `2` секунды.
    * Время ожидания ответа `1` секунда.
    * Порог неработоспособности `2`.
    * Порог работоспособности `2`.
    * Порт для проверок по протоколу HTTP `80`.
    * Адрес URL, по которому будут выполняться проверки `/`.

{% list tabs group=instructions %}

- CLI {#cli}

  Выполните следующую команду:

  ```bash
  yc load-balancer network-load-balancer create test-load-balancer-2 \
     --listener name=test-listener,`
               `port=80,`
               `target-port=81,`
               `protocol=tcp,`
               `external-ip-version=ipv4 \
     --target-group target-group-id=enpu2l7q9kth********,`
                   `healthcheck-name=http,`
                   `healthcheck-interval=2s,`
                   `healthcheck-timeout=1s,`
                   `healthcheck-unhealthythreshold=2,`
                   `healthcheck-healthythreshold=2,`
                   `healthcheck-http-port=80,`
                   `healthcheck-http-path=/
  ```

- Terraform {#tf}

  1. Опишите в конфигурационном файле параметры ресурса с блоками `listener` и `attached_target_group`:

     ```hcl
     resource "yandex_lb_network_load_balancer" "foo" {
       name = "test-load-balancer-2"
       deletion_protection = "true"
       listener {
         name        = "test-listener"
         port        = 80
         target_port = 81
         protocol    = "tcp"
         external_address_spec {
           ip_version = "ipv4"
         }
       }
       attached_target_group {
         target_group_id = "enpu2l7q9kth********"
         healthcheck {
           name                = "http"
           interval            = 2
           timeout             = 1
           unhealthy_threshold = 2
           healthy_threshold   = 2
           http_options {
             port = 80
             path = "/"
           }
         }
       }
     }
     ```

     Подробнее о ресурсах, которые вы можете создать с помощью Terraform, в [документации провайдера](../../terraform/resources/lb_network_load_balancer.md).

  1. Проверьте корректность настроек.

     1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
     1. Выполните команду:
     
        ```bash
        terraform validate
        ```
     
        Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  1. Создайте сетевой балансировщик.

     1. Выполните команду для просмотра планируемых изменений:
     
        ```bash
        terraform plan
        ```
     
        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
     
     1. Если вас устраивают планируемые изменения, внесите их:
        1. Выполните команду:
     
           ```bash
           terraform apply
           ```
     
        1. Подтвердите изменение ресурсов.
        1. Дождитесь завершения операции.

- API {#api}

  Воспользуйтесь методом API [create](../api-ref/NetworkLoadBalancer/create.md) и передайте в теле запроса:

  ```api
  {
    "folderId": "<идентификатор_каталога>",
    "name": "test-load-balancer-2",
    "type": "EXTERNAL",
    "listenerSpecs": [
      {
        "name": "test-listener",
        "port": "80",
        "protocol": "TCP",
        "targetPort": "81",
        "externalAddressSpec": {
          "ipVersion": "IPV4"
        }
      }
    ],
    "attachedTargetGroups": [
      {
        "targetGroupId": "b7rjtf12qdee********",
        "healthChecks": [
          {
            "name": "http",
            "interval": "2s",
            "timeout": "1s",
            "unhealthyThreshold": "2",
            "healthyThreshold": "2",
            "httpOptions": {
              "port": "80",
              "path": "/"
            }
          }
        ]
      }
    ]
  }
  ```

{% endlist %}