Schéma architecture réseau

La table de routage permet d’acheminer les paquets entre différents réseaux IP, par exemple d’un réseau privé vers Internet ou vers un autre sous-réseau, en indiquant le prochain saut ou l’interface de sortie pour chaque destination.

Rôle Ansible

La mécanique interne dans K3s

Détail validation du certificat TLS

EICE Endpoint Instance Connect

Administration _eic est un point d’accès managé (géré par AWS) rattaché à un sous-réseau privé de mon VPC. Il sert de passerelle d’entrée sécurisée à sens unique pour l’administration. Il me permet de me connecter en SSH pour le monitoring et pour les tests à mes instances privées, sans ouvrir le port 22 sur l’Internet public, sans maintenir de Bastion, et sans utiliser de VPN. Il se trouve dans AZ A 10.0.1.X/24

Je lance la commande de connexion depuis mon PC via l’AWS CLI.

Étape 1 : Récupérer l’Instance ID de la cible

Pour récupérer dynamiquement l’identifiant de l’instance WordPress/K3s en cours d’exécution :

aws ec2 describe-instances \
  --filters "Name=tag:Name,Values=wordpress-terraform" "Name=instance-state-name,Values=running" \
  --query "Reservations[*].Instances[*].[InstanceId,PrivateIpAddress]" \
  --region eu-central-1 \
  --output table

-La commande appelle d’abord l’API AWS globale. AWS vérifie mes clés d’accès sur mon PC (mon identité IAM).

Et si mon utilisateur a le droit (la stratégie IAM) d’utiliser l’EICE sur cette instance, AWS valide.

Étape 2 : Lancer la session SSH via l’EICE

aws ec2-instance-connect ssh \
  --instance-id <INSTANCE_ID> \
  --os-user ubuntu \
  --region eu-central-1

-AWS génère instantanément une clé SSH publique temporaire et l’envoie via les canaux internes d’AWS directement dans la mémoire de ma VM cible (le démon ec2-instance-connect qui tourne sur Ubuntu). Cette clé a une durée de vie de 60 secondes.  (pas besoin de fichier .pem et .pub)

-L’AWS CLI ouvre ensuite un tunnel sécurisé (chiffré par AWS) entre mon PC et l’endpoint EICE au sein du VPC. L’EICE sert de point de sortie à ce tunnel.

-L’EICE prend le relais à l’intérieur du réseau privé d’AWS. Il initie une connexion privée vers l’IP privée de mon instance cible (10.0.1.X) sur le port 22. ma VM Ubuntu voit arriver la connexion, valide la clé éphémère reçue à l’étape 2.  

Les 2 barrières de sécurité de l’EICE :

Le verrou IAM :

  Seul l’administrateur qui possède les droits IAM AWS sur son PC peut initier la commande. L’Internet public ne peut même pas « tenter »   de forcer le SSH.

Le verrou des Security Groups (Le réseau local) :

  Au départ (Sur l’EICE) : Le Security Group de l’EICE (aws_security_group.eic_sg.id) possède une règle de Sortie (Egress) qui l’autorise   à envoyer du trafic sur le port 22 uniquement vers le bloc d’IP du VPC   (10.0.0.0/16).

  À l’arrivée (Sur la VM K3s / WordPress) : Le Security Group de ma VM   (aws_security_group.wordpress_sg.id) possède une règle   d’Entrée (Ingress) qui autorise le port 22   uniquement si la demande provient du Security Group de l’EICE   (referenced_security_group_id =   aws_security_group.eic_sg.id).

Instance K3s, pods WordPress
Controlleur Ingress reçoit le flux du NLB, Pods WordPress

Je n’ai pas de réplica, un réplica de pod permettrait de rendre un deploiement ou une mise à jour (rolling update) de façon plus transparente. (l’autre pod prendrait le relais)

Mes pods WordPress sont stateless (sans mémoire)
Mes pvc sont de type elastic block store EBS, ils permettent de conserver les données dans un block rattaché à mon instance. (images, pdf, fichiers css, php)

Pour répliquer l’instance k3s elle-même sur une autre AZ, il faudrait passer à une infrastructure de type Auto Scaling Group ASG. Cela permettrait une réelle haute résilience et disponibilité. Il me faudrait avoir un volume EFS Elastic File System.

Relationnal Data Base RDS

J’ai un seul moteur MySQL mais 2 bases de données indépendantes sur RDS

Mon instance RDS héberge deux bases de données distinctes (db_site1 et db_site2). Le déploiement est automatisé via Ansible : chaque conteneur WordPress est configuré, lors de son initialisation (initContainer., template wordpress) Cela permet une isolation totale des données applicatives tout en optimisant les coûts d’infrastructure.

RDS est stateful

Accessible uniquement depuis le port 3306 par le serveur WordPress

Tableau des composants

Retour en haut