

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Conexión de nodos híbridos con Bottlerocket
<a name="hybrid-nodes-bottlerocket"></a>

Este tema describe cómo conectar nodos híbridos que ejecutan Bottlerocket a un clúster de Amazon EKS. [Bottlerocket](https://aws.amazon.com/bottlerocket/) es una distribución de Linux de código abierto patrocinada y respaldada por AWS. Bottlerocket está diseñado específicamente para alojar cargas de trabajo de contenedores. Con Bottlerocket, puede mejorar la disponibilidad de las implementaciones en contenedores y reducir los costos operativos mediante la automatización de las actualizaciones de la infraestructura de contenedores. Bottlerocket incluye solo el software esencial para ejecutar los contenedores, lo que mejora el uso de los recursos, reduce las amenazas a la seguridad y reduce los gastos de administración.

Solo se admiten las variantes de VMware de Bottlerocket a partir de la versión v1.37.0 con los Nodos híbridos de EKS. Las variantes de VMware de Bottlerocket están disponibles para las versiones v1.28 y posteriores de Kubernetes. Las imágenes del sistema operativo para estas variantes incluyen kubelet, containerd, aws-iam-authenticator y otros requisitos previos de software para los Nodos híbridos de EKS. Puede configurar estos componentes mediante un archivo de [configuración](https://github.com/bottlerocket-os/bottlerocket#settings) de Bottlerocket que incluya datos de usuario codificados en base64 para los contenedores de arranque y administración de Bottlerocket. Configurar estos ajustes permite que Bottlerocket utilice el proveedor de credenciales de los nodos híbridos para autenticarlos en el clúster. Después de que los nodos híbridos se unan al clúster, aparecerán con el estado `Not Ready` en la consola de Amazon EKS y en herramientas compatibles con Kubernetes, como `kubectl`. Tras completar los pasos que se indican en esta página, proceda a [Configuración de una CNI para nodos híbridos](hybrid-nodes-cni.md) para preparar los nodos híbridos para ejecutar aplicaciones.

## Requisitos previos
<a name="_prerequisites"></a>

Antes de conectar los nodos híbridos al clúster de Amazon EKS, compruebe que se cumplen los requisitos previos indicados.
+ Dispone de conectividad de red entre el entorno en las instalaciones con la región de AWS que aloja el clúster de Amazon EKS. Para obtener más información, consulte [Cómo preparar las redes para los nodos híbridos](hybrid-nodes-networking.md).
+ Ha creado el rol de IAM de los nodos híbridos y ha configurado el proveedor de credenciales en las instalaciones (activaciones híbridas de AWS Systems Manager o AWS IAM Roles Anywhere). Para obtener más información, consulte [Cómo preparar las credenciales para los nodos híbridos](hybrid-nodes-creds.md).
+ Ha creado el clúster de Amazon EKS habilitado para nodos híbridos. Para obtener más información, consulte [Cómo crear un clúster de Amazon EKS con nodos híbridos](hybrid-nodes-cluster-create.md).
+ Ha asociado el rol de IAM de nodos híbridos a los permisos de control de acceso basado en roles (RBAC) de Kubernetes. Para obtener más información, consulte [Cómo preparar el acceso al clúster para los nodos híbridos](hybrid-nodes-cluster-prep.md).

## Paso 1: creación del archivo TOML de configuración de Bottlerocket
<a name="_step_1_create_the_bottlerocket_settings_toml_file"></a>

Para configurar Bottlerocket para nodos híbridos, debe crear un archivo `settings.toml` con la configuración necesaria. El contenido del archivo TOML variará según el proveedor de credenciales que utilice (SSM o IAM Roles Anywhere). Este archivo se transferirá como datos de usuario al aprovisionar la instancia de Bottlerocket.

**nota**  
Los archivos TOML que se proporcionan a continuación solo representan la configuración mínima necesaria para inicializar una máquina VMWare de Bottlerocket como un nodo en un clúster de EKS. Bottlerocket ofrece una amplia gama de opciones de configuración para abordar varios casos de uso diferentes, por lo que, para obtener más opciones de configuración además de la inicialización del nodo híbrido, consulte la [documentación de Bottlerocket](https://bottlerocket.dev/en) a fin de obtener una lista completa de todas las configuraciones documentadas para la versión de Bottlerocket que esté utilizando (por ejemplo, [aquí](https://bottlerocket.dev/en/os/1.51.x/api/settings-index) están todas las configuraciones disponibles para Bottlerocket 1.51.x).

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

Si utiliza AWS Systems Manager como proveedor de credenciales, cree un archivo `settings.toml` con el siguiente contenido:

```
[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
```

Reemplace los marcadores de posición con los siguientes valores:
+  `<cluster-name>`: el nombre del clúster de Amazon EKS.
+  `<api-server-endpoint>`: el punto de conexión del servidor API del clúster.
+  `<cluster-certificate-authority>`: el paquete CA codificado en base64 del clúster.
+  `<region>`: la región de AWS donde se aloja el clúster, por ejemplo, “us-east-1”.
+  `<hostname>`: el nombre de host de la instancia de Bottlerocket, que se utilizará también como nombre del nodo. Puede ser cualquier valor único de su elección, pero debe cumplir con las [convenciones de nomenclatura de objetos de Kubernetes](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names). Además, el nombre de host que utilice no puede tener más de 64 caracteres. NOTA: Al utilizar el proveedor SSM, este nombre de host y nombre de nodo serán reemplazados por el ID de instancia administrada (por ejemplo, ID `mi-*`) después de que la instancia se registre en SSM.
+  `<base64-encoded-admin-container-userdata>`: el contenido codificado en base64 de la configuración del contenedor de administración de Bottlerocket. Al habilitar el contenedor de administración, se puede conectar a la instancia de Bottlerocket mediante SSH para explorar y depurar el sistema. Aunque esta configuración no es obligatoria, recomendamos habilitarla para facilitar la resolución de problemas. Consulte la [documentación del contenedor de administración de Bottlerocket](https://github.com/bottlerocket-os/bottlerocket-admin-container#authenticating-with-the-admin-container) para obtener más información sobre cómo autenticarse con el contenedor de administración. El contenedor de administración acepta entradas de usuario y clave SSH en formato JSON, por ejemplo,

```
{
  "user": "<ssh-user>",
  "ssh": {
    "authorized-keys": [
      "<ssh-authorized-key>"
    ]
  }
}
```
+  `<base64-encoded-bootstrap-container-userdata>`: el contenido codificado en base64 de la configuración del contenedor de arranque Bottlerocket. Consulte la [documentación del contenedor de arranque de Bottlerocket](https://github.com/bottlerocket-os/bottlerocket-bootstrap-container) para obtener más información sobre su configuración. El contenedor de arranque se encarga de registrar la instancia como una instancia administrada de AWS SSM y de unirla como nodo de Kubernetes en el clúster de Amazon EKS. Los datos de usuario que se transmiten al contenedor de arranque adoptan la forma de una invocación de comando que acepta como entrada el código de activación híbrida SSM y el ID que creó previamente:

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

### IAM Roles Anywhere
<a name="_iam_roles_anywhere"></a>

Si utiliza AWS IAM Roles Anywhere como proveedor de credenciales, cree un archivo `settings.toml` con el siguiente contenido:

```
[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>"
```

Reemplace los marcadores de posición con los siguientes valores:
+  `<cluster-name>`: el nombre del clúster de Amazon EKS.
+  `<api-server-endpoint>`: el punto de conexión del servidor API del clúster.
+  `<cluster-certificate-authority>`: el paquete CA codificado en base64 del clúster.
+  `<region>`: la región de AWS que aloja el clúster (por ejemplo, “us-east-1”)
+  `<hostname>`: el nombre de host de la instancia de Bottlerocket, que se utilizará también como nombre del nodo. Puede ser cualquier valor único de su elección, pero debe cumplir con las [convenciones de nomenclatura de objetos de Kubernetes](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names). Además, el nombre de host que utilice no puede tener más de 64 caracteres. NOTA: Cuando se utiliza el proveedor IAM-RA, el nombre del nodo debe coincidir con el CN del certificado en el host si ha configurado la política de confianza del rol de IAM de Nodos híbridos con la condición de recurso `"sts:RoleSessionName": "${aws:PrincipalTag/x509Subject/CN}"`.
+  AWS: el contenido codificado en base64 del archivo de configuración de `<base64-encoded-aws-config-file>`. El contenido del archivo debe ser el siguiente:

```
[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>`: el contenido codificado en base64 de la configuración del contenedor de administración de Bottlerocket. Al habilitar el contenedor de administración, se puede conectar a la instancia de Bottlerocket mediante SSH para explorar y depurar el sistema. Aunque esta configuración no es obligatoria, recomendamos habilitarla para facilitar la resolución de problemas. Consulte la [documentación del contenedor de administración de Bottlerocket](https://github.com/bottlerocket-os/bottlerocket-admin-container#authenticating-with-the-admin-container) para obtener más información sobre cómo autenticarse con el contenedor de administración. El contenedor de administración acepta entradas de usuario y clave SSH en formato JSON, por ejemplo,

```
{
  "user": "<ssh-user>",
  "ssh": {
    "authorized-keys": [
      "<ssh-authorized-key>"
    ]
  }
}
```
+  `<base64-encoded-bootstrap-container-userdata>`: el contenido codificado en base64 de la configuración del contenedor de arranque Bottlerocket. Consulte la [documentación del contenedor de arranque de Bottlerocket](https://github.com/bottlerocket-os/bottlerocket-bootstrap-container) para obtener más información sobre su configuración. El contenedor de arranque se encarga de crear el certificado de host de IAM Roles Anywhere y los archivos de clave privada del certificado en la instancia. Estas serán consumidas por el `aws_signing_helper` para obtener credenciales temporales para autenticarse con el clúster de Amazon EKS. Los datos de usuario que se transmiten al contenedor de arranque adoptan la forma de una invocación de comando que acepta como entrada el contenido del certificado y la clave privada que creó previamente:

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

## Paso 2: aprovisionamiento de la máquina virtual Bottlerocket vSphere con datos de usuario
<a name="_step_2_provision_the_bottlerocket_vsphere_vm_with_user_data"></a>

Una vez que haya creado el archivo TOML, transmítalo como datos de usuario durante la creación de la máquina virtual en vSphere. Tenga en cuenta que los datos de usuario se deben configurar antes de que la máquina virtual se encienda por primera vez. Por lo tanto, deberá proporcionarlos al crear la instancia o, si desea crear la máquina virtual con anticipación, esta debe permanecer en estado apagado (poweredOff) hasta que configure los datos de usuario. Por ejemplo, si utiliza la CLI de `govc`:

### Cómo crear la máquina virtual por primera 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>
```

### Cómo actualizar los datos de usuario de una máquina virtual 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>
```

En las secciones anteriores, la opción `-e guestinfo.userdata.encoding="base64"` especifica que los datos de usuario están codificados en base64. La opción `-e guestinfo.userdata` transmite el contenido codificado en base64 del archivo `settings.toml` como datos de usuario a la instancia de Bottlerocket. Reemplace los marcadores de posición con los valores específicos, como la plantilla OVA de Bottlerocket y los detalles de la red.

## Paso 3: verificación de la conexión del nodo híbrido
<a name="_step_3_verify_the_hybrid_node_connection"></a>

Después de que la instancia de Bottlerocket inicie, intentará unirse al clúster de Amazon EKS. Para verificar la conexión, ingrese a la consola de Amazon EKS y diríjase a la pestaña Computación del clúster o ejecute el siguiente comando:

```
kubectl get nodes
```

**importante**  
Los nodos tendrán el estado `Not Ready`, que es el esperado, y se debe a la falta de una CNI que se ejecute en los nodos híbridos. Si los nodos no se unieron al clúster, consulte [Solución de problemas relacionados con los nodos híbridos](hybrid-nodes-troubleshooting.md).

## Paso 4: Configuración de una CNI para los nodos híbridos
<a name="_step_4_configure_a_cni_for_hybrid_nodes"></a>

Para que los nodos híbridos estén preparados para ejecutar aplicaciones, continúe con los pasos que se indican en [Configuración de una CNI para nodos híbridos](hybrid-nodes-cni.md).