Conectar nós híbridos com o Bottlerocket - Amazon EKS

Ajudar a melhorar esta página

Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.

Conectar nós híbridos com o Bottlerocket

Este tópico descreve como conectar nós híbridos que executam o Bottlerocket a um cluster do Amazon EKS. O Bottlerocket é uma distribuição de código aberto do Linux patrocinada e apoiada pela AWS. O Bottlerocket foi desenvolvido especificamente para hospedar workloads de contêineres. Com o Bottlerocket, você pode melhorar a disponibilidade de implantações em contêineres e reduzir os custos operacionais automatizando as atualizações em sua infraestrutura de contêineres. O Bottlerocket inclui somente o software essencial para executar contêineres, o que melhora o uso de recursos, reduz as ameaças à segurança e diminui a sobrecarga de gerenciamento.

Somente as variantes VMware do Bottlerocket versão v1.37.0 e superior são compatíveis com os nós híbridos do EKS. As variantes de VMware do Bottlerocket estão disponíveis para as versões v1.28 e superiores do Kubernetes. As imagens do sistema operacional para essas variantes incluem o kubelet, containerd, aws-iam-authenticator e outros pré-requisitos de software para nós híbridos do EKS. É possível configurar esses componentes usando um arquivo de configurações do Bottlerocket que inclui dados do usuário codificados em base64 para os contêineres de bootstrap e administração do Bottlerocket. Configurar essas opções permite que o Bottlerocket use seu provedor de credenciais de nós híbridos para autenticar nós híbridos em seu cluster. Depois que os nós híbridos se unirem ao cluster, eles aparecerão com o status Not Ready no console do Amazon EKS e em ferramentas compatíveis com o Kubernetes, como o kubectl. Depois de concluir as etapas desta página, prossiga para Configurar a CNI para nós híbridos para preparar os nós híbridos para executar aplicações.

Pré-requisitos

Antes de conectar nós híbridos ao cluster do Amazon EKS, certifique-se de ter concluído as etapas de pré-requisitos.

Etapa 1: criar o arquivo TOML de configurações do Bottlerocket

Para configurar o Bottlerocket para nós híbridos, você precisa criar um arquivo settings.toml com a configuração necessária. O conteúdo do arquivo TOML será diferente com base no provedor de credenciais utilizado (SSM ou IAM Roles Anywhere). Esse arquivo será passado como dados do usuário ao provisionar a instância do Bottlerocket.

nota

Os arquivos no formato TOML fornecidos abaixo representam somente as configurações mínimas necessárias para inicializar uma máquina com sistema operacional Bottlerocket na VMWare como um nó em um cluster do EKS. O Bottlerocket oferece uma ampla variedade de configurações para atender a diversos casos de uso. Portanto, para explorar outras opções de configuração além da inicialização de nós híbridos, consulte a documentação do Bottlerocket. Nessa documentação, você encontrará a lista completa de todas as configurações documentadas da versão do Bottlerocket que você está usando (por exemplo, estas são as configurações disponíveis para o Bottlerocket 1.51.x).

SSM

Se você estiver usando o AWS Systems Manager como seu provedor de credenciais, crie um arquivo settings.toml com o seguinte conteúdo:

[settings.kubernetes] cluster-name = "<cluster-name>" api-server = "<api-server-endpoint>" cluster-certificate = "<cluster-certificate-authority>" hostname-override = "<hostname>" provider-id = "eks-hybrid:///<region>/<cluster-name>/<hostname>" authentication-mode = "aws" cloud-provider = "" server-tls-bootstrap = true [settings.network] hostname = "<hostname>" [settings.aws] region = "<region>" [settings.kubernetes.credential-providers.ecr-credential-provider] enabled = true cache-duration = "12h" image-patterns = [ "*.dkr.ecr.*.amazonaws.com", "*.dkr.ecr.*.amazonaws.com.rproxy.govskope.ca.cn", "*.dkr.ecr.*.amazonaws.eu", "*.dkr.ecr-fips.*.amazonaws.com", "*.dkr.ecr-fips.*.amazonaws.eu", "public.ecr.aws" ] [settings.kubernetes.node-labels] "eks.amazonaws.com/compute-type" = "hybrid" "eks.amazonaws.com/hybrid-credential-provider" = "ssm" [settings.host-containers.admin] enabled = true user-data = "<base64-encoded-admin-container-userdata>" [settings.bootstrap-containers.eks-hybrid-setup] mode = "always" user-data = "<base64-encoded-bootstrap-container-userdata>" [settings.host-containers.control] enabled = true

