# Терминирование TLS-соединений с помощью консоли управления

Чтобы создать инфраструктуру для [терминирования TLS-соединений](index.md) c помощью консоли управления:

1. [Подготовьте облако к работе](#before-begin).
1. [Создайте облачную сеть](#create-network).
1. [Зарезервируйте статический публичный IP-адрес](#reserve-ip)
1. [Создайте группы безопасности](#create-security-groups).
1. [Импортируйте TLS-сертификат сайта в Certificate Manager](#import-certificate).
1. [Создайте группу ВМ для сайта](#create-ig).
1. [Создайте группу бэкендов](#create-backend-group).
1. [Создайте и настройте HTTP-роутер](#create-http-router).
1. [Создайте L7-балансировщик](#create-l7-balancer).
1. [Настройте DNS для сайта](#configure-dns).
1. [Проверьте работу хостинга](#test).

В качестве примера используется доменное имя `my-site.com`.

Если созданные ресурсы вам больше не нужны, [удалите их](#clear-out).

## Подготовьте облако к работе {#before-begin}

Зарегистрируйтесь в Yandex Cloud и создайте [платежный аккаунт](../../../billing/concepts/billing-account.md):
1. Перейдите в [консоль управления](https://kz.console.yandex.cloud), затем войдите в Yandex Cloud или зарегистрируйтесь.
1. На странице **[Yandex Cloud Billing](https://kz.console.yandex.cloud/billing)** убедитесь, что у вас подключен платежный аккаунт, и он находится в [статусе](../../../billing/concepts/billing-account-statuses.md) `ACTIVE` или `TRIAL_ACTIVE`. Если платежного аккаунта нет, [создайте его](../../../billing/quickstart/index.md) и [привяжите](../../../billing/operations/pin-cloud.md) к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать [каталог](../../../resource-manager/concepts/resources-hierarchy.md#folder), в котором будет работать ваша инфраструктура, на [странице облака](https://kz.console.yandex.cloud/cloud).

[Подробнее об облаках и каталогах](../../../resource-manager/concepts/resources-hierarchy.md).

### Необходимые платные ресурсы {#paid-resources}

В стоимость поддержки инфраструктуры для терминирования TLS-соединений входят:
* плата за постоянно запущенные [ВМ](../../../compute/concepts/vm.md) ([тарифы Yandex Compute Cloud](../../../compute/pricing.md));
* плата за использование [публичного статического IP-адреса](../../../vpc/concepts/address.md#public-addresses) ([тарифы Yandex Virtual Private Cloud](../../../vpc/pricing.md));
* плата за использование вычислительных ресурсов [L7-балансировщика](../../../application-load-balancer/concepts/index.md) ([тарифы Application Load Balancer](../../../application-load-balancer/pricing.md));
* плата за публичные [DNS-запросы](../../../glossary/dns.md) и [зоны DNS](../../concepts/dns-zone.md), если вы используете [Yandex Cloud DNS](../../index.md) ([тарифы Cloud DNS](../../pricing.md)).

### Создайте облачную сеть {#create-network}

Все ресурсы, созданные в сценарии, будут относиться к одной [облачной сети](../../../vpc/concepts/network.md).

Чтобы создать сеть:

{% list tabs group=instructions %}

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

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. Нажмите кнопку **Создать сеть**.
  1. Укажите **Имя** сети: `mysite-network`.
  1. Выберите опцию **Создать подсети**.
  1. Нажмите кнопку **Создать сеть**.

{% endlist %}

### Зарезервируйте статический публичный IP-адрес {#reserve-ip}

Для работы виртуального хостинга потребуется статический публичный IP-адрес, который будет назначен L7-балансировщику.

Чтобы зарезервировать IP-адрес:

{% list tabs group=instructions %}

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

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. Откройте вкладку ![map-pin](../../../_assets/console-icons/map-pin.svg) **Публичные IP-адреса**. Нажмите кнопку **Зарезервировать публичный IP-адрес**.
  1. В открывшемся окне выберите [зону доступности](../../../overview/concepts/geo-scope.md) `kz1-a`. Нажмите кнопку **Зарезервировать**.

{% endlist %}

### Создайте группы безопасности {#create-security-groups}

[Группы безопасности](../../../application-load-balancer/concepts/application-load-balancer.md#security-groups) содержат правила, которые разрешают балансировщику получать входящий трафик и отправлять его на ВМ, а ВМ — получать этот трафик. В сценарии будут созданы две группы безопасности: для балансировщика и для всех ВМ.

Чтобы создать группы безопасности:

{% list tabs group=instructions %}

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

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Virtual Private Cloud**.
  1. Откройте вкладку ![shield](../../../_assets/console-icons/shield.svg) **Группы безопасности**.
  1. Создайте группу безопасности для балансировщика:
      1. Нажмите кнопку **Создать группу безопасности**.
      1. Укажите **Имя** группы безопасности: `mysite-sg-balancer`.
      1. Выберите **Сеть** `mysite-network`.
      1. В блоке **Правила** создайте следующие правила по инструкции под таблицей:
  
         Направление<br/>трафика | Описание | Диапазон портов | Протокол | Назначение /<br/>Источник | CIDR блоки
         --- | --- | --- | --- | --- | ---
         `Исходящий трафик` | `any` | `Выбрать весь диапазон` | `Любой` | `CIDR` | `0.0.0.0/0`
         `Входящий трафик` | `ext-http` | `80` | `TCP` | `CIDR` | `0.0.0.0/0`
         `Входящий трафик` | `ext-https` | `443` | `TCP` | `CIDR` | `0.0.0.0/0`
         `Входящий трафик` | `healthchecks` | `30080` | `TCP` | `Проверки состояния балансировщика` | —
  
      1. Выберите вкладку **Исходящий трафик** или **Входящий трафик**.
      1. Нажмите кнопку **Добавить правило**.
      1. В открывшемся окне в поле **Диапазон портов** укажите один порт или диапазон портов, куда или откуда будет поступать трафик.
      1. В поле **Протокол** укажите нужный протокол или оставьте `Любой`, чтобы разрешить передачу трафика по всем протоколам.
      1. В поле **Назначение** или **Источник** выберите назначение правила:
         * `CIDR` — правило будет применено к диапазону IP-адресов. В поле **CIDR блоки** укажите CIDR и маски [подсетей](../../../vpc/concepts/network.md#subnet), в которые или из которых будет поступать трафик. Чтобы добавить несколько CIDR, нажимайте кнопку **Добавить CIDR**.
         * `Группа безопасности` — правило будет применено к ВМ из текущей группы или из выбранной группы безопасности.
         * `Проверки состояния балансировщика` — правило, которое позволяет балансировщику проверять состояние ВМ.
      1. Нажмите кнопку **Сохранить**. Таким образом создайте все правила из таблицы.
      1. Нажмите кнопку **Создать**.
  1. Аналогично для ВМ создайте группу безопасности `mysite-sg-vms` и сетью `mysite-network` со следующими правилами:

      Направление<br>трафика | Описание | Диапазон портов | Протокол | Источник /<br>назначение | CIDR блоки
      --- | --- | --- | --- | --- | ---
      `Входящий трафик` | `balancer` | `80` | `TCP` | `Группа безопасности` | `mysite-sg-balancer`
      `Входящий трафик` | `ssh` | `22` | `TCP` | `CIDR` | `0.0.0.0/0`

{% endlist %}

### Импортируйте TLS-сертификат сайта в Certificate Manager {#import-certificate}

Чтобы пользователи могли обращаться к сайту по защищенному протоколу HTTPS (HTTP over TLS), для него должен быть выпущен TLS-сертификат. Для использования в L7-балансировщике сертификат нужно импортировать в Certificate Manager.

Если у вашего сайта нет сертификата, вы можете [получить в Certificate Manager сертификат от Let's Encrypt®](../../../certificate-manager/operations/managed/cert-create.md). В этом случае дополнительных действий после создания сертификата не потребуется: он — импортируется автоматически.

Чтобы импортировать уже имеющийся сертификат для сайта `my-site.com`:

{% list tabs group=instructions %}

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

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Certificate Manager**.
  1. Нажмите кнопку **Добавить сертификат** и выберите пункт **Пользовательский сертификат**.
  1. Укажите **Имя** сертификата: `mysite-cert`.
  1. В поле **Сертификат** нажмите кнопку **Добавить сертификат**. Загрузите **Файл** с вашим сертификатом или укажите его **Содержимое** и нажмите кнопку **Добавить**.
  1. Если ваш сертификат выпущен сторонним центром сертификации, в поле **Цепочка промежуточных сертификатов** нажмите кнопку **Добавить цепочку**. Загрузите **Файл** с цепочкой сертификатов или укажите его **Содержимое** и нажмите кнопку **Добавить**.
  1. В поле **Приватный ключ** нажмите кнопку **Добавить приватный ключ**. Загрузите **Файл** с ключом или укажите его **Содержимое** и нажмите кнопку **Добавить**.
  1. Нажмите кнопку **Создать**.

{% endlist %}

### Создайте группу ВМ для сайта {#create-ig}

Чтобы создать [группу ВМ](../../../compute/concepts/instance-groups/index.md) для сайта `my-site.com`:

{% list tabs group=instructions %}

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

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Compute Cloud**.
  1. На панели слева выберите ![image](../../../_assets/console-icons/layers-3-diagonal.svg) **Группы виртуальных машин**. Нажмите кнопку **Создать группу виртуальных машин**.
  1. Укажите **Имя** группы ВМ: `mysite-ig`.
  1. В блоке **Распределение** выберите несколько зон доступности, чтобы обеспечить отказоустойчивость хостинга.
  1. В блоке **Шаблон виртуальной машины** нажмите кнопку **Задать**.
  1. В блоке **Образ загрузочного диска** откройте вкладку **Marketplace** и нажмите кнопку **Показать все продукты Marketplace**. Выберите продукт [LEMP](https://yandex.cloud/ru-kz/marketplace/products/yc/lemp) и нажмите кнопку **Использовать**.
  1. В блоке **Вычислительные ресурсы**:
      * Выберите [платформу](../../../compute/concepts/vm-platforms.md) ВМ.
      * Укажите необходимое количество vCPU и объем RAM.

      Для функционального тестирования сайта хватит минимальной конфигурации:
      * **Платформа** — `Intel Cascade Lake`.
      * **Гарантированная доля vCPU** — `5%`.
      * **vCPU** — `2`.
      * **RAM** — `1 ГБ`.
  1. В блоке **Сетевые настройки** выберите **Сеть** `mysite-network`, [созданную ранее](#create-network), и ее подсети.
  1. Выберите группу безопасности `mysite-sg-vms`, [созданную ранее](#create-security-groups).
  1. Укажите данные для доступа на ВМ:
      * В поле **Логин** введите имя пользователя.
      * В поле **SSH-ключ** вставьте содержимое файла открытого ключа.

        Пару ключей для подключения по [SSH](../../../glossary/ssh-keygen.md) необходимо [создать самостоятельно](../../../compute/operations/vm-connect/ssh.md).

      {% note alert %}

      IP-адрес и [имя хоста (FQDN)](../../../compute/concepts/network.md#hostname) для подключения к ВМ назначатся ей при создании. Если вы выбрали вариант `Без адреса` в поле **Публичный адрес**, вы не сможете обращаться к ВМ из интернета.

      {% endnote %}

  1. Нажмите кнопку **Сохранить**.
  1. В блоке **Масштабирование** укажите **Размер** группы ВМ — `2`.
  1. В блоке **Интеграция с Application Load Balancer** выберите опцию **Создать целевую группу** и укажите имя группы ВМ — `mysite-tg`. [Подробнее о целевых группах](../../../application-load-balancer/concepts/target-group.md).
  1. Нажмите кнопку **Создать**.


Создание группы ВМ может занять несколько минут. Дождитесь когда группа перейдет в [статус](../../../compute/concepts/instance-groups/statuses.md#group-statuses) `RUNNING`, а все ВМ в ней — в [статус](../../../compute/concepts/instance-groups/statuses.md#vm-statuses) `RUNNING_ACTUAL`.

Скопируйте публичные IP-адреса созданных ВМ: они будут указаны на странице ВМ в блоке **Сеть**. IP-адреса потребуются далее, чтобы [проверить работу хостинга](#test).

{% endlist %}

### Создайте группу бэкендов {#create-backend-group}

Целевую группу, созданную вместе с группой ВМ, нужно привязать к группе бэкендов с настройками распределения трафика.

Для бэкендов в группе будут созданы [проверки состояния](../../../application-load-balancer/concepts/backend-group.md#health-checks): балансировщик будет периодически отправлять проверочные запросы к ВМ и ожидать ответа в течение определенного периода.

Чтобы создать группу бэкендов для сайта `my-site.com`:

{% list tabs group=instructions %}

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

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Application Load Balancer**.
  1. На панели слева выберите ![image](../../../_assets/console-icons/cubes-3-overlap.svg) **Группы бэкендов**. Нажмите кнопку **Создать группу бэкендов**.
  1. Укажите **Имя** группы бэкендов: `my-site-bg`.
  1. В блоке **Бэкенды** нажмите кнопку **Добавить**.
  1. Укажите **Имя** бэкенда: `mysite-backend`.
  1. В поле **Целевые группы** выберите группу `mysite-tg`.
  1. Укажите **Порт**, на котором ВМ бэкенда будут принимать входящий трафик от балансировщика: `80`.
  1. Нажмите кнопку **Добавить проверку состояния**.
  1. Укажите **Порт**, на котором ВМ бэкенда будут принимать проверочные соединения: `80`.
  1. Укажите **Путь**, к которому будет обращаться балансировщик при проверке состояния: `/`.
  1. Нажмите кнопку **Создать**.

{% endlist %}

### Создайте и настройте HTTP-роутер {#create-http-router}

Группу бэкендов нужно привязать к [HTTP-роутеру](../../../application-load-balancer/concepts/http-router.md) с правилами маршрутизации.

Чтобы создать HTTP-роутер:

{% list tabs group=instructions %}

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

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Application Load Balancer**.
  1. На панели слева выберите ![image](../../../_assets/console-icons/route.svg) **HTTP-роутеры**. Нажмите кнопку **Создать HTTP-роутер**.
  1. Укажите **Имя** HTTP-роутера: `mysite-router`.
  1. Нажмите кнопку **Добавить виртуальный хост**.
  1. Укажите **Имя** виртуального хоста: `mysite-host`.
  1. В поле **Authority** укажите доменное имя сайта: `my-site.com`.
  1. Нажмите кнопку **Добавить маршрут**.
  1. Укажите **Имя** маршрута: `mysite-route`.
  1. В поле **Группа бэкендов** выберите группу `my-site-bg`.
  1. Нажмите кнопку **Создать**.

{% endlist %}

### Создайте L7-балансировщик {#create-l7-balancer}

{% list tabs group=instructions %}

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

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Application Load Balancer**.
  1. Нажмите кнопку **Создать L7-балансировщик**.
  1. В открывшемся меню выберите **Вручную**.
  1. Укажите **Имя** балансировщика: `mysite-alb`.
  1. В блоке **Сетевые настройки** выберите группу безопасности `mysite-sg-balancer`, [созданную ранее](#create-security-groups).
  1. Создайте обработчик для перенаправления HTTP-запросов на HTTPS:
      1. В блоке **Обработчики** нажмите кнопку **Добавить обработчик**.
      1. Укажите **Имя** обработчика: `listener-http`.
      1. В блоке **Публичный IP-адрес** выберите **Тип** `Список` и IP-адрес, [зарезервированный ранее](#reserve-ip).
      1. В поле **Протокол** выберите пункт `Перенаправлять на HTTPS`.
  1. Создайте обработчик HTTPS-запросов:
      1. Снова нажмите кнопку **Добавить обработчик**.
      1. Укажите **Имя** обработчика: `listener-https`.
      1. В блоке **Публичный IP-адрес** выберите **Тип** `Список` и IP-адрес, [зарезервированный ранее](#reserve-ip).
      1. В поле **Протокол** выберите пункт `HTTPS`.
      1. В блоке **Основной обработчик** выберите сертификат `mysite-cert` и HTTP-роутер `mysite-router`.
      1. Добавьте обработчик SNI для сайта `my-site.com`:
        1. Нажмите кнопку **Добавить обработчик SNI**.
        1. Укажите **Имя** обработчика SNI: `mysite-sni`.
        1. В поле **Имена серверов** укажите `my-site.com`.
        1. Выберите сертификат `mysite-cert` и HTTP-роутер `mysite-router`.
  1. Нажмите кнопку **Создать**.

{% endlist %}

### Настройте DNS для сайта {#configure-dns}

Доменное имя `my-site.com` должно быть связано с IP-адресом L7-балансировщика с помощью [записей DNS](../../concepts/resource-record.md). Чтобы это сделать:

{% list tabs group=instructions %}

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

  1. Откройте [консоль управления](https://kz.console.yandex.cloud).
  1. Перейдите в сервис **Application Load Balancer**.
  1. Скопируйте IP-адрес созданного балансировщика.
  1. На сайте компании, которая предоставляет вам услуги DNS-хостинга, перейдите в настройки DNS.
  1. Создайте или измените [A-запись](../../concepts/resource-record.md#a) для `my-site.com` таким образом, чтобы она указывала на скопированный IP-адрес:

      ```text
      my-site.com. A <IP-адрес_L7-балансировщика>
      ```

      Если вы пользуетесь [Yandex Cloud DNS](../../index.md), настройте запись по следующей инструкции:

      {% cut "Инструкция по настройке DNS-записей для Cloud DNS" %}

      Чтобы получить доступ к именам из публичной зоны, вам нужно делегировать домен. Укажите адреса серверов `ns1.yandexcloud.kz` и `ns2.yandexcloud.kz` в личном кабинете вашего регистратора.

      1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог.
      1. Перейдите в сервис **Cloud DNS**.
      1. Если у вас нет публичной [зоны DNS](../../concepts/dns-zone.md), создайте ее:
          1. Нажмите кнопку **Создать зону**.
          1. Укажите **Имя** зоны: `tls-termination-dns`.
          1. В поле **Зона** укажите доменное имя сайта с точкой в конце: `my-site.com.`
          1. Выберите **Тип** зоны — `Публичная`.
          1. Нажмите кнопку **Создать**.
      1. Создайте запись в зоне:
          1. В списке зон нажмите на зону `tls-termination-dns`.
          1. Нажмите кнопку **Создать запись**.
          1. Поле **Имя** оставьте пустым, чтобы запись соответствовала доменному имени `my-site.com` (а не имени с субдоменом, например `www.my-site.com`).
          1. Выберите **Тип** записи — **A**.
          1. В поле **Значение** вставьте скопированный IP-адрес балансировщика.
          1. Нажмите кнопку **Создать**.

      {% endcut %}

{% endlist %}

После настройки DNS, [проверьте работу хостинга](#test).

## Проверьте работу хостинга {#test}

Чтобы проверить работу хостинга:

1. Создайте главную страницу сайта — файл `index.html`

    {% cut "Пример файла index.html" %}

    ```html
    <!DOCTYPE html>
    <html>
      <head>
        <title>My site</title>
      </head>
      <body>
        <h1>This is my site</h1>
      </body>
    </html>
    ```

    {% endcut %}

1. Загрузите файл `index.html` на каждую ВМ:

    1. В блоке **Сеть** на странице виртуальной машины в [консоли управления](https://kz.console.yandex.cloud) найдите публичный IP-адрес виртуальной машины.
    1. [Подключитесь](../../../compute/operations/vm-connect/ssh.md) к виртуальной машине по протоколу SSH.
    1. Выдайте права на запись для вашего пользователя на директорию `/var/www/html`:
    
       {% list tabs group=operating_system %}
    
       - Ubuntu {#ubuntu}
    
         ```bash
         sudo chown -R "$USER":www-data /var/www/html
         ```
    
       - CentOS {#centos}
    
         ```bash
         sudo chown -R "$USER":apache /var/www/html
         ```
    
       {% endlist %}
    
    
    1. Загрузите на ВМ файлы сайта с помощью [протокола SCP](https://ru.wikipedia.org/wiki/SCP).
    
       {% list tabs group=operating_system %}
    
       - Linux/macOS {#linux-macos}
    
         Используйте утилиту командной строки `scp`:
    
         ```bash
         scp -r <путь_до_директории_с_файлами> <имя_пользователя_ВМ>@<IP-адрес_виртуальной_машины>:/var/www/html
         ```
    
       - Windows {#windows}
    
         С помощью программы [WinSCP](https://winscp.net/eng/download.php) скопируйте локальную директорию с файлами в директорию `/var/www/html` на ВМ.
    
       {% endlist %}

1. В браузере откройте сайт по адресу `http://my-site.com` — должно произойти перенаправление на страницу `https://my-site.com`, где уже подключен TLS-сертификат из Certificate Manager.

## Как удалить созданные ресурсы {#clear-out}

Чтобы перестать платить за созданные ресурсы:

1. [Удалите](../../../application-load-balancer/operations/application-load-balancer-delete.md) L7-балансировщик `mysite-alb`.
1. [Удалите](../../../application-load-balancer/operations/http-router-delete.md) HTTP-роутер `mysite-router`.
1. [Удалите](../../../application-load-balancer/operations/backend-group-delete.md) группу бэкендов `my-site-bg`.
1. [Удалите](../../../compute/operations/instance-groups/delete.md) группу ВМ `mysite-ig`.
1. [Удалите](../../../vpc/operations/address-delete.md) зарезервированный статический публичный IP-адрес.
1. Если вы использовали Cloud DNS, то [удалите](../../operations/resource-record-delete.md) DNS-записи и [удалите](../../operations/zone-delete.md) DNS-зону.

## Полезные ссылки {#see-also}

* [Терминирование TLS-соединений с помощью Terraform](terraform.md).