Adicionar uma regra de balanceador de carga usando Terraform
Terraform é uma ferramenta de infraestrutura como código criada pela HashiCorp. Ela permite automatizar a criação e a modificação de recursos de infraestrutura usando a linguagem declarativa de configuração HCL.
Capacidades do Terraform
- Gerenciar infraestrutura com uma única ferramenta
- Controle de versão e configurações reutilizáveis
- Possibilidade de acompanhar o estado atual da infraestrutura
Neste guia, veremos como gerenciar regras de balanceador de carga usando Terraform.
Por que usar um balanceador de carga Copiar link
Um balanceador de carga de rede permite distribuir uniformemente o tráfego de entrada entre vários servidores para melhorar a disponibilidade e a confiabilidade do seu serviço. Ele é uma ferramenta indispensável ao implementar o escalonamento horizontal de serviços.
O escalonamento horizontal é o processo de adicionar nós ou máquinas adicionais a uma infraestrutura existente para aumentar sua capacidade e lidar com um volume maior de tráfego.
Principais benefícios de um balanceador de carga
- Balanceamento de carga para sessões TCP para garantir o uso ideal dos recursos do servidor
- Suporte a vários protocolos: HTTP, HTTP2, HTTPS, TCP
- Tolerância a falhas do servidor de aplicação para evitar indisponibilidade do serviço e manter a disponibilidade
- Possibilidade de configurar regras de roteamento de tráfego para direcionar requisições para portas específicas dos servidores
- Suporte à configuração de SSL e redirecionamento para HTTPS
Criar um balanceador de carga Copiar link
Primeiro, definimos os requisitos para o balanceador de carga:
- Temos dois servidores, cada um hospedando um site na porta 80
- Ao acessar o balanceador de carga na porta 80, as requisições devem ser direcionadas para um dos nossos servidores
- Algoritmo: Round Robin
- Sem parâmetros adicionais
Para adicionar uma regra ao nosso balanceador de carga, precisamos criá-lo e configurar o balanceamento entre servidores. Adicionamos dois servidores para configurar o balanceamento de carga entre eles.
Em seguida, criamos um projeto Terraform. Consulte este guia para mais detalhes sobre como instalar e configurar o provider.
Primeiro, crie uma pasta onde as configurações serão armazenadas:
mkdir hostman-lb
cd hostman-lbA estrutura de arquivos fica assim:
├── hostman-lb
│ ├── main.tf
│ ├── variables.tfNo arquivo variables.tf, especificamos variáveis para o token do provider e os endereços IP usados no balanceamento de carga:
variable "hm_token" {
type = string
sensitive = true
}
variable "lb-ips" {
type = set(string)
}No arquivo main.tf, adicionamos as informações do provider:
terraform {
required_providers {
hm = {
source = "hostman-cloud/hostman"
}
}
required_version = ">= 0.13"
}
provider "hm" {
token = var.hm_token
}Ao descrever uma configuração do Terraform, usamos dois tipos principais de entidades: data sources (data) e resources.
- Data sources são usados para definir variáveis e configurações disponíveis dentro do provider escolhido. Exemplos incluem presets, projetos e outros parâmetros.
- Resources são os elementos de infraestrutura que queremos criar usando Terraform, como servidores, bancos de dados, balanceadores de carga e outros componentes.
No main.tf, especificamos um preset para a configuração:
data "hm_lb_preset" "lb-preset" {
requests_per_second = "10K"
price_filter {
from = 100
to = 200
}
}Se você usa projetos no painel de controle, pode especificar o projeto onde os recursos serão criados. Por exemplo, adicionamos um projeto chamado "Docs":
data "hm_projects" "docs" {
name = "Docs"
}O recurso que vamos criar se chama hm_lb. Ao criá-lo, você pode especificar vários parâmetros opcionais, como configurações de verificação de integridade e algoritmo de balanceamento de carga. Usaremos a configuração mais simples:
resource "hm_lb" "load-balancer" {
name = "load-balancer"
algo = "roundrobin"
project_id = data.hm_projects.articles.id
preset_id = data.hm_lb_preset.lb-preset.id
health_check {
proto = "tcp"
port = 80
}
ips = var.lb-ips
}Outros parâmetros que podem ser especificados incluem:
ips: lista de endereços IP para balanceamentois_keepalive: indicador que define se a conexão TCP com o servidor deve ser mantidais_ssl: redirecionamento automático para HTTPSis_sticky: manter a sessão do usuário em um único servidor backend
Também adicionamos um arquivo .tfvars ao projeto com valores para as variáveis definidas em variables.tf:
hm_token = "<insira aqui a chave de API do provider>"
lb-ips = [ "<IP do primeiro servidor>", "<IP do segundo servidor>" ]Em seguida, execute:
terraform validateSe tudo estiver correto, você verá uma mensagem de sucesso.
Para ver quais recursos serão criados, execute:
terraform plan -var-file=.tfvarsA flag -var-file=.tfvars permite que o Terraform use os valores de variáveis definidos nesse arquivo.
As variáveis também podem ser definidas de outras formas:
- Usando a flag -var, por exemplo:
-var="hm_token=243453452345235456643" - Usando variáveis de ambiente:
export TF_VAR_hm_token=243453452345235456643Adicionar regras ao balanceador de carga Copiar link
Uma regra no balanceador de carga refere-se à configuração de encaminhamento de portas. Para qualquer regra, é necessário especificar:
- A porta pela qual os clientes acessam o balanceador de carga
- A porta nos servidores de destino para a qual o tráfego será encaminhado
Adicione um novo recurso à configuração no main.tf:
resource "hm_lb_rule" "lb-rule" {
lb_id = resource.hm_lb.load-balancer.id
balancer_proto = "http"
balancer_port = 80
server_proto = "http"
server_port = 80
}Execute os comandos novamente:
terraform validate
terraform plan -var-file=.tfvars
terraform apply -var-file=.tfvarsConfirme digitando yes.
No painel de controle, você verá os recursos criados:
- Balanceador de carga
- Regra
Acesse o endereço do balanceador de carga (duas vezes para alcançar servidores diferentes):
- Primeiro servidor especificado nas variáveis
- Segundo servidor especificado nas variáveis
Se for necessária uma segunda regra, por exemplo, para uma nova aplicação que roda na porta 81, basta adicionar outro bloco de recurso:
resource "hm_lb_rule" "lb-second-rule" {
lb_id = resource.hm_lb.load-balancer.id
balancer_proto = "http"
balancer_port = 81
server_proto = "http"
server_port = 81
}Execute:
terraform plan -var-file=.tfvarsVocê verá que um balanceador de carga e uma regra já existem, e que uma nova regra será adicionada.
Depois execute:
terraform apply -var-file=.tfvarsConfirme a aplicação da configuração quando solicitado.
Verifique o painel de controle: agora duas regras estão configuradas. Acesse o endereço do balanceador de carga para confirmar que tudo está funcionando corretamente.
Conclusão Copiar link
Neste guia, aprendemos como criar balanceadores de carga de rede e regras usando Terraform. Além do Terraform, os balanceadores de carga também podem ser gerenciados via API.