Utilizzando il modulo Terraform EKS per creare un cluster EKS

Se hai bisogno di configurare un cluster AWS Elastic Kubernetes Service (Amazon EKS) con Terraform, sei fortunato. Utilizzando il modulo Terraform EKS e tutte le altre risorse necessarie, puoi creare una configurazione Terraform e creare un cluster AKS con il codice.

Amazon EKS è un servizio gestito per eseguire Kubernetes su AWS senza installare, gestire e mantenere il proprio cluster Kubernetes. La creazione di un cluster EKS con Terraform consente di creare risorse in modo rapido, efficiente e automatizzato.

In questo tutorial, imparerai come creare e eseguire una configurazione Terraform per creare un cluster EKS passo dopo passo. Iniziamo!

Prerequisiti

Questo post sarà un tutorial passo dopo passo. Se desideri seguirla, assicurati di avere quanto segue:

  • Un account Amazon Web Service (AWS).
  • A code editor – Even though you can use any text editor to work with Terraform configuration files, you should consider Visual Studio (VS) Code as it understands the HCL Terraform language well.
  • Terraform – Questo tutorial utilizzerà Terraform v0.14.9 in esecuzione su Ubuntu 18.04.5 LTS, ma qualsiasi sistema operativo con Terraform dovrebbe funzionare.

Creazione della configurazione di Terraform per un cluster AWS EKS

Terraform è un tool di infrastruttura come codice che consente di creare, modificare e versionare in modo sicuro ed efficiente l’infrastruttura. Terraform utilizza diversi tipi di file di configurazione. Ogni file è scritto in formato testo (.tf) o in formato JSON (.tfjson).

Creiamo innanzitutto una configurazione di Terraform che creerà un cluster AKS da zero quando verrà applicata.

1. Apri un terminale.

2. Crea una cartella chiamata ~/terraform-eks-cluster-demo, quindi cambia (cd) la directory di lavoro in quella cartella. Questa cartella conterrà tutti i file di configurazione con cui lavorerai.

mkdir ~/terraform-eks-cluster-demo
cd ~/terraform-eks-cluster-demo

3. Successivamente, apri il tuo editor di codice preferito e copia/incolla la seguente configurazione, quindi salvala in un file main.tf all’interno della cartella ~/terraform-eks-cluster-demo. Questo file main.tf è la configurazione di Terraform per il cluster AKS.

Il file main.tf contiene tutte le risorse necessarie per la fornitura di un cluster EKS:

  • Un ruolo di Identity and Access Management (IAM) di AWS (terraformekscluster) – questa risorsa sarà gestita da Amazon EKS e effettuerà chiamate ad altri servizi AWS come AWS S3, CloudWatch, ecc., per tuo conto per gestire le risorse che utilizzi con il servizio.
  • Un gruppo di sicurezza EC2 di AWS (risorsa "aws_security_group" "eks-cluster") – consente il traffico di rete in entrata e in uscita dal cluster AWS EKS. Verrà creato un gruppo di sicurezza denominato SG-eks-cluster collegato a un ID VPC, consentendo a tutto il traffico di fluire dentro/fuori dal cluster. 0.0.0.0/0 è l’indirizzo IP di Internet.
  • Cluster EKS (terraformEKScluster) – Questo cluster EKS avrà la versione 1.19.
  • Un ruolo IAM per i nodi EKS per effettuare chiamate ad altri servizi AWS (eks-node-group). Questo ruolo è collegato a una policy che consente di assumere le credenziali di sicurezza temporanee sull’istanza per accedere ad altre risorse AWS.
  • Gruppo di nodi del cluster EKS (node_group1) – questa risorsa definisce il numero di nodi che avrà un cluster tramite l’attributo scaling_config.
# Creazione di un ruolo IAM per i cluster Kubernetes per effettuare chiamate ad altri servizi AWS a tuo nome per gestire le risorse che utilizzi con il servizio.

resource "aws_iam_role" "iam-role-eks-cluster" {
  name = "terraformekscluster"
  assume_role_policy = <<POLICY
{
 "Version": "2012-10-17",
 "Statement": [
   {
   "Effect": "Allow",
   "Principal": {
    "Service": "eks.amazonaws.com"
   },
   "Action": "sts:AssumeRole"
   }
  ]
 }
POLICY
}

# Collegare le policy del cluster EKS al ruolo terraformekscluster.

resource "aws_iam_role_policy_attachment" "eks-cluster-AmazonEKSClusterPolicy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
  role       = "${aws_iam_role.iam-role-eks-cluster.name}"
}


# Gruppo di sicurezza per il traffico di rete da e verso il cluster AWS EKS.

