Comment créer un cluster Amazon EKS et des groupes de nœuds qui n'ont pas besoin d'accéder à Internet ?

Date de la dernière mise à jour : 10/07/2020

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

Vous pouvez utiliser 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, mais cette stratégie peut être davantage restreinte en fonction de vos besoins.

Conseil : Pour 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 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 choisissez l'onglet Sorties. Cet onglet contient des informations sur vos sous-réseaux dont vous avez 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 et 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 d'autres attributs ou en ajouter 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 pour créer le cluster et les nœuds Amazon EKS. Si vous utilisez d'autres outils ou la console pour créer un nœud de travail, 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 de travail.

2.    Pour 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

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.

Le résultat ressemble à 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 ou de l'outil eksctl. Pour plus d'informations sur eksctl, consultez la page Managing nodegroups sur le site web de Weaveworks.


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


Besoin d'aide pour une question technique ou de facturation ?