Comment créer un cluster Amazon EKS et des groupes de nœuds qui ne requièrent pas d'accès à Internet ?

Dernière mise à jour : 01/08/2022

Je souhaite créer un cluster Amazon Elastic Kubernetes Service (Amazon EKS) et des groupes de nœuds avec une mise en réseau PrivateOnly. Je ne souhaite pas utiliser de passerelle Internet ou de passerelle de traduction d'adresses réseau (NAT).

Brève description

Utilisez AWS PrivateLink pour créer un cluster Amazon EKS et son groupe de nœuds sans utiliser de route vers Internet.

Solution

Créer un Amazon Virtual Private Cloud (Amazon VPC) pour votre cluster Amazon EKS

1.    Créez une pile AWS CloudFormation selon le modèle suivant :

https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-06-10/amazon-eks-fully-private-vpc.yaml

La pile crée un VPC comportant trois sous-réseaux PrivateOnly et des points de terminaison de VPC pour les services requis. Un sous-réseau PrivateOnly possède une table de routage qui n'a pas d'accès à Internet et dotée d'une route locale par défaut.

Important : le modèle AWS CloudFormation crée les points de terminaison d'un VPC avec une stratégie d'accès complet, il est cependant possible de restreindre cette stratégie en fonction de vos besoins.

Conseil : afin de vérifier tous les points de terminaison d'un VPC après la création de la pile, ouvrez la console Amazon VPC, puis choisissez Endpoints (Points de terminaison) dans le volet de navigation.

2.    Ouvrez la console AWS CloudFormation.

3.    Dans le volet de navigation, sélectionnez Piles.

4.    Choisissez votre pile, puis sélectionnez l'onglet Outputs (Sorties). Cet onglet contient des informations sur vos sous-réseaux dont vous aurez besoin ultérieurement, notamment l'ID du VPC.

Configurez le fichier de configuration du cluster Amazon EKS, puis créez le cluster ainsi que le groupe de nœuds

1.    Dans le fichier de configuration suivant, mettez à jour la Région AWS ainsi que les trois sous-réseaux PrivateOnly que vous avez créés dans la section Créer un VPC pour votre cluster Amazon EKS. Vous pouvez également modifier ou ajouter d'autres attributs dans le fichier de configuration. Par exemple, vous pouvez mettre à jour les attributs name, instanceType, ou desiredCapacity.

Exemple de fichier de configuration :

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: prod
  region: us-east-1   
nodeGroups:
  - name: ng-1
    instanceType: m5.xlarge
    desiredCapacity: 2
    privateNetworking: true
vpc:
  subnets:
    private:
      us-east-1a:
        id: "subnet-0111111111111111"
      us-east-1b:
        id: "subnet-0222222222222222"
      us-east-1c:
        id: "subnet-0333333333333333"
  clusterEndpoints:
    publicAccess:  true
    privateAccess: true

Dans le fichier de configuration précédent, pour l'attribut nodeGroups, définissez privateNetworking sur true. Pour l'attribut clusterEndpoints, définissez privateAccess sur true.

Important : L'outil eksctl n'est pas requis dans le cadre de cette solution. Vous pouvez utiliser d'autres outils ou la console Amazon EKS afin de créer les nœuds et le cluster Amazon EKS. Si vous utilisez d'autres outils ou la console pour créer un nœud, vous devez transmettre le certificat d'une autorité de certification et le point de terminaison de serveur API du cluster Amazon EKS en tant qu'arguments, tout en appelant le script d'amorçage pour le nœud.

2.    Afin de créer un cluster Amazon EKS et un groupe de nœuds basés sur le fichier de configuration mis à jour à l'étape 1, exécutez la commande suivante :

$ eksctl create cluster -f config.yaml

Remarque : certaines versions d'eksctl peuvent provoquer des erreurs lors de la création du fichier Kubeconfig lorsque le fichier mentionne client.authentication.k8s.io/v1alpha1. Vous pouvez mettre à jour le fichier Kubeconfig en exécutant la commande update-kubeconfig (dans ce cas, assurez-vous d'utiliser la dernière version de l'AWS CLI).

La commande précédente crée un cluster Amazon EKS et un groupe de nœuds dans un réseau PrivateOnly à l'aide d'AWS PrivateLink sans accès Internet. Le processus dure environ 30 minutes.

La sortie est similaire à ce qui suit :

Output
[ℹ]  eksctl version 0.21.0
[ℹ]  using region us-east-1
[✔]  using existing VPC (vpc-01234567) and subnets (private:[subnet-01111111111111111 subnet-02222222222222222 subnet-03333333333333333] public:[])
[!]  custom VPC/subnets will be used; if resulting cluster doesn't function as expected, make sure to review the configuration of VPC/subnets
[ℹ]  nodegroup "ng-1" will use "ami-0ee0652ac0722f0e3" [AmazonLinux2/1.16]
[ℹ]  using Kubernetes version 1.16
[ℹ]  creating EKS cluster "prod" in "us-east-1" region with un-managed nodes
[ℹ]  1 nodegroup (ng-1) was included (based on the include/exclude rules)
[ℹ]  will create a CloudFormation stack for cluster itself and 1 nodegroup stack(s)
[ℹ]  will create a CloudFormation stack for cluster itself and 0 managed nodegroup stack(s)
[ℹ]  if you encounter any issues, check CloudFormation console or try 'eksctl utils describe-stacks --region=us-east-1 --cluster=prod'
[ℹ]  CloudWatch logging will not be enabled for cluster "prod" in "us-east-1"
[ℹ]  you can enable it with 'eksctl utils update-cluster-logging --region=us-east-1 --cluster=prod'
[ℹ]  Kubernetes API endpoint access will use provided values {publicAccess=true, privateAccess=true} for cluster "prod" in "us-east-1"
[ℹ]  2 sequential tasks: { create cluster control plane "prod", 2 sequential sub-tasks: { update cluster VPC endpoint access configuration, create nodegroup "ng-1" } }
[ℹ]  building cluster stack "eksctl-prod-cluster"
[ℹ]  deploying stack "eksctl-prod-cluster"
[ℹ]  building nodegroup stack "eksctl-prod-nodegroup-ng-1"
[ℹ]  --nodes-min=2 was set automatically for nodegroup ng-1
[ℹ]  --nodes-max=2 was set automatically for nodegroup ng-1
[ℹ]  deploying stack "eksctl-prod-nodegroup-ng-1"
[✔]  all EKS cluster resources for "prod" have been created
[✔]  saved kubeconfig as "/Users/garpunee/.kube/config"
[ℹ]  adding identity "arn:aws:iam::444444444444:role/eksctl-prod-nodegroup-ng-1-NodeInstanceRole-H37FWX4H84GH" to auth ConfigMap
[ℹ]  nodegroup "ng-1" has 0 node(s)
[ℹ]  waiting for at least 2 node(s) to become ready in "ng-1"
[ℹ]  nodegroup "ng-1" has 2 node(s)
[ℹ]  node "ip-192-168-254-139.ec2.internal" is ready
[ℹ]  node "ip-192-168-60-191.ec2.internal" is ready
[ℹ]  kubectl command should work with "/Users/<>/.kube/config", try 'kubectl get nodes'
[✔]  EKS cluster "prod" in "us-east-1" region is ready

Remarque : vous pouvez également créer des groupes de nœuds gérés ou non gérés au sein de votre cluster à l'aide de la Console de gestion AWS ou de l'outil eksctl. Pour plus d'informations sur eksctl, veuillez consulter la page Managing nodegroups sur le site Web de Weaveworks.


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?