Instalar el agente SSM en los nodos de trabajo de Amazon EKS mediante DaemOnset de Kubernetes
Mahendra Revanasiddappa, Amazon Web Services
Resumen
Nota, septiembre de 2021: Las últimas AMI optimizadas para Amazon EKS instalan SSM Agent automáticamente. Para obtener más información, consulte las notas de la versión
En Amazon Elastic Kubernetes Service (Amazon EKS), debido a las directrices de seguridad, los nodos de trabajo no tienen pares de claves de Secure Shell (SSH) adjuntos. Este patrón muestra cómo puede usar el tipo de recurso DaemOnset de Kubernetes para instalar AWS Systems Manager Agent (SSM Agent) en todos los nodos de trabajo, en lugar de instalarlo manualmente o reemplazar la Imagen de máquina de Amazon (AMI) de los nodos. DaemOnset utiliza un trabajo cron en el nodo de trabajo para programar la instalación del agente SSM. También puede usar este patrón para instalar otros paquetes en los nodos de trabajo.
Al solucionar problemas en el clúster, instalar el agente SSM bajo demanda le permite establecer una sesión de SSH con el nodo de trabajo, recopilar registros o analizar la configuración de la instancia, sin pares de claves SSH.
Requisitos previos y limitaciones
Requisitos previos
Un clúster de Amazon EKS existente con nodos de trabajo de Amazon Elastic Compute Cloud (Amazon EC2).
Las instancias contenedoras deben tener los permisos necesarios para comunicarse con el servicio SSM. El rol administrado de AWS Identity and Access Management (IAM) AmazonssmManagedInstanceCore proporciona los permisos necesarios para que SSM Agent se ejecute en instancias EC2. Para obtener más información, consulte la documentación de AWS Systems Manager.
Limitaciones
Este patrón no se aplica a AWS Fargate porque la plataforma Fargate no admite los DaemonSets.
Este patrón solo se aplica a los nodos de trabajo basados en Linux.
Los pods de DaemOnset se ejecutan en modo privilegiado. Si el clúster de Amazon EKS tiene un webhook que bloquea los pods en modo privilegiado, el agente SSM no se instalará.
Arquitectura
El siguiente diagrama ilustra la arquitectura de este patrón.

Herramientas
Herramientas
kubectl es una utilidad de línea de comandos que se utiliza para interactuar con un clúster de Amazon EKS. Este patrón utiliza
kubectlpara implementar un DaemOnset en el clúster de Amazon EKS, que instalará el agente SSM en todos los nodos de trabajo.Amazon EKS facilita la ejecución de Kubernetes en AWS sin tener que instalar, operar y mantener su propio plano o nodos de control de Kubernetes. Kubernetes es un sistema de código abierto para automatizar la implementación, el escalado y la administración de las aplicaciones en contenedores.
El administrador de sesiones de AWS Systems Manager le permite administrar instancias EC2, instancias locales y máquinas virtuales (VM) mediante una intérprete de comandos interactiva con un solo clic basada en navegador o mediante la Interfaz de la línea de comandos de AWS (AWS CLI).
Código
Utilice el siguiente código para crear un archivo de configuración de DaemOnset que instalará el agente SSM en el clúster de Amazon EKS. Siga las instrucciones en la sección 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
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Instale y configure kubectl para acceder al clúster de EKS. | Si | DevOps |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Crear el archivo de configuración de DaemonSet. | Utilice el código de la sección Código que aparece anteriormente en este patrón para crear un archivo de configuración de DaemOnset denominado El pod lanzado por DaemOnset tiene un contenedor principal y un contenedor Cuando el contenedor de inicio ha terminado, el contenedor principal espera 60 minutos antes de salir. Después de 60 minutos, se lanza un nuevo pod. Este pod instala SSM Agent, si falta, o actualiza SSM Agent a la versión más reciente. Si es necesario, puede modificar el comando | DevOps |
Implementación de DaemOnset en el clúster de Amazon EKS. | Para implementar el archivo de configuración de DaemOnset que creó en el paso anterior en el clúster de Amazon EKS, utilice el siguiente comando:
Este comando crea un DaemOnset para ejecutar los pods en los nodos de trabajo e instalar el agente SSM. | DevOps |
Recursos relacionados
Instalación de kubectl (documentación de Amazon EKS)
Configuración del administrador de sesiones (documentación de AWS Systems Manager)