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

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Instale o agente SSM nos nós de trabalho do Amazon EKS usando o Kubernetes DaemonSet

Criado por Mahendra Revanasiddappa (AWS)

Ambiente: PoC ou piloto

Tecnologias: Contêineres e microsserviços; DevOps; Infraestrutura

Serviços da AWS: Amazon EKS; AWS Systems Manager

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 DaemonSet recurso Kubernetes para instalar o AWS Systems Manager Agent (SSM Agent) em todos os nós de trabalho, em vez de instalá-lo manualmente ou substituir a Amazon Machine Image (AMI) pelos nós. DaemonSet usa um cron job no nó de trabalho 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) AmazonSSM ManagedInstanceCore fornece as permissões necessárias para que o SSM Agent seja executado em instâncias 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 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 DaemonSet pods funcionam em 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.

Usando o Kubernetes DaemonSet para instalar o SSM Agent nos nós de trabalho 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 é usado kubectl para implantar um DaemonSet no cluster Amazon EKS, que instalará o SSM Agent em todos os nós de trabalho.

  • 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

Use o código a seguir para criar um arquivo DaemonSet de configuração que instalará o SSM Agent no cluster 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

Crie o arquivo DaemonSet de configuração.

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

O pod lançado por DaemonSet tem um contêiner principal e um init contêiner. 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

Implemente o DaemonSet no cluster Amazon EKS.

Para implantar o arquivo de DaemonSet configuração que você criou na etapa anterior no cluster 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 trabalho para instalar o SSM Agent.

DevOps

Recursos relacionados