

 **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
<a name="hybrid-nodes-bottlerocket"></a>

Este tópico descreve como conectar nós híbridos que executam o Bottlerocket a um cluster do Amazon EKS. O [Bottlerocket](https://aws.amazon.com/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](https://github.com/bottlerocket-os/bottlerocket#settings) 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](hybrid-nodes-cni.md) para preparar os nós híbridos para executar aplicações.

## Pré-requisitos
<a name="_prerequisites"></a>

Antes de conectar nós híbridos ao cluster do Amazon EKS, certifique-se de ter concluído as etapas de pré-requisitos.
+ Você tem conectividade de rede do ambiente on-premises para a região da AWS que hospeda o cluster do Amazon EKS. Consulte [Preparar a rede para nós híbridos](hybrid-nodes-networking.md) para obter mais informações.
+ Você criou o perfil do IAM de nós híbridos e configurou o provedor de credenciais on-premises (ativações híbridas do AWS Systems Manager ou o AWS IAM Roles Anywhere). Consulte [Preparar as credenciais para nós híbridos](hybrid-nodes-creds.md) para obter mais informações.
+ Você criou o cluster do Amazon EKS habilitado para nós híbridos. Consulte [Criar um cluster do Amazon EKS com nós híbridos](hybrid-nodes-cluster-create.md) para obter mais informações.
+ Você associou o perfil do IAM de nós híbridos às permissões de controle de acesso por perfil (RBAC) do Kubernetes. Consulte [Preparar o acesso ao cluster para nós híbridos](hybrid-nodes-cluster-prep.md) para obter mais informações.

## Etapa 1: criar o arquivo TOML de configurações do Bottlerocket
<a name="_step_1_create_the_bottlerocket_settings_toml_file"></a>

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](https://bottlerocket.dev/en). 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](https://bottlerocket.dev/en/os/1.51.x/api/settings-index) são as configurações disponíveis para o Bottlerocket 1.51.x).

### SSM
<a name="_ssm"></a>

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.](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names) 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](https://github.com/bottlerocket-os/bottlerocket-admin-container#authenticating-with-the-admin-container) 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](https://github.com/bottlerocket-os/bottlerocket-bootstrap-container) 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
<a name="_iam_roles_anywhere"></a>

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.](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names) 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](https://github.com/bottlerocket-os/bottlerocket-admin-container#authenticating-with-the-admin-container) 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](https://github.com/bottlerocket-os/bottlerocket-bootstrap-container) 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
<a name="_step_2_provision_the_bottlerocket_vsphere_vm_with_user_data"></a>

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
<a name="_creating_vm_for_the_first_time"></a>

```
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
<a name="_updating_user_data_for_an_existing_vm"></a>

```
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
<a name="_step_3_verify_the_hybrid_node_connection"></a>

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](hybrid-nodes-troubleshooting.md).

## Etapa 4: configurar uma CNI para nós híbridos
<a name="_step_4_configure_a_cni_for_hybrid_nodes"></a>

Para preparar os nós híbridos para executar aplicações, continue com as etapas em [Configurar a CNI para nós híbridos](hybrid-nodes-cni.md).