Installa l'agente SSM sui nodi di lavoro Amazon EKS utilizzando Kubernetes DaemonSet - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Installa l'agente SSM sui nodi di lavoro Amazon EKS utilizzando Kubernetes DaemonSet

Creato da Mahendra Revanasiddappa (AWS)

Ambiente: PoC o pilota

Tecnologie: contenitori e microservizi; infrastruttura DevOps

Servizi AWS: Amazon EKS; AWS Systems Manager

Riepilogo

Nota, settembre 2021: le ultime AMI ottimizzate per Amazon EKS installano automaticamente SSM Agent. Per ulteriori informazioni, consulta le note di rilascio per le AMI di giugno 2021.

In Amazon Elastic Kubernetes Service (Amazon EKS), a causa delle linee guida sulla sicurezza, ai nodi di lavoro non sono associate coppie di chiavi Secure Shell (SSH). Questo modello mostra come utilizzare il tipo di DaemonSet risorsa Kubernetes per installare AWS Systems Manager Agent (SSM Agent) su tutti i nodi di lavoro, anziché installarlo manualmente o sostituire l'Amazon Machine Image (AMI) per i nodi. DaemonSet utilizza un cron job sul nodo di lavoro per pianificare l'installazione di SSM Agent. È inoltre possibile utilizzare questo modello per installare altri pacchetti sui nodi di lavoro.

Quando si risolvono i problemi del cluster, l'installazione di SSM Agent on demand consente di stabilire una sessione SSH con il nodo di lavoro, di raccogliere i log o di esaminare la configurazione dell'istanza, senza coppie di chiavi SSH.

Prerequisiti e limitazioni

Prerequisiti

  • Un cluster Amazon EKS esistente con nodi di lavoro Amazon Elastic Compute Cloud (Amazon EC2).

  • Le istanze di container devono disporre delle autorizzazioni necessarie per comunicare con il servizio SSM. Il ruolo gestito di AWS Identity and Access Management (IAM) AmazonSSM ManagedInstanceCore fornisce le autorizzazioni necessarie per l'esecuzione di SSM Agent su istanze EC2. Per ulteriori informazioni, consulta la documentazione di AWS Systems Manager.

Limitazioni

  • Questo modello non è applicabile ad AWS Fargate, perché DaemonSets non sono supportati sulla piattaforma Fargate.

  • Questo modello si applica solo ai nodi di lavoro basati su Linux.

  • I DaemonSet pod funzionano in modalità privilegiata. Se il cluster Amazon EKS dispone di un webhook che blocca i pod in modalità privilegiata, l'agente SSM non verrà installato.

Architettura

Il diagramma seguente illustra l'architettura di questo modello.

Utilizzo di Kubernetes DaemonSet per installare SSM Agent sui nodi di lavoro Amazon EKS.

Strumenti

Strumenti

  • kubectl è un'utilità da riga di comando utilizzata per interagire con un cluster Amazon EKS. Questo modello viene utilizzato kubectl per distribuire un agente SSM DaemonSet sul cluster Amazon EKS, che installerà l'agente SSM su tutti i nodi di lavoro.

  • Amazon EKS semplifica l'esecuzione di Kubernetes su AWS senza dover installare, utilizzare e mantenere il tuo piano di controllo o i tuoi nodi Kubernetes. Kubernetes è un sistema open source per automatizzare l'implementazione, il dimensionamento e la gestione di applicazioni containerizzate.

  • AWS Systems Manager Session Manager consente di gestire le istanze EC2, le istanze locali e le macchine virtuali (VM) tramite una shell interattiva basata su browser con un solo clic o tramite l'AWS Command Line Interface (AWS CLI).

Codice

Utilizza il codice seguente per creare un file di DaemonSet configurazione che installerà l'agente SSM sul cluster Amazon EKS. Segui le istruzioni nella sezione Epics.

cat << EOF > ssm_daemonset.yaml apiVersion: apps/v1 kind: DaemonSet metadata: labels: k8s-app: ssm-installer name: ssm-installer namespace: kube-system spec: selector: matchLabels: k8s-app: ssm-installer template: metadata: labels: k8s-app: ssm-installer spec: containers: - name: sleeper image: busybox command: ['sh', '-c', 'echo I keep things running! && sleep 3600'] initContainers: - image: amazonlinux imagePullPolicy: Always name: ssm command: ["/bin/bash"] args: ["-c","echo '* * * * * root yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm & rm -rf /etc/cron.d/ssmstart' > /etc/cron.d/ssmstart"] securityContext: allowPrivilegeEscalation: true volumeMounts: - mountPath: /etc/cron.d name: cronfile terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumes: - name: cronfile hostPath: path: /etc/cron.d type: Directory dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler terminationGracePeriodSeconds: 30 EOF

Epiche

AttivitàDescrizioneCompetenze richieste

Installa e configura kubectl per accedere al cluster EKS.

Se kubectl non è già installato e configurato per accedere al cluster Amazon EKS, consulta Installazione di kubectl nella documentazione di Amazon EKS.

DevOps
AttivitàDescrizioneCompetenze richieste

Crea il file DaemonSet di configurazione.

Utilizza il codice nella sezione Codice precedente di questo modello per creare un file di DaemonSet configurazione chiamatossm_daemonset.yaml, che verrà distribuito nel cluster Amazon EKS.

Il pod lanciato da DaemonSet ha un contenitore principale e un init contenitore. Il contenitore principale ha un sleep comando. Il init contenitore include una command sezione che crea un file cron job per installare SSM Agent sul percorso. /etc/cron.d/ Il cron job viene eseguito solo una volta e il file che crea viene automaticamente eliminato dopo il completamento del lavoro.

Quando il contenitore init è terminato, il contenitore principale attende 60 minuti prima di uscire. Dopo 60 minuti, viene lanciato un nuovo pod. Questo pod installa SSM Agent, se manca, o aggiorna SSM Agent alla versione più recente.

Se necessario, puoi modificare il sleep comando per riavviare il pod una volta al giorno o per eseguirlo più spesso. 

DevOps

Implementa il DaemonSet file sul cluster Amazon EKS.

Per distribuire il file di DaemonSet configurazione creato nel passaggio precedente sul cluster Amazon EKS, utilizza il seguente comando:

kubectl apply -f ssm_daemonset.yaml

Questo comando crea un comando DaemonSet per eseguire i pod sui nodi di lavoro per installare SSM Agent.

DevOps

Risorse correlate