DEV Community

Paulo Ponciano
Paulo Ponciano

Posted on • Originally published at Medium

Cluster EKS com Istio ingress e service mesh [Lab Session]

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.

Topologia macro

Código terraform aqui.

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:

  1. Stack VPC: https://github.com/paulofponciano/lab-eks-istio-aws-1/tree/main/vpc
  2. Stack EKS: https://github.com/paulofponciano/lab-eks-istio-aws-1/tree/main/eks

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"
}
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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:

DNS records

Kiali

Grafana

Agora é seguir com seus deploys…

Happy building!

Top comments (0)