Substitua os espaços reservados pelos seguintes valores:

  • <cluster-name>: o nome do cluster do Amazon EKS.

  • <api-server-endpoint>: o endpoint do servidor de API do seu cluster.

  • <cluster-certificate-authority>: o pacote de CA codificado em base64 do seu cluster.

  • <region>: a região da AWS que hospeda seu cluster, por exemplo, "us-east-1".

  • <hostname>: o nome do host da instância do Bottlerocket que também será configurado como o nome do nó. Esse pode ser qualquer valor exclusivo escolhido por você, mas deve seguir as convenções de nomenclatura de objetos do Kubernetes. Além disso, o nome do host utilizado não pode ter mais de 64 caracteres. OBSERVAÇÃO: quando o provedor SSM for usado, esse nome de host e nome de nó serão substituídos pelo ID da instância gerenciada (por exemplo, ID mi-*) depois que a instância for registrada no SSM.

  • <base64-encoded-admin-container-userdata>: o conteúdo codificado em base64 da configuração do contêiner administrativo do Bottlerocket. A ativação do contêiner administrativo permite que você se conecte à sua instância do Bottlerocket com SSH para exploração e depuração do sistema. Embora essa não seja uma configuração obrigatória, recomendamos ativá-la para facilitar a solução de problemas. Consulte a documentação do contêiner administrativo do Bottlerocket para obter mais informações sobre a autenticação com o contêiner administrativo. O contêiner administrativo recebe a entrada do usuário e da chave SSH no formato JSON, por exemplo,

{ "user": "<ssh-user>", "ssh": { "authorized-keys": [ "<ssh-authorized-key>" ] } }
  • <base64-encoded-bootstrap-container-userdata>: o conteúdo codificado em base64 da configuração do contêiner de bootstrap do Bottlerocket. Consulte a documentação do contêiner de bootstrap do Bottlerocket para obter mais informações sobre sua configuração. O contêiner de bootstrap é responsável por registrar a instância como uma instância gerenciada do AWS SSM e adicioná-la como um nó Kubernetes em seu cluster do Amazon EKS. Os dados do usuário passados para o contêiner de bootstrap assumem a forma de uma invocação de comando que aceita como entrada o código de ativação híbrida do SSM e o ID que você criou anteriormente:

eks-hybrid-ssm-setup --activation-id=<activation-id> --activation-code=<activation-code> --region=<region>

IAM Roles Anywhere

Se você estiver usando o AWS IAM Roles Anywhere como seu provedor de credenciais, crie um arquivo settings.toml com o seguinte conteúdo:

[settings.kubernetes] cluster-name = "<cluster-name>" api-server = "<api-server-endpoint>" cluster-certificate = "<cluster-certificate-authority>" hostname-override = "<hostname>" provider-id = "eks-hybrid:///<region>/<cluster-name>/<hostname>" authentication-mode = "aws" cloud-provider = "" server-tls-bootstrap = true [settings.network] hostname = "<hostname>" [settings.aws] region = "<region>" config = "<base64-encoded-aws-config-file>" [settings.kubernetes.credential-providers.ecr-credential-provider] enabled = true cache-duration = "12h" image-patterns = [ "*.dkr.ecr.*.amazonaws.com", "*.dkr.ecr.*.amazonaws.com.rproxy.govskope.ca.cn", "*.dkr.ecr.*.amazonaws.eu", "*.dkr.ecr-fips.*.amazonaws.com", "*.dkr.ecr-fips.*.amazonaws.eu", "public.ecr.aws" ] [settings.kubernetes.node-labels] "eks.amazonaws.com/compute-type" = "hybrid" "eks.amazonaws.com/hybrid-credential-provider" = "iam-ra" [settings.host-containers.admin] enabled = true user-data = "<base64-encoded-admin-container-userdata>" [settings.bootstrap-containers.eks-hybrid-setup] mode = "always" user-data = "<base64-encoded-bootstrap-container-userdata>"

Substitua os espaços reservados pelos seguintes valores:

  • <cluster-name>: o nome do cluster do Amazon EKS.

  • <api-server-endpoint>: o endpoint do servidor de API do seu cluster.

  • <cluster-certificate-authority>: o pacote de CA codificado em base64 do seu cluster.

  • <region>: a região da AWS que hospeda seu cluster, por exemplo, "us-east-1"

  • <hostname>: o nome do host da instância do Bottlerocket que também será configurado como o nome do nó. Esse pode ser qualquer valor exclusivo escolhido por você, mas deve seguir as convenções de nomenclatura de objetos do Kubernetes. Além disso, o nome do host utilizado não pode ter mais de 64 caracteres. OBSERVAÇÃO: quando um provedor IAM-RA é usado, o nome do nó deve corresponder ao CN do certificado no host caso tenha configurado a política de confiança do perfil do IAM do Hybrid Nodes com a condição de recurso "sts:RoleSessionName": "${aws:PrincipalTag/x509Subject/CN}".

  • <base64-encoded-aws-config-file>: o conteúdo codificado em base64 do seu arquivo de configuração da AWS. O conteúdo do arquivo deve ser o seguinte:

