Балансувальники навантаження рівня 4 (L4): Мережеві балансувальники навантаження в хмарі

pic

Частина 1: Google Cloud Platform

Опис: L4 балансувальники навантаження працюють на рівні Транспорту (TCP/UDP) моделі OSI. Вони розподіляють трафік за IP-адресою та номером порту.

Проблеми безпеки:

§ Атаки SYN Flood: Шкідливий трафік перевантажує сервери SYN-пакетами.

§ Атаки DDoS: Масштабні атаки можуть наситити балансувальник навантаження та сервери, що стоять за ним.

МІТІГАЦІЯ:

§ Обмеження швидкості: Обмежте кількість запитів на IP-адресу або з'єднання.

§ Чорні списки IP: Блокуйте шкідливі IP-адреси.

§ Міжмережевий екран для веб-додатків (WAF): Фільтрація шкідливого трафіку на рівні додатку.

Переваги:

§ Легко налаштовувати та управляти.

§ Ефективний для розподілу мережевого трафіку.

§ Економічний для базових потреб балансування навантаження.

Приклади побудови:

§ GCP: Балансування мережевого навантаження

Створення балансувальника мережевого навантаження в GCP: покрокова інструкція

Необхідні умови:

  • Проект у Google Cloud Platform (GCP) з увімкненим білінгом.
  • Базове розуміння концепцій GCP, таких як віртуальні машини, мережі та міжмережеві екрани.
  • Інструмент командного рядка gcloud, встановлений та налаштований.

Покрокова інструкція в терміналі:

1. Створення групи інстансів Compute Engine:

  • Створіть шаблон інстанса: Замість моїх значень використовуйте свої.
gcloud compute instance-templates create my-instance-template \  
 - machine-type e2-medium \  
 - disk  
 - tags http-server
  • Створіть керовану групу інстансів:
gcloud compute instance-groups managed create my-instance-group \  
 - base-instance-template my-instance-template \  
 - size 3 \  
 - zone us-central1-a

2. Створення таргетного пулу:

  • Створіть таргетний пул для розміщення інстансів:
gcloud compute target-pools create my-target-pool \  
 - region us-central1
  • Додайте інстанси до таргетного пулу:
gcloud compute target-pools add-instances my-target-pool \  
 - instances my-instance-group/instance-1,my-instance-group/instance-2,my-instance-group/instance-3

3. Створення правила переадресації:

  • Створіть правило переадресації для направлення трафіку до таргетного пулу:
gcloud compute forwarding-rules create my-forwarding-rule \  
 - target-pool my-target-pool \  
 - ports  
 - region us-central1 (або будь-який інший регіон, який підходить для ваших цілей)

4. Створення правила міжмережевого екрану:

  • Дозвольте вхідний трафік на порт 80 для інстансів:
gcloud compute firewall-rules create allow-http \  
 - allow tcp:80 \  
 - target-tags http-server

Додаткові міркування:

Перевірки стану: Налаштуйте перевірки стану, щоб балансувальник навантаження надсилав трафік лише на здорові інстанси.

Створення перевірки стану для балансувальника навантаження GCP

