Instale o SSM Agent nos nós de processamento do Amazon EKS usando o DaemonSet do Kubernetes - Recomendações da AWS

Instale o SSM Agent nos nós de processamento do Amazon EKS usando o DaemonSet do Kubernetes

Mahendra Revanasiddappa, Amazon Web Services

Resumo

Observação, setembro de 2021: as mais recentes AMIs otimizadas para Amazon EKS instalam o SSM Agent automaticamente. Para obter mais informações, consulte as notas de release das AMIs de junho de 2021.

No Amazon Elastic Kubernetes Service (Amazon EKS), devido às diretrizes de segurança, os nós de processamento não têm pares de chaves Secure Shell (SSH) anexados a eles. Esse padrão mostra como você pode usar o tipo de recurso DaemonSet do Kubernetes para instalar o AWS Systems Manager Agent (SSM Agent) em todos os nós de processamento, em vez de instalá-lo manualmente ou substituir a imagem de máquina da Amazon (AMI) pelos nós. O DaemonSet usa um trabalho cron no nó de processamento para agendar a instalação do SSM Agent. Você também pode usar esse padrão para instalar outros pacotes nos nós de processamento.

Quando você está solucionando problemas no cluster, a instalação do SSM Agent sob demanda permite estabelecer uma sessão SSH com o nó de processamento, coletar logs ou examinar a configuração da instância, sem pares de chaves SSH.

Pré-requisitos e limitações

Pré-requisitos

  • Um cluster existente do Amazon EKS com nós de processamento do Amazon Elastic Compute Cloud (Amazon EC2).

  • As instâncias de contêiner devem ter as permissões necessárias para se comunicar com o serviço SSM. A função gerenciada do AWS Identity and Access Management (IAM) AmazonSSMManagedInstanceCore fornece as permissões necessárias para que o SSM Agent seja executado em instâncias do EC2. Para obter mais informações, consulte a documentação do AWS Systems Manager.

Limitações

  • Esse padrão não é aplicável ao AWS Fargate, porque os DaemonSets não são compatíveis com a plataforma Fargate.

  • Esse padrão se aplica somente aos nós de processamento baseados em Linux.

  • Os pods do DaemonSet são executados no modo privilegiado. Se o cluster do Amazon EKS tiver um webhook que bloqueia pods no modo privilegiado, o SSM Agent não será instalado.

Arquitetura

O diagrama a seguir ilustra a arquitetura desse padrão.

Uso do DaemonSet do Kubernetes para instalar o SSM Agent nos nós de processamento do Amazon EKS.

Ferramentas

Ferramentas

  • O kubectl é um utilitário de linha de comando que é usado para interagir com um cluster do Amazon EKS. Esse padrão usa o kubectl para implantar um DaemonSet no cluster do Amazon EKS, que instalará o SSM Agent em todos os nós de processamento.

  • O Amazon EKS facilita para você a execução do Kubernetes na AWS, eliminando a necessidade de instalar, operar e manter seu próprio ambiente de gerenciamento ou nós do Kubernetes. O Kubernetes é um sistema de código aberto para automatizar a implantação, a escalabilidade e o gerenciamento de aplicações em contêineres.

  • O Session Manager do AWS Systems Manager permite gerenciar instâncias do EC2, instâncias on-premises e máquinas virtuais (VMs) por meio de um shell interativo baseado em navegador com um clique ou por meio do AWS Command Line Interface (AWS CLI).

Código da

Use o código a seguir para criar um arquivo de configuração DaemonSet que instalará o SSM Agent no cluster do Amazon EKS. Siga as instruções na seção Épicos.

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

Épicos

TarefaDescriçãoHabilidades necessárias

Instale e configure o kubectl para acessar o cluster do EKS.

Se o kubectl ainda não estiver instalado e configurado para acessar o cluster do Amazon EKS, consulte Instalação do kubectl na documentação do Amazon EKS.

DevOps
TarefaDescriçãoHabilidades necessárias

Criar o arquivo de configuração DaemonSet.

Use o código na seção Código no início desse padrão para criar um arquivo de configuração DaemonSet chamado ssm_daemonset.yaml, que será implantado no cluster do Amazon EKS.

O pod lançado pelo DaemonSet tem um contêiner principal e um contêiner init. O contêiner principal tem um comando sleep. O contêiner init inclui uma seção command que cria um arquivo de trabalho cron para instalar o SSM Agent no caminho /etc/cron.d/. O trabalho cron é executado somente uma vez, e o arquivo que ele cria é automaticamente excluído após a conclusão do trabalho.

Quando o contêiner inicial terminar, o contêiner principal espera 60 minutos antes de sair. Após 60 minutos, um novo pod é lançado. Esse pod instala o SSM Agent, se estiver ausente, ou atualiza o SSM Agent para a versão mais recente.

Se necessário, você pode modificar o comando sleep para reiniciar o pod uma vez por dia ou para executá-lo com mais frequência. 

DevOps

Implantar o DaemonSet no cluster do Amazon EKS.

Para implantar o arquivo de configuração DaemonSet que você criou na etapa anterior no cluster do Amazon EKS, use o seguinte comando:

kubectl apply -f ssm_daemonset.yaml

Esse comando cria um DaemonSet para executar os pods nos nós de processamento para instalar o SSM Agent.

DevOps

Recursos relacionados