[default]
credential_process = aws_signing_helper credential-process --certificate /root/.aws/node.crt --private-key /root/.aws/node.key --profile-arn <profile-arn> --role-arn <role-arn> --trust-anchor-arn <trust-anchor-arn> --role-session-name <role-session-name>
  • <base64-encoded-admin-container-userdata>: o conteúdo codificado em base64 da configuração do contêiner administrativo do Bottlerocket. A ativação do contêiner administrativo permite que você se conecte à sua instância do Bottlerocket com SSH para exploração e depuração do sistema. Embora essa não seja uma configuração obrigatória, recomendamos ativá-la para facilitar a solução de problemas. Consulte a documentação do contêiner administrativo do Bottlerocket para obter mais informações sobre a autenticação com o contêiner administrativo. O contêiner administrativo recebe a entrada do usuário e da chave SSH no formato JSON, por exemplo,

{ "user": "<ssh-user>", "ssh": { "authorized-keys": [ "<ssh-authorized-key>" ] } }
  • <base64-encoded-bootstrap-container-userdata>: o conteúdo codificado em base64 da configuração do contêiner de bootstrap do Bottlerocket. Consulte a documentação do contêiner de bootstrap do Bottlerocket para obter mais informações sobre sua configuração. O contêiner de bootstrap é responsável por criar os arquivos de certificado de host e chave privada do certificado do IAM Roles Anywhere na instância. Eles serão consumidos pelo aws_signing_helper para obter as credenciais temporárias necessárias para autenticação com seu cluster do Amazon EKS. Os dados do usuário passados para o contêiner de bootstrap assumem a forma de uma invocação de comando que aceita como entrada o conteúdo do arquivo de certificado e chave privada que você criou anteriormente:

eks-hybrid-iam-ra-setup --certificate=<certificate> --key=<private-key>

Etapa 2: provisionar a VM vSphere do Bottlerocket com dados do usuário

Depois de construir o arquivo TOML, passe-o como dados do usuário durante a criação da VM vSphere. Lembre-se de que os dados do usuário devem ser configurados antes que a VM seja ligada pela primeira vez. Dessa forma, você precisará fornecê-los ao criar a instância ou, se desejar criar a VM com antecedência, a VM deverá estar no estado poweredOff até que você configure os dados do usuário para ela. Por exemplo, se estiver usando a CLI do govc:

Criar uma VM pela primeira vez

govc vm.create \ -on=true \ -c=2 \ -m=4096 \ -net.adapter=<network-adapter> \ -net=<network-name> \ -e guestinfo.userdata.encoding="base64" \ -e guestinfo.userdata="$(base64 -w0 settings.toml)" \ -template=<template-name> \ <vm-name>

Atualizar dados do usuário para uma VM existente

govc vm.create \ -on=false \ -c=2 \ -m=4096 \ -net.adapter=<network-adapter> \ -net=<network-name> \ -template=<template-name> \ <vm-name> govc vm.change -vm <vm-name> \ -e guestinfo.userdata="$(base64 -w0 settings.toml)" \ -e guestinfo.userdata.encoding="base64" govc vm.power -on <vm-name>

Nas seções acima, a opção -e guestinfo.userdata.encoding="base64" especifica que os dados do usuário são codificados em base64. A opção -e guestinfo.userdata passa o conteúdo codificado em base64 do arquivo settings.toml como dados do usuário para a instância do Bottlerocket. Substitua os espaços reservados por seus valores específicos, como o modelo OVA do Bottlerocket e detalhes da rede.

Etapa 3: verificar a conexão do nó híbrido

Depois que a instância do Bottlerocket for iniciada, ela tentará se juntar ao seu cluster do Amazon EKS. Você pode verificar a conexão no console do Amazon EKS navegando até a guia Computação do seu cluster ou executando o seguinte comando:

kubectl get nodes
Importante

Seus nós terão o status Not Ready, o que é esperado e se deve à falta de uma CNI em execução nos nós híbridos. Se os nós não tiverem se unido ao cluster, consulte Solução de problemas de nós híbridos.

Etapa 4: configurar uma CNI para nós híbridos

Para preparar os nós híbridos para executar aplicações, continue com as etapas em Configurar a CNI para nós híbridos.