Щоб створити перевірку стану для балансувальника навантаження GCP, ви можете використати інструмент командного рядка gcloud.
Ось базовий синтаксис:

  • type TCP \
  • port \
  • check-interval \
  • timeout-sec \
  • healthy-threshold \
  • unhealthy-threshold
    ```

Приклад:

Щоб створити перевірку стану TCP на порті 80, з перевіркою кожні 5 секунд і таймаутом 5 секунд, та вимогою 2 підряд успішних перевірок для позначення інстанса як здорового і 3 підряд невдалих перевірок для позначення його як нездорового:

gcloud compute health-checks create my-tcp-health-check \  
 - type TCP \  
 - port 80 \  
 - check-interval 5 \  
 - timeout-sec 5 \  
 - healthy-threshold 2 \  
 - unhealthy-threshold 3

Додаткові поради:

  • Перевірки стану HTTP/HTTPS: Для перевірок стану HTTP/HTTPS ви можете вказати конкретний URL-шлях для перевірки.
  • Перевірки для конкретних протоколів: Розгляньте використання перевірок для конкретних протоколів, таких як HTTP/HTTPS, щоб перевірити стан додатка.
  • Користувацькі перевірки: Для більш складних перевірок стану ви можете використовувати користувацькі скрипти для виконання конкретних тестів.
  • Налаштування перевірки стану: Після створення перевірки стану ви можете асоціювати її з налаштуваннями вашого балансувальника навантаження.

Безпека: Реалізуйте найкращі практики безпеки, такі як використання надійних паролів, увімкнення правил міжмережевого екрану та оновлення програмного забезпечення.

Найкращі практики для правил міжмережевого екрану

Kubernetes та Terraform

  1. Мережі:
  • googlecomputenetwork: Визначає мережу VPC для ваших ресурсів.
  • googlecomputesubnetwork: Визначає підмережу в межах VPC для ваших вузлів Kubernetes.
  • googlecomputeaddress: Створює зовнішню IP-адресу для вашого балансувальника навантаження.
  1. Компоненти балансування навантаження:
  • googlecomputetarget_pool: Створює таргетний пул для зберігання інстансів, які отримуватимуть трафік від балансувальника навантаження.
  • googlecomputebackend_service: Створює бекенд-сервіс, який визначає конфігурацію балансування навантаження (перевірки стану, порт, протокол тощо).
  • googlecomputeforwarding_rule: Створює правило переадресації, яке зв’язує зовнішню IP-адресу з бекенд-сервісом.
  1. Kubernetes:
  • googlecontainercluster: Створює кластер Kubernetes на Google Kubernetes Engine (GKE).
  • googlecontainernode_pool: Створює пул вузлів у кластері Kubernetes.
  1. Перевірки стану:
  • googlecomputehealth_check: Визначає перевірку стану для моніторингу стану інстансів у таргетному пулі.

Основні міркування:

  • Заміна місць заповнення:
    • Оновіть поле регіону на бажаний AWS-реґіон.
    • Налаштуйте ipcidrrange в ресурсі googlecomputesubnetwork згідно з вашими вимогами до мережі.
    • Налаштуйте кластер Kubernetes та пул вузлів відповідно до ваших потреб (наприклад, кількість вузлів, тип машин тощо).
  • Безпека:
    • Реалізуйте відповідні заходи безпеки, такі як групи безпеки мережі та політики IAM, щоб обмежити доступ до ваших ресурсів.
  • Конфігурація балансування навантаження:
    • Налаштуйте конфігурацію балансування навантаження (наприклад, схему балансування, перевірки стану, афінітет сесії) відповідно до вимог вашого додатка.
  • Розгортання в Kubernetes:
    • Розгорніть ваш додаток в кластері Kubernetes за допомогою маніфестів Kubernetes (наприклад, Deployments, Services).

Це базовий приклад.
Вам потрібно буде адаптувати та розширити це відповідно до ваших специфічних вимог та складності вашого додатка.

Не забувайте консультуватися з офіційною документацією Google Cloud для отримання найактуальнішої інформації та найкращих практик.

Terraform

# Потрібно google_cloud  
# Потрібно kubernetes  
# Потрібно google_compute_network  
# Потрібно google_compute_subnetwork  
# Потрібно google_compute_address  
# Потрібно google_compute_target_pool  
# Потрібно google_compute_backend_service  
# Потрібно google_compute_forwarding_rule  
# Потрібно google_container_cluster  
# Потрібно google_container_node_pool  

resource "google_compute_network" "default" {  
 name = "default"  
 auto_create_subnetworks = false  
}  

resource "google_compute_subnetwork" "default" {  
 name = "default"  
 ip_cidr_range = "10.128.0.0/20"  
 region = "us-central1"  
 network = google_compute_network.default.name  
}  

resource "google_compute_address" "external_ip" {  
 name = "external-ip"  
 region = "us-central1"  
 address_type = "EXTERNAL"  
}  

resource "google_compute_target_pool" "my_target_pool" {  
 name = "my-target-pool"  
 region = "us-central1"  
}  

resource "google_compute_backend_service" "my_backend_service" {  
 name = "my-backend-service"  
 load_balancing_scheme = "EXTERNAL"  
 health_checks = [google_compute_health_check.my_health_check.self_link]  
 port = 80  
 protocol = "HTTP"  
 timeout_sec = 30  
 region = "us-central1"  
}  

resource "google_compute_forwarding_rule" "my_forwarding_rule" {  
 name = "my-forwarding-rule"  
 ip_address = google_compute_address.external_ip.address  
 ip_protocol = "TCP"  
 port_range = "80"  
 target = google_compute_backend_service.my_backend_service.self_link  
 load_balancing_scheme = "EXTERNAL"  
 region = "us-central1"  
}  

resource "google_container_cluster" "my_cluster" {  
 name = "my-cluster"  
 location = "us-central1-a"  
 initial_node_count = 3  
 # ... інші налаштування кластера ...  
}  

resource "google_container_node_pool" "my_node_pool" {  
 name = "my-node-pool"  
 location = "us-central1-a"  
 cluster = google_container_cluster.my_cluster.name  
 node_count = 3  
 # ... інші налаштування пулу вузлів ...  
}  

resource "google_compute_health_check" "my_health_check" {  
 name = "my-health-check"  
 check_interval_sec = 5  
 timeout_sec = 5  
 healthy_threshold = 2  
 unhealthy_threshold = 2  
 request_path = "/"  
 port = 80  
 protocol = "TCP"  
 region = "us-central1"  
}  

# Ця частина визначає Kubernetes Service для вашого додатка  
resource "kubernetes_service" "my_service" {  
 metadata {  
 name = "my-service"  
 namespace = "default"   
 }  
 spec {  
 ports {  
 port = 80  
 target_port = 8080   
 }  
 selector = {  
 app = "my-app"   
 }  
 type = "LoadBalancer"   
 }  
}

Пояснення:

  1. Налаштування мережі:
  • Мережа та підмережа: Визначте мережу VPC та підмережу в межах цієї мережі.
  • Зовнішня IP-адреса: Створіть зовнішню IP-адресу, яку буде використовувати балансувальник навантаження.
  1. Компоненти балансування навантаження:
  • Таргетний пул: Створіть таргетний пул для зберігання інстансів, які отримуватимуть трафік від балансувальника навантаження.
  • Бекенд-сервіс: Створіть бекенд-сервіс, який визначає, як розподіляється трафік між інстансами в таргетному пулі.
  • Правило переадресації: Створіть правило переадресації, щоб спрямовувати зовнішній трафік на бекенд-сервіс.
  1. Компоненти Kubernetes:
  • Кластер: Створіть кластер Kubernetes.
  • Пул вузлів: Створіть пул вузлів у кластері для хостингу подів вашого додатка.
  • Сервіс: Створіть сервіс Kubernetes типу "LoadBalancer". Це дозволить експонувати ваш додаток для зовнішнього світу та створить внутрішній балансувальник навантаження в кластері Kubernetes.

1.
Перевірки стану:

  • Створіть перевірку стану для моніторингу здоров’я інстансів у таргетному пулі.

Ключові моменти:

  • Заміна заповнювачів: Замініть заповнювачі, такі як us-central1, my-cluster, my-node-pool тощо, на ваші фактичні значення.
  • Розгортання додатка:
    • Розгорніть ваш додаток як поди Kubernetes у пулі вузлів my-node-pool.
    • Переконайтеся, що ваш додаток слухає на порту 8080 (або на порту, вказаному у ресурсі kubernetes_service).
  • Безпека:
    • Реалізуйте відповідні заходи безпеки, такі як групи безпеки мережі (NSG) та ролі IAM (Identity and Access Management), щоб контролювати доступ до ваших ресурсів.
  • Тестування:
    • Ретельно протестуйте налаштування вашого балансувальника навантаження, щоб переконатися, що він працює як очікується.

Цей приклад надає базову структуру. Ви можете додатково налаштувати його відповідно до ваших специфічних вимог, таких як:

  • Використання іншої схеми балансування навантаження (наприклад, INTERNAL).
  • Налаштування термінації SSL/TLS.
  • Реалізація більш складних перевірок стану.
  • Інтеграція з іншими сервісами Google Cloud.

Цей підхід демонструє, як використовувати Kubernetes та керовані сервіси Google Cloud для створення масштабованого та надійного балансувальника навантаження в мережі. Не забувайте консультуватися з офіційною документацією Google Cloud для отримання найактуальнішої інформації та найкращих практик.

Використання консолі GCP: Ви також можете створювати Network Load Balancers за допомогою консолі GCP. Кроки подібні до підходу через командний рядок, але вони надають більш візуальний та зручний інтерфейс.

Дотримуючись цих кроків і враховуючи додаткові фактори, ви можете ефективно створити Network Load Balancer у GCP для розподілу трафіку між кількома інстансами, що покращить масштабованість, надійність і продуктивність ваших додатків.

Перекладено з: Layer 4 Load Balancers (L4) : Network Load Balancers in the Cloud

Leave a Reply

Your email address will not be published. Required fields are marked *