resource "aws_security_group" "eks-cluster" {
  name        = "SG-eks-cluster"
  vpc_id      = "vpc-123456789"  

# L'egress consente il traffico in uscita dal cluster EKS verso Internet

  egress {                   # Regola di uscita
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
# L'ingress consente il traffico in entrata al cluster EKS da Internet

  ingress {                  # Regola di ingresso
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

}

# Creazione del cluster EKS

resource "aws_eks_cluster" "eks_cluster" {
  name     = "terraformEKScluster"
  role_arn =  "${aws_iam_role.iam-role-eks-cluster.arn}"
  version  = "1.19"

# Aggiunta della configurazione VPC

  vpc_config {             # Configurare EKS con vpc e impostazioni di rete
   security_group_ids = ["${aws_security_group.eks-cluster.id}"]
   subnet_ids         = ["subnet-1312586","subnet-8126352"] 
    }

  depends_on = [
    "aws_iam_role_policy_attachment.eks-cluster-AmazonEKSClusterPolicy",
    "aws_iam_role_policy_attachment.eks-cluster-AmazonEKSServicePolicy",
   ]
}

# Creazione di un ruolo IAM per i nodi EKS per lavorare con altri servizi AWS.


resource "aws_iam_role" "eks_nodes" {
  name = "eks-node-group"

  assume_role_policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
POLICY
}

# Collegare diverse policy ai membri del nodo.

resource "aws_iam_role_policy_attachment" "AmazonEKSWorkerNodePolicy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy"
  role       = aws_iam_role.eks_nodes.name
}

resource "aws_iam_role_policy_attachment" "AmazonEKS_CNI_Policy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy"
  role       = aws_iam_role.eks_nodes.name
}

resource "aws_iam_role_policy_attachment" "AmazonEC2ContainerRegistryReadOnly" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
  role       = aws_iam_role.eks_nodes.name
}

# Creazione del gruppo di nodi del cluster EKS

resource "aws_eks_node_group" "node" {
  cluster_name    = aws_eks_cluster.eks_cluster.name
  node_group_name = "node_group1"
  node_role_arn   = aws_iam_role.eks_nodes.arn
  subnet_ids      = ["subnet-","subnet-"]

  scaling_config {
    desired_size = 1
    max_size     = 1
    min_size     = 1
  }

  depends_on = [
    aws_iam_role_policy_attachment.AmazonEKSWorkerNodePolicy,
    aws_iam_role_policy_attachment.AmazonEKS_CNI_Policy,
    aws_iam_role_policy_attachment.AmazonEC2ContainerRegistryReadOnly,
  ]
}

4. Crea un altro file in ~/terraform-eks-cluster-demo chiamato provider.tf e incolla il contenuto di seguito. Il file del provider definisce i provider come AWS, Oracle o Azure, ecc., in modo che Terraform possa connettersi ai servizi cloud corretti.

Il tutorial creerà risorse nella regione us-east-2.

provider "aws" {
   region = "us-east-2"
 }

5. Verificare che tutti i file richiesti siano presenti nella cartella eseguendo il comando tree.

The folder structure of Terraform files

Creazione del cluster AWS EKS con un modulo EKS di Terraform

Ora che hai il file di configurazione di Terraform e i file di variabili pronti, è ora di inizializzare Terraform e creare il cluster. Per fornire il cluster AKS, come per tutte le altre configurazioni di Terraform, Terraform utilizza tre comandi (terraform initterraform planterraform apply).

Ora vediamo ogni fase.

1. Aprire un terminale e navigare nella directory ~/terraform-eks-cluster-demo. cd ~/terraform-eks-cluster-demo

cd ~/terraform-eks-cluster-demo

2. Eseguire il comando terraform init nella stessa directory. Il comando terraform init inizializza i plugin e i provider necessari per lavorare con le risorse.

terraform init

Se tutto va bene, dovresti vedere il messaggio Terraform è stato inizializzato con successo nell’output, come mostrato di seguito.

Initializing the terraform

3. Ora, esegui il comando terraform plan. Eseguire terraform plan non è necessario, ma è consigliato per assicurarti che la sintassi dei file di configurazione sia corretta e ottenere una panoramica delle risorse che verranno create nella tua infrastruttura.

terraform plan

Se tutto va bene, dovresti vedere un messaggio come Piano: “X” da aggiungere, “Y” da modificare o “Z” da eliminare nell’output.

Running the plan command in Terraform

4. Successivamente, esegui terraform apply per rimuovere le protezioni per principianti e invocare Terraform per creare il cluster AKS. L’invocazione di terraform apply legge ogni file di configurazione (*.tf) nella directory corrente per compilare un file di stato inviato ad AWS per creare il cluster EKS e altri componenti.

AWS addebita $0,10 all’ora per ogni cluster EKS. Assicurati di eliminare eventuali cluster di test creati una volta terminato!

terraform apply
Running the Terraform apply command

Verifica del cluster AWS EKS

A questo punto, dovresti avere un cluster AKS funzionante, ma verifichiamo per essere sicuri nella Console di gestione di AWS.

1. Apri il tuo browser preferito, vai alla Console di gestione di AWS e accedi.

2. Fai clic sulla barra di ricerca in alto, cerca EKS e fai clic sulla voce di menu Elastic Kubernetes Service. Dovresti vedere il cluster EKS terraformEKScluster.

Navigating to the EKS service
Checking the terraformEKS Cluster

3. Clicca su Configurazione, e dovresti vedere ogni componente creato con successo che hai definito nella configurazione Terraform, come mostrato di seguito.

Node Role and EKS cluster role.
Security group applied on EKS Cluster.
Node group node_group1

Conclusioni

In questo tutorial, hai imparato come utilizzare Terraform per distribuire un cluster AWS EKS e i suoi componenti. Sei ora pronto a utilizzare questo cluster EKS e a distribuire applicazioni!

Quali applicazioni hai intenzione di distribuire sul tuo nuovo cluster?

Source:
https://adamtheautomator.com/terraform-eks-module/