kubeCDN и Terraform | OTUS

kubeCDN и Terraform

Благодаря сети Интернет мы можем обмениваться информацией по всем миру. Главное сегодня — это скорость, ведь нередко бизнес теряет клиентов именно по причине задержек. А их сложно избежать, когда ваша инфраструктура находится в одной части мира, а обслуживает глобальную клиентскую базу, куда входят пользователи со всех концов света.

1_rGB1hL5PqzkvBcaAELF1_A_1-20219-e85fdf.png

Первое желание — развернуть серверы ближе к пользователям, но создание такой глобальной инфраструктуры и управление ей потребует много затрат. Один из вариантов решения проблемы — сторонние поставщики сети доставки контента. К примеру, у нас есть такие CDN-поставщики, как Akamai, CloudFlare и Fastly, позволяющие компаниям создавать инфраструктуру в одном регионе, а потом масштабировать услуги для глобальной аудитории.

Но, к сожалению, когда речь идёт о сторонних CDN, всё не так уж и гладко: — вы теряете часть контроля над своей инфраструктурой; — снижается уровень безопасности данных; собственно говоря, те же сторонние поставщики CDN получают данные о вашем бизнесе, например, информацию о местонахождении ваших клиентов и т. п. А эти данные могут быть очень ценны для ваших конкурентов; — сторонний CDN — это тоже бизнес, не забывайте об этом. Следовательно, поставщики тоже стремятся получить максимальную прибыль, сопоставляя её с качеством обслуживания (вы же не один клиент, в конце концов).

Как же самостоятельно справиться с проблемой доставки контента, как это сделали такие сервисы, как Netflix и LinkedIn?

Один из вариантов — kubeCDN.

Описание, дизайн и архитектура kubeCDN

kubeCDN — автономная сеть доставки контента, которая основана на Kubernetes. Это самостоятельное решение, позволяющее поддерживать полный контроль над своей инфраструктурой. При этом kubeCDN заменяет сторонние сервисы доставки контента, а также даёт возможность восстанавливать контроль над потоком данных с ваших серверов.

Данная сеть использует для развёртывания EKS и прочих компонентов инфраструктуры AWS в нужном регионе такой инструмент, как Terraform. Для маршрутизации пользовательского трафика между регионами применяется Route53 — облачная DNS от AWS. Для автоматического создания DNS-записей в процессе развёртывания новых служб задействуется ExternalDNS.

1_43bXBqyNublkSnWIdYkUZw_1-20219-b9dd7b.png

Рассмотрим пример

Представьте, что наш видеосервер располагается в 2-х регионах AWS: us-east-1 и us-west-2. Мы настраиваем для своего домена размещённую зону на Route53 и устанавливаем А-записи для каждого региона, где развернуты кластеры, применяя политику маршрутизации, что необходимо для направления пользователей в регион, где задержка минимальна.

Ниже показано, каким образом Route53 маршрутизирует пользовательский трафик с кластерами, которые настроены в 2-х регионах:

1_miro4HleUaVxKPqqdNFGsg-20219-a6e971.png

Таким образом, пользователь из Сан-Франциско направляется не в кластер us-east-1, а в кластер us-east-2, так как у второго меньше задержка.

Кроме того, kubeCDN даёт возможность без проблем масштабировать сервисы и приложения по всему миру, делая это за считанные минуты. Допустим, чтобы развернуть инфраструктуру для демонстрационного примера выше, было потрачено всего 15 минут времени. И это существенно меньше, чем при ручном развёртывании через консоль AWS.

Кроме простоты масштабирования, kubeCDN оптимизирует затраты на инфраструктуру, к примеру, благодаря тому, что сеть разбивает регионы в периоды невысокой активности пользователей. И этот уровень оптимизации затрат иногда имеет решающее значение для повышения прибыли.

Terraform Code Refactor

В целях развёртывания кластеров EKS в регионе kubeCDN применяет код Terraform, основанный на репозитории, который создан HashiCorp. Это хранилище имеет подробные инструкции, но не очень-то способно к развёртыванию в нескольких регионах. Дело в том, что целевая область жёстко запрограммирована, требуя для каждой желаемой области репликации репозитория. А это, как известно процесс ручной и утомительный, к тому же, весьма уязвимый к человеческим ошибкам. Не говоря уже о получении нечёткой структуры управления, затрудняющей мониторинг инфраструктуры и усложняющей оптимизацию расходов.

Проблема решается путём рефакторинга кода Terraform. Давайте посмотрим на структуру ниже, которая лучше организовывает инфраструктурную часть проекта на данном этапе:

├── terraform              (Dir containing all infrastructure code) 
    ├── cluster            (EKS cluster components) 
    │   ├── main.tf
    │   ├── outputs.tf
    │   ├── rbac.yaml
    │   └── variables.tf
    ├── main.tf            (Main .tf file where regions are specified) 
    └── variables.tf
                           (Some files have been removed for brevity)

Здесь main.tf указывает на все нужные регионы. А развёртывание региона определяется с применением следующего фрагмента:

module "<name-for-region-deployment>" {
    source = "cluster"
    region = "<AWS-region>"
}

В результате мы получаем возможность не только легко определять новые регионы в одном конфигурационном файле, но и управлять ими.

Источник — «How to build your own CDN with Kubernetes».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто