

 **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.

# Captura del tráfico de red un nodo administrado mediante kubectl y S3
<a name="auto-get-tcpdump"></a>

Aprenda a recuperar los registros de nodos de un nodo administrado por Amazon EKS que tenga el agente de supervisión de nodos. El agente ejecuta tcpdump en el nodo, comprime los archivos de captura y los carga en su bucket de S3.

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

Asegúrese de contar con lo siguiente:
+ Un clúster del modo automático de Amazon EKS con el agente de supervisión de nodos. Para obtener más información, consulte [Detección de los problemas de estado de los nodos y reparación automática de los nodos](node-health.md).
+ La herramienta de línea de comandos `kubectl` instalada y configurada para comunicarse con el clúster.
+ AWS CLI instalada y sesión iniciada con los permisos suficientes para crear buckets y objetos de S3.
+ Una versión reciente de Python 3 instalada.
+ El SDK de AWS para Python 3 y Boto 3 instalado.
+ La biblioteca PyYAML instalada (`pip install pyyaml`).

## Paso 1: Creación de un destino de bucket de S3 (opcional)
<a name="_step_1_create_s3_bucket_destination_optional"></a>

Si aún no tiene un bucket de S3 para almacenar los archivos capturados, cree uno. Sustituya los valores de *bucket-name* y *region* por sus valores.

```
aws s3api create-bucket --bucket <bucket-name> \
    --region <region> \
    --create-bucket-configuration LocationConstraint=<region>
```

**nota**  
El parámetro `--create-bucket-configuration` es obligatorio para todas las regiones excepto `us-east-1`.

## Paso 2: Inicio de la captura de paquetes
<a name="_step_2_start_packet_capture"></a>

Utilice el script `start-capture.py` del [repositorio del agente de supervisión de nodos](https://github.com/aws/eks-node-monitoring-agent) (`tools/start-capture.py`) para generar credenciales de S3 prefirmadas, crear el recurso `NodeDiagnostic` y aplicarlo al clúster.

1. Identifique el nodo del que desea capturar el tráfico.

   ```
   kubectl get nodes
   ```

1. Guarde el script [start-capture.py](https://github.com/aws/eks-node-monitoring-agent/blob/main/tools/start-capture.py) del repositorio del agente de supervisión de nodos en su máquina local y ejecútelo. Sustituya los valores de *<bucket-name>* y *<node-name>* por sus valores.

   ```
   python3 start-capture.py --bucket <bucket-name> --node <node-name>
   ```

   Opciones comunes:

   ```
   # Capture for 5 minutes on eth0 with a filter
   python3 start-capture.py --bucket <bucket-name> --node <node-name> \
       --duration 5m --interface eth0 --filter "tcp port 443"
   
   # Preview the YAML without applying
   python3 start-capture.py --bucket <bucket-name> --node <node-name> --dry-run
   ```

   El script requiere que Python 3 con `boto3` y `pyyaml` esté instalado, así como `kubectl` configurado para su clúster.

   El script genera un recurso `NodeDiagnostic` como el siguiente. Este ejemplo se proporciona como referencia; tenga en cuenta que los campos `upload` requieren credenciales POST de S3 prefirmadas que el script genera mediante programación.

   ```
   apiVersion: eks.amazonaws.com/v1alpha1
   kind: NodeDiagnostic
   metadata:
     name: <node-name>                    # Required: node instance ID
   spec:
     packetCapture:
       duration: "30s"                       # Required: capture duration (max 1h)
       # interface: "eth0"                   # Optional: default is primary ENI. Use "any" for all interfaces
       # filter: "tcp port 443"             # Optional: tcpdump filter expression
       # chunkSizeMB: 10                    # Optional: file rotation size in MB (1-100, default: 10)
       upload:                               # Required: pre-signed S3 POST credentials
         url: "https://<bucket>.s3.amazonaws.com/"
         fields:
           key: "captures/<node-name>/${filename}"
           # ... other pre-signed POST fields (generated by the script)
   ```

## Paso 3: Supervisión del progreso de la captura.
<a name="_step_3_monitor_capture_progress"></a>

Compruebe el estado de la captura.

```
kubectl describe nodediagnostic <node-name>
```

El estado mostrará:
+  `Running` mientras la captura está en proceso.
+  `Completed` con el motivo `Success` cuando finalice la captura y se carguen todos los archivos.
+  `Completed` con el motivo `Failure` si la captura encontró errores.

Para ver el estado completo, incluido `captureID` (utilizado para la identificación de la ruta de S3):

```
kubectl get nodediagnostic <node-name> -o jsonpath='{.status.captureStatuses}'
```

## Paso 4: Descarga de los archivos de captura de S3
<a name="_step_4_download_capture_files_from_s3"></a>

Una vez que se muestre el estado `Success`, descargue los archivos de captura de S3.

```
aws s3 cp s3://<bucket-name>/captures/ ./captures/ --recursive
```

Los archivos están en formato pcap comprimido con gzip. Descomprima y analice con tcpdump o Wireshark:

```
gunzip captures/*.gz
tcpdump -r captures/capture.pcap0000 -n
```

## Paso 5: Eliminar
<a name="_step_5_clean_up"></a>

 Los recursos `NodeDiagnostic` no se eliminan automáticamente. Limpie después de haber obtenido sus archivos de captura. Al eliminar el recurso mientras se está realizando una captura, la captura se detendrá inmediatamente.

```
kubectl delete nodediagnostic <node-name>
```

## Opciones de configuración y comportamiento
<a name="_configuration_options_and_behavior"></a>

Para obtener la referencia completa de las especificaciones de `packetCapture`, las opciones de configuración y los detalles del comportamiento, consulte la [documentación de captura de paquetes](https://github.com/aws/eks-node-monitoring-agent/blob/main/docs/packet-capture.adoc) en el repositorio de agentes de supervisión de nodos.