Gebruik van Terraform EKS-module om een EKS-cluster te creëren

Als je een AWS Elastic Kubernetes Service (Amazon EKS) cluster wilt opzetten met Terraform, heb je geluk. Door gebruik te maken van de Terraform EKS-module en alle andere benodigde middelen, kun je één Terraform-configuratie maken en een AKS-cluster met code aanmaken.

Amazon EKS is een beheerde service om Kubernetes op AWS uit te voeren zonder je eigen Kubernetes-cluster te installeren, te bedienen en te onderhouden. Het bouwen van een EKS-cluster met Terraform stelt je in staat om snel, efficiënt en op geautomatiseerde wijze middelen aan te maken.

In deze tutorial leer je stap voor stap hoe je een Terraform-configuratie kunt maken en uitvoeren om een EKS-cluster met Terraform op te zetten. Laten we beginnen!

Vereisten

Deze post zal een stapsgewijze handleiding zijn. Als je wilt meedoen, zorg er dan voor dat je het volgende hebt:

  • Een Amazon Web Service (AWS)-account.
  • 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 – Deze tutorial zal Terraform v0.14.9 gebruiken dat draait op Ubuntu 18.04.5 LTS, maar elk besturingssysteem met Terraform zou moeten werken.

Het opbouwen van de Terraform-configuratie voor een AWS EKS-cluster

Terraform is een hulpmiddel voor infrastructuur als code dat u in staat stelt om op een veilige en efficiënte manier infrastructuur te bouwen, te wijzigen en te versie. Terraform maakt gebruik van verschillende soorten configuratiebestanden. Elk bestand is geschreven in ofwel platte tekst (.tf) of JSON-formaat (.tfjson).

Laten we eerst een Terraform-configuratie maken die een AKS-cluster vanaf nul zal maken wanneer toegepast.

1. Open een terminal.

2. Maak een map genaamd ~/terraform-eks-cluster-demo, en verander vervolgens (cd) de werkmap naar die map. Deze map bevat alle configuratiebestanden waarmee u gaat werken.

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

3. Open vervolgens uw favoriete code-editor en kopieer/plak de volgende configuratie, en sla het op in een bestand genaamd main.tf binnen de ~/terraform-eks-cluster-demo. Dit main.tf bestand is de Terraform-configuratie voor het AKS-cluster.

Het main.tf bestand bevat alle bronnen die nodig zijn om een EKS-cluster te voorzien:

  • Een AWS Identity and Access Management (IAM)-rol (terraformekscluster) – Deze bron wordt beheerd door Amazon EKS en maakt namens u oproepen naar andere AWS-services zoals AWS S3, CloudWatch, enzovoort, om de resources die u gebruikt met de service te beheren.
  • Een AWS EC2-beveiligingsgroep (resource "aws_security_group" "eks-cluster") – Hiermee wordt inkomend en uitgaand netwerkverkeer vanuit de AWS EKS-cluster toegestaan. U start een beveiligingsgroep met de naam SG-eks-cluster die is gekoppeld via een VPC-ID, waardoor al het verkeer van en naar de cluster kan stromen. 0.0.0.0/0 is het IP-adres van het internet.
  • EKS-cluster (terraformEKScluster) – Dit EKS-cluster zal versie 1.19 zijn.
  • Een IAM-rol voor EKS-nodes om oproepen te doen naar andere AWS-services (eks-node-group). Deze rol is gekoppeld aan een beleid dat het aannemen van tijdelijke beveiligingsreferenties op de instantie toestaat om andere AWS-resources te openen.
  • EKS-cluster-nodegroep (node_group1) – Deze bron bepaalt het aantal nodes dat een cluster zal hebben via het attribuut scaling_config.
# Het maken van een IAM-rol voor Kubernetes-clusters om namens u oproepen te doen naar andere AWS-services om de resources te beheren die u gebruikt met de service.

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
}

# Het koppelen van de EKS-clusterbeleidsregels aan de terraformekscluster-rol.

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}"
}


# Beveiligingsgroep voor netwerkverkeer van en naar AWS EKS-cluster.

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

# Uitgaand verkeer toestaan vanaf de EKS-cluster naar het internet.

  egress {                   # Uitgaande regel
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
# Inkomend verkeer naar EKS-cluster toestaan vanaf het internet.

  ingress {                  # Inkomende regel
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

}

# Het maken van de EKS-cluster

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

# Toevoegen van VPC-configuratie

  vpc_config {             # EKS configureren met vpc- en netwerkinstellingen
   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",
   ]
}

# Het maken van een IAM-rol voor EKS-nodes om met andere AWS-services te werken.


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
}

# Het koppelen van verschillende beleidsregels aan nodeleden.

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
}

# Een EKS-cluster-nodegroep maken

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. Maak een ander bestand in ~/terraform-eks-cluster-demo noem het provider.tf en plak de onderstaande inhoud. Het providerbestand definieert providers zoals AWS, Oracle, of Azure, enz., zodat Terraform verbinding kan maken met de juiste cloudservices.

De tutorial zal resources creëren in de regio us-east-2.

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

5. Controleer of alle benodigde bestanden hieronder aanwezig zijn in de map door het tree-commando uit te voeren.

The folder structure of Terraform files

Maak de AWS EKS-cluster aan met een Terraform EKS-module

Nu je het Terraform-configuratiebestand en variabelenbestanden klaar hebt staan, is het tijd om Terraform te starten en het cluster te maken. Om het AKS-cluster in te richten, gebruikt Terraform, zoals bij alle andere Terraform-configuraties, drie commando’s (terraform initterraform planterraform apply).

Laten we nu elke fase doornemen.

1. Open een terminal en navigeer naar de ~/terraform-eks-cluster-demo map. cd ~/terraform-eks-cluster-demo

cd ~/terraform-eks-cluster-demo

2. Voer het terraform init-commando uit in dezelfde map. Het terraform init-commando initialiseert de plugins en providers die nodig zijn om met resources te werken.

terraform init

Als alles goed gaat, zou je het bericht Terraform is succesvol geïnitialiseerd in de uitvoer moeten zien, zoals hieronder weergegeven.

Initializing the terraform

3. Voer nu het terraform plan commando uit. Het uitvoeren van terraform plan is niet noodzakelijk maar wel aan te raden om ervoor te zorgen dat de syntaxis van je configuratiebestanden correct is en je een blauwdruk geeft van de resources die in je infrastructuur worden voorzien.

terraform plan

Als het succesvol is, zou je een bericht als Plan: “X” toe te voegen, “Y” te wijzigen, of “Z” te vernietigen in de uitvoer moeten zien.

Running the plan command in Terraform

4. Voer vervolgens terraform apply uit om de trainingswielen te verwijderen en Terraform aan te roepen om de AKS-cluster te maken. Het aanroepen van terraform apply leest elke configuratie (*.tf) in de huidige directory om een statusbestand samen te stellen dat naar AWS wordt verzonden om de EKS-cluster en andere componenten te bouwen.

AWS rekent $0.10 per uur voor elke EKS-cluster. Zorg ervoor dat je eventuele testclusters die je hebt gemaakt, vernietigt!

terraform apply
Running the Terraform apply command

Verifiëren van de AWS EKS-cluster

Op dit punt zou je een functionerende AKS-cluster moeten hebben gebouwd, maar laten we verifiëren om er zeker van te zijn in de AWS Management Console.

1. Open je favoriete webbrowser, navigeer naar de AWS Management Console en log in.

2. Klik op de zoekbalk bovenaan, zoek naar EKS, en klik op het menu-item Elastic Kubernetes Service. Je zou de terraformEKScluster EKS-cluster moeten zien.

Navigating to the EKS service
Checking the terraformEKS Cluster

3. Klik op Configuratie, en je zou elk component moeten zien dat succesvol is aangemaakt zoals gedefinieerd in de Terraform-configuratie, zoals hieronder getoond.

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

Conclusie

In deze handleiding heb je geleerd hoe je Terraform kunt gebruiken om een AWS EKS-cluster en de bijbehorende componenten te implementeren. Je bent nu klaar om dit EKS-cluster te gebruiken en applicaties te implementeren!

Welke applicaties ben je van plan te implementeren op je nieuw gevonden cluster?

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