AWSKubernetesCloudDevOps

AWS EKS : déployer et opérer Kubernetes managé sur AWS

3 octobre 2026 · Sphinx-Digital

EKS supprime la gestion du control plane Kubernetes — nodes masters, etcd, API server. Vous gérez uniquement les nœuds worker. En contrepartie, quelques spécificités AWS à connaître pour éviter les pièges courants.

Créer un cluster EKS avec Terraform

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "~> 20.0"

  cluster_name    = "myapp-production"
  cluster_version = "1.29"

  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnets

  # Accès à l'API server depuis les nœuds uniquement (pas depuis Internet)
  cluster_endpoint_public_access  = true
  cluster_endpoint_private_access = true
  cluster_endpoint_public_access_cidrs = ["${var.office_ip}/32"]

  # Chiffrement etcd avec KMS
  cluster_encryption_config = {
    resources        = ["secrets"]
    provider_key_arn = aws_kms_key.eks.arn
  }

  eks_managed_node_groups = {
    general = {
      instance_types = ["m6i.large"]
      min_size       = 2
      max_size       = 10
      desired_size   = 3

      labels = { role = "general" }
      taints = []
    }

    spot = {
      instance_types = ["m6i.large", "m5.large", "m5a.large"]
      capacity_type  = "SPOT"
      min_size       = 0
      max_size       = 20
      desired_size   = 0

      labels = { role = "spot", "lifecycle" = "spot" }
      taints = [{
        key    = "lifecycle"
        value  = "spot"
        effect = "NO_SCHEDULE"
      }]
    }
  }
}

IRSA : IAM pour les Service Accounts

IRSA permet aux pods de s’authentifier auprès d’AWS sans stocker de credentials. Un pod avec un Service Account approprié peut appeler S3, DynamoDB, SQS directement.

# Créer un rôle IAM utilisable par le Service Account "myapp" dans le namespace "production"
module "myapp_irsa" {
  source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"

  role_name = "myapp-production"

  oidc_providers = {
    main = {
      provider_arn               = module.eks.oidc_provider_arn
      namespace_service_accounts = ["production:myapp"]
    }
  }
}

resource "aws_iam_role_policy" "myapp_s3" {
  role = module.myapp_irsa.iam_role_name
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [{
      Effect = "Allow"
      Action = ["s3:GetObject", "s3:PutObject"]
      Resource = "${aws_s3_bucket.uploads.arn}/*"
    }]
  })
}
# Service Account annoté avec le rôle IAM
apiVersion: v1
kind: ServiceAccount
metadata:
  name: myapp
  namespace: production
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123456789:role/myapp-production

Addons essentiels post-installation

# AWS Load Balancer Controller — remplace l'ALB Ingress Controller
helm install aws-load-balancer-controller eks/aws-load-balancer-controller   -n kube-system   --set clusterName=myapp-production   --set serviceAccount.create=false   --set serviceAccount.name=aws-load-balancer-controller

# EBS CSI Driver — nécessaire pour les PersistentVolumes EBS
eksctl create addon --name aws-ebs-csi-driver --cluster myapp-production

# Cluster Autoscaler — scale les node groups automatiquement
helm install cluster-autoscaler autoscaler/cluster-autoscaler   --set autoDiscovery.clusterName=myapp-production   --set awsRegion=eu-west-1

Accéder au cluster

# Configurer kubectl
aws eks update-kubeconfig --name myapp-production --region eu-west-1

# Vérifier l'accès
kubectl get nodes
kubectl get pods -A

# Accès en lecture seule pour les développeurs
aws eks update-kubeconfig --name myapp-production --region eu-west-1   --role-arn arn:aws:iam::123456789:role/developer-readonly

Notre formation AWS couvre EKS avec des ateliers Terraform sur des comptes AWS réels.