Connectez des nœuds hybrides avec Bottlerocket - Amazon EKS

Aidez à améliorer cette page

Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.

Connectez des nœuds hybrides avec Bottlerocket

Cette rubrique décrit comment connecter des nœuds hybrides exécutant Bottlerocket à un cluster Amazon EKS. Bottlerocket est une distribution Linux open source sponsorisée et prise en charge par AWS. Bottlerocket est spécialement conçu pour héberger des charges de travail conteneurisées. Avec Bottlerocket, vous pouvez améliorer la disponibilité des déploiements conteneurisés et réduire les coûts opérationnels en automatisant les mises à jour de votre infrastructure de conteneurs. Bottlerocket ne comprend que les logiciels essentiels à l’exécution des conteneurs, ce qui améliore l’utilisation des ressources, réduit les menaces de sécurité et diminue les frais généraux liés à la gestion.

Seules les variantes VMware de Bottlerocket version v1.37.0 et supérieure sont prises en charge avec les nœuds hybrides EKS. Les variantes VMware de Bottlerocket sont disponibles pour les versions v1.28 et supérieures de Kubernetes. Les images OS pour ces variantes incluent kubelet, containerd, aws-iam-authenticator et d’autres logiciels prérequis pour les nœuds hybrides EKS. Vous pouvez configurer ces composants à l’aide d’un fichier de paramètres Bottlerocket qui comprend des données utilisateur encodées en base64 pour les conteneurs de démarrage et d’administration Bottlerocket. La configuration de ces paramètres permet à Bottlerocket d’utiliser votre fournisseur d’informations d’identification de nœuds hybrides pour authentifier les nœuds hybrides sur votre cluster. Une fois que vos nœuds hybrides ont rejoint le cluster, leur statut Not Ready s’affiche dans la console Amazon EKS et dans les outils compatibles avec Kubernetes, tels que kubectl. Une fois les étapes décrites sur cette page terminées, passez à la section Configurer CNI pour les nœuds hybrides pour préparer vos nœuds hybrides à exécuter des applications.

Prérequis

Avant de connecter des nœuds hybrides à votre cluster Amazon EKS, assurez-vous d’avoir suivi toutes les étapes préalables.

Étape 1 : créer le fichier TOML des paramètres Bottlerocket

Pour configurer Bottlerocket pour les nœuds hybrides, vous devez créer un fichier settings.toml contenant la configuration nécessaire. Le contenu du fichier TOML varie en fonction du fournisseur d’informations d’identification que vous utilisez (SSM ou Rôles Anywhere IAM). Ce fichier sera transmis en tant que données utilisateur lors de la mise à disposition de l’instance Bottlerocket.

SSM

Si vous utilisez Systems Manager AWS comme fournisseur d’informations d’identification, créez un fichier settings.toml contenant les informations suivantes :

[settings.kubernetes] cluster-name = "<cluster-name>" api-server = "<api-server-endpoint>" cluster-certificate = "<cluster-certificate-authority>" hostname-override = "<hostname>" provider-id = "eks-hybrid:///<region>/<cluster-name>/<hostname>" authentication-mode = "aws" [settings.network] hostname = "<hostname>" [settings.aws] region = "<region>" [settings.kubernetes.node-labels] "eks.amazonaws.com/compute-type" = "hybrid" "eks.amazonaws.com/hybrid-credential-provider" = "ssm" [settings.host-containers.admin] enabled = true user-data = "<base64-encoded-admin-container-userdata>" [settings.bootstrap-containers.eks-hybrid-setup] mode = "always" user-data = "<base64-encoded-bootstrap-container-userdata>" [settings.host-containers.control] enabled = true

Remplacez les espaces réservés par les valeurs suivantes :

  • <cluster-name> : le nom de votre cluster Amazon EKS.

  • <api-server-endpoint> : point de terminaison du serveur d’API de votre cluster.

  • <cluster-certificate-authority> : Ensemble CA codé en base64 de votre cluster.

  • <region> : La région AWS hébergeant votre cluster, par exemple « us-east-1 ».

  • <hostname> : le nom d’hôte de l’instance Bottlerocket, qui sera également configuré comme nom de nœud. Il peut s’agir de n’importe quelle valeur unique de votre choix, mais elle doit respecter les conventions de nommage des objets Kubernetes. De plus, le nom d’hôte que vous utilisez ne peut pas dépasser 64 caractères. REMARQUE : lorsque vous utilisez le fournisseur SSM, ce nom d’hôte et ce nom de nœud seront remplacés par l’ID de l’instance gérée (par exemple, ID mi-*) une fois que l’instance aura été enregistrée auprès de SSM.

  • <base64-encoded-admin-container-userdata> : Contenu codé en base64 de la configuration du conteneur d’administration Bottlerocket. L’activation du conteneur d’administration vous permet de vous connecter à votre instance Bottlerocket avec SSH pour explorer le système et le déboguer. Bien que ce paramètre ne soit pas obligatoire, nous vous recommandons de l’activer afin de faciliter le dépannage. Pour plus d’informations sur l’authentification avec le conteneur d’administration, consultez la documentation relative au conteneur d’administration Bottlerocket. Le conteneur d’administration accepte les entrées utilisateur et clé SSH au format JSON, par exemple :

{ "user": "<ssh-user>", "ssh": { "authorized-keys": [ "<ssh-authorized-key>" ] } }
  • <base64-encoded-bootstrap-container-userdata> : Contenu encodé en base64 de la configuration du conteneur d’amorçage Bottlerocket. Pour plus d’informations sur sa configuration, consultez la documentation relative au conteneur Bottlerocket bootstrap. Le conteneur Bootstrap est chargé d’enregistrer l’instance en tant qu’instance gérée SSM AWS et de l’ajouter en tant que nœud Kubernetes à votre cluster Amazon EKS. Les données utilisateur transmises au conteneur Bootstrap prennent la forme d’une invocation de commande qui accepte en entrée le code d’activation hybride SSM et l’ID que vous avez créés précédemment :

eks-hybrid-ssm-setup --activation-id=<activation-id> --activation-code=<activation-code> --region=<region>

IAM Roles Anywhere

Si vous utilisez Rôles Anywhere IAM AWS comme fournisseur d’informations d’identification, créez un fichier settings.toml contenant les informations suivantes :

[settings.kubernetes] cluster-name = "<cluster-name>" api-server = "<api-server-endpoint>" cluster-certificate = "<cluster-certificate-authority>" hostname-override = "<hostname>" provider-id = "eks-hybrid:///<region>/<cluster-name>/<hostname>" authentication-mode = "aws" [settings.network] hostname = "<hostname>" [settings.aws] region = "<region>" config = "<base64-encoded-aws-config-file>" [settings.kubernetes.node-labels] "eks.amazonaws.com/compute-type" = "hybrid" "eks.amazonaws.com/hybrid-credential-provider" = "iam-ra" [settings.host-containers.admin] enabled = true user-data = "<base64-encoded-admin-container-userdata>" [settings.bootstrap-containers.eks-hybrid-setup] mode = "always" user-data = "<base64-encoded-bootstrap-container-userdata>"

Remplacez les espaces réservés par les valeurs suivantes :

  • <cluster-name> : le nom de votre cluster Amazon EKS.

  • <api-server-endpoint> : point de terminaison du serveur d’API de votre cluster.

  • <cluster-certificate-authority> : Ensemble CA codé en base64 de votre cluster.

  • <region> : La région AWS hébergeant votre cluster, par exemple « us-east-1 »

  • <hostname> : le nom d’hôte de l’instance Bottlerocket, qui sera également configuré comme nom de nœud. Il peut s’agir de n’importe quelle valeur unique de votre choix, mais elle doit respecter les conventions de nommage des objets Kubernetes. De plus, le nom d’hôte que vous utilisez ne peut pas dépasser 64 caractères. REMARQUE : lorsque vous utilisez le fournisseur IAM-RA, le nom du nœud doit correspondre au nom commun (CN) du certificat sur l’hôte si vous avez configuré la stratégie de confiance de votre rôle IAM des nœuds hybrides avec la condition de ressource "sts:RoleSessionName": "${aws:PrincipalTag/x509Subject/CN}".

  • <base64-encoded-aws-config-file> : Le contenu de votre fichier de configuration AWS encodé en base64. Le contenu du fichier doit être le suivant :

[default]
credential_process = aws_signing_helper credential-process --certificate /root/.aws/node.crt --private-key /root/.aws/node.key --profile-arn <profile-arn> --role-arn <role-arn> --trust-anchor-arn <trust-anchor-arn> --role-session-name <role-session-name>
  • <base64-encoded-admin-container-userdata> : Contenu codé en base64 de la configuration du conteneur d’administration Bottlerocket. L’activation du conteneur d’administration vous permet de vous connecter à votre instance Bottlerocket avec SSH pour explorer le système et le déboguer. Bien que ce paramètre ne soit pas obligatoire, nous vous recommandons de l’activer afin de faciliter le dépannage. Pour plus d’informations sur l’authentification avec le conteneur d’administration, consultez la documentation relative au conteneur d’administration Bottlerocket. Le conteneur d’administration accepte les entrées utilisateur et clé SSH au format JSON, par exemple :

{ "user": "<ssh-user>", "ssh": { "authorized-keys": [ "<ssh-authorized-key>" ] } }
  • <base64-encoded-bootstrap-container-userdata> : Contenu encodé en base64 de la configuration du conteneur d’amorçage Bottlerocket. Pour plus d’informations sur sa configuration, consultez la documentation relative au conteneur Bottlerocket bootstrap. Le conteneur Bootstrap est chargé de créer les fichiers de certificat hôte et de clé privée de certificat Rôles Anywhere IAM sur l’instance. Ceux-ci seront ensuite utilisés par le aws_signing_helper pour obtenir des informations d’identification temporaires afin de s’authentifier auprès de votre cluster Amazon EKS. Les données utilisateur transmises au conteneur bootstrap prennent la forme d’une invocation de commande qui accepte en entrée le contenu du certificat et de la clé privée que vous avez créés précédemment :

eks-hybrid-iam-ra-setup --certificate=<certificate> --key=<private-key>

Étape 2 : fournir les données utilisateur à la machine virtuelle Bottlerocket vSphere

Une fois le fichier TOML créé, transmettez-le en tant que données utilisateur lors de la création de la machine virtuelle vSphere. N’oubliez pas que les données utilisateur doivent être configurées avant la première mise sous tension de la machine virtuelle. Vous devrez donc le fournir lors de la création de l’instance. Si vous souhaitez créer la VM à l’avance, celle-ci devra être dans un état « poweredOff » jusqu’à ce que vous configuriez les données utilisateur correspondantes. Par exemple, si vous utilisez l’interface CLI govc :

Création d’une machine virtuelle pour la première fois

govc vm.create \ -on=true \ -c=2 \ -m=4096 \ -net.adapter=<network-adapter> \ -net=<network-name> \ -e guestinfo.userdata.encoding="base64" \ -e guestinfo.userdata="$(base64 -w0 settings.toml)" \ -template=<template-name> \ <vm-name>

Mise à jour des données utilisateur pour une machine virtuelle existante

govc vm.create \ -on=false \ -c=2 \ -m=4096 \ -net.adapter=<network-adapter> \ -net=<network-name> \ -template=<template-name> \ <vm-name> govc vm.change -vm <vm-name> \ -e guestinfo.userdata="$(base64 -w0 settings.toml)" \ -e guestinfo.userdata.encoding="base64" govc vm.power -on <vm-name>

Dans les sections ci-dessus, l’option -e guestinfo.userdata.encoding="base64" spécifie que les données utilisateur sont encodées en base64. Cette option -e guestinfo.userdata transmet le contenu du fichier settings.toml encodé en base64 sous forme de données utilisateur à l’instance Bottlerocket. Remplacez les espaces réservés par vos valeurs spécifiques, telles que le modèle OVA Bottlerocket et les détails réseau.

Étape 3 : vérifier la connexion du nœud hybride

Une fois l’instance Bottlerocket démarrée, elle tentera de rejoindre votre cluster Amazon EKS. Vous pouvez vérifier la connexion dans la console Amazon EKS en accédant à l’onglet Calcul de votre cluster ou en exécutant la commande suivante :

kubectl get nodes
Important

Vos nœuds auront le statut Not Ready, ce qui est normal et dû à l’absence d’un CNI fonctionnant sur vos nœuds hybrides. Si vos nœuds ne se sont pas joints au cluster, consultez Dépannage des nœuds hybrides.

Étape 4 : configurer un CNI pour les nœuds hybrides

Pour que vos nœuds hybrides soient prêts à exécuter des applications, poursuivez avec les étapes décrites à la section Configurer CNI pour les nœuds hybrides.