Paulo Ponciano
Posted on January 29, 2024
Neste laboratório provisionamos um cluster EKS (Elastic Kubernetes Service) em sua VPC específica. Também foi feito deploy do Istio para servir de ingress e service mesh.
Utilizamos o terraform para provisionar toda estrutura, desde a VPC com seus componentes (Subnets, Route tables, NAT Gateways) até o cluster EKS com as roles necessárias, autoscaler e istio.
Pré-requisitos
Terraform instalado
AWS CLI instalado
Credenciais administrativas da conta alvo/aws configuradas localmente
Domínio válido — Não é necessariamente pré-requisito, mas vai ajudar muito
Sequência de execução terraform:
Variáveis (VPC)
Entrada de informações para construção da VPC onde o EKS será provisionado:
# REGIAO DO PROVISIONAMENTO
variable "aws_region" {
default = "us-east-2"
}
# PRIMEIRA ZONA DE DISPONIBILIDADE
variable "az1" {
default = "us-east-2a"
}
# SEGUNDA ZONA DE DISPONIBILIDADE
variable "az2" {
default = "us-east-2b"
}
# USAR AQUI A IDENTIFICACAO DO AMBIENTE
variable "customer_env" {
default = "pegasus"
}
# INFORME O NOME QUE IRA UTILIZAR NO CLUSTER EKS # IMPORTANTE PARA RESOURCE K8S SHARING
variable "cluster_eks_name" {
default = "pegasus"
}
# CIDR VPC
variable "vpc_cidr_block" {
default = "172.28.0.0/16"
}
# SUBNET PUBLICA AZ1
variable "subnet_public_1_cidr" {
default = "172.28.0.0/20"
}
# SUBNET PUBLICA AZ2
variable "subnet_public_2_cidr" {
default = "172.28.16.0/20"
}
# SUBNET PRIVADA AZ1
variable "subnet_private_1_cidr" {
default = "172.28.32.0/20"
}
# SUBNET PRIVADA AZ2
variable "subnet_private_2_cidr" {
default = "172.28.48.0/20"
}
Variáveis (EKS)
Entrada de informações para construção do cluster EKS:
# Project info
cluster_name = "pegasus"
project = "aws_eks"
project_env = "dev"
region = "us-east-2"
k8s_version = "1.23"
# VPC and Subnets
vpc_id = "vpc-098fcf96c6bf63984"
vpc_cidr_block = "172.28.0.0/16"
public_access_cidrs = [
"0.0.0.0/0", # ALB ingress and autoscaler requirement
]
subnets = [ # Private subnets for eks cluster
"subnet-004dc3048338f46d2",
"subnet-084712a61e733db7c"
]
public_subnets = [ # Public subnets for nlb
"subnet-06e93c11da6c036fa",
"subnet-0580216a454f96636"
]
# Autoscaling configuration
instance_type = "t3.medium"
desired_size = "2"
min_size = "2"
max_size = "3"
# Disk
disk_size = "30"
# Endpoint access
endpoint_private_access = true
endpoint_public_access = true
# Logging
enabled_cluster_log_types = [
"api",
"audit",
"controllerManager"
]
# Istio
kiali_virtual_service_host = "kiali.dominio.com"
grafana_kiali_virtual_service_host = "grafana.dominio.com"
Construção
- Execute a stack de VPC:
terraform init
terraform plan
terraform apply
Outputs para utilizar na stack do EKS:
- Após ajustar o arquivo variables.tfvars do EKS, execute a stack:
terraform init
terraform plan --var-file variables.tfvars
terraform apply --var-file variables.tfvars
Após o retorno abaixo, está tudo provisionado e sua máquina local conectada ao cluster:
- Validar executando kubectl na máquina local:
kubectl get pods --all-namespaces
- Deploy bookinfo para validar o funcionamento do istio:
No repositório https://github.com/paulofponciano/lab-eks-istio-aws-1/tree/main/eks/samples execute o comando kubectl abaixo:
kubectl apply -f bookinfo.yaml
- Acesse em seu navegador com o próprio endereço CNAME do Network Load Balancer com path /productpage:
- Caso tenha informado seu domínio em variables.tfvars para o kiali e grafana, pode acessar após criar os respectivos registros no DNS de seu domínio:
Agora é seguir com seus deploys…
Happy building!
Posted on January 29, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.