

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Use la AWS Corrija aws:eks:pod actions
<a name="eks-pod-actions"></a>

 Puede usar las acciones **aws:eks:pod** para inyectar errores en los pods de Kubernetes que se ejecutan en sus clústeres de EKS. 

 Cuando se inicia una acción, FIS recupera la [imagen del contenedor del pod de FIS](eks-pod-actions.html#eks-pod-container-images). Luego, esta imagen se usa para crear un pod en el clúster de EKS de destino. El Pod recién creado es responsable de inyectar, controlar y monitorear la falla. En todas las acciones de FIS EKS, excepto en [aws:eks:pod-delete](fis-actions-reference.html#pod-delete), la inyección de errores se consigue mediante el uso de [contenedores efímeros, una función de Kubernetes que permite crear contenedores](https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/) temporales dentro de un pod existente. El contenedor efímero se inicia en el mismo espacio de nombres que el contenedor de destino y ejecuta las tareas de inyección de errores deseadas. Si no se especifica ningún contenedor de destino, se selecciona como destino el primer contenedor de la especificación del Pod. 

![El flujo de trabajo de creación de un pod de FIS muestra la inyección efímera de contenedores en los contenedores de pods de destino.](http://docs.aws.amazon.com/es_es/fis/latest/userguide/images/eks-actions.png)


1.  FIS crea el FIS Pod en el clúster de destino especificado en la plantilla del experimento. 

1.  El FIS Pod crea un contenedor efímero en el pod de destino en el mismo espacio de nombres que el contenedor de destino. 

1.  El contenedor efímero introduce errores en el espacio de nombres del contenedor de destino. 

1.  El pod de FIS controla y monitorea la inyección de errores en el contenedor efímero, y FIS controla y monitorea el pod de FIS. 

 Al finalizar el experimento o si se produce un error, se eliminan el contenedor efímero y el pod de FIS. 

## Acciones
<a name="supported-eks-pod-actions"></a>
+ [aws:eks:pod-cpu-stress](fis-actions-reference.md#pod-cpu-stress)
+ [aws:eks:pod-delete](fis-actions-reference.md#pod-delete)
+ [aws:eks:pod-io-stress](fis-actions-reference.md#pod-io-stress)
+ [aws:eks:pod-memory-stress](fis-actions-reference.md#pod-memory-stress)
+ [aws:eks:pod-network-blackhole-port](fis-actions-reference.md#pod-network-blackhole-port)
+ [aws:eks:pod-network-latency](fis-actions-reference.md#pod-network-latency)
+ [aws:eks:pod-network-packet-loss](fis-actions-reference.md#pod-network-packet-loss)

## Limitaciones
<a name="eks-pod-limitations"></a>
+ Las siguientes acciones no funcionan con: AWS Fargate
  + aws:eks:pod-network-blackhole-port
  + aws:eks:pod-network-latency
  + aws:eks:pod-network-packet-loss
+ Las siguientes acciones no admiten el [modo de red](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/networking-networkmode.html) `bridge`:
  + aws:eks:pod-network-blackhole-port
  + aws:eks:pod-network-latency
  + aws:eks:pod-network-packet-loss
+ Las siguientes acciones requieren permisos de root en el contenedor efímero.
  + aws:eks:pod-network-blackhole-port
  + aws:eks:pod-network-latency
  + aws:eks:pod-network-packet-loss

  El contenedor efímero heredará sus permisos del contexto de seguridad del pod de destino. Si necesitas ejecutar los contenedores del pod como usuario no root, puedes configurar contextos de seguridad independientes para los contenedores del pod de destino.
+ No puede identificar destinos del tipo **aws:eks:pod** en la plantilla de experimento con los ARN de los recursos o las etiquetas de los recursos. Debe identificar los destinos con los parámetros de recursos necesarios.
+ Las acciones aws:eks:pod-network-latency y aws:eks:pod-network-packet-loss no deben ejecutarse en paralelo y dirigirse al mismo pod. Según el valor del parámetro `maxErrors` que especifique, la acción puede terminar en estado completado o de error:
  + Si `maxErrorsPercent` es 0 (predeterminado), la acción finalizará en estado de error.
  + De lo contrario, el error se sumará al presupuesto de `maxErrorsPercent`. Si el número de inyecciones de error no alcanza los `maxErrors` indicados, la acción terminará en estado completado.
  + Puedes identificar estos errores a partir de los registros del contenedor efímero inyectado en el pod de destino. Producirá error con `Exit Code: 16`.
+ La acción aws:eks:pod-network-blackhole-port no debe ejecutarse en paralelo con otras acciones que se dirijan al mismo pod y utilicen el mismo. `trafficType` Se admiten acciones paralelas que utilicen diferentes tipos de tráfico.
+ El FIS solo puede monitorizar el estado de la inyección de errores cuando el de los pods de destino está configurado en esa posición. `securityContext` `readOnlyRootFilesystem: false` Sin esta configuración, todas las acciones del EKS Pod fallarán.

## Requisitos
<a name="eks-pod-requirements"></a>
+ Instálelo AWS CLI en su ordenador. Esto solo es necesario si va a utilizar la AWS CLI para crear roles de IAM. Para obtener más información, consulte [Instalación o actualización de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ Instale **kubectl** en su equipo. Esto solo es necesario para interactuar con el clúster de EKS a fin de configurar o monitorizar la aplicación de destino. Para obtener más información, consulte [https://kubernetes.io/docs/tasks/tools/](https://kubernetes.io/docs/tasks/tools/).
+ La versión de EKS mínima compatible es 1.23.

## Creación de un rol de experimento
<a name="create-experiment-role-eks-pod"></a>

 Para ejecutar un experimento, debe configurar un rol de IAM para dicho experimento. Para obtener más información, consulte [Funciones de IAM para los experimentos de AWS FIS](getting-started-iam-service-role.md). Los permisos necesarios para este rol dependen de la acción que utilice. Consulte las [acciones de AWS FIS que tengan como destino `aws:eks:pod`](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#eks-actions-reference) para encontrar los permisos necesarios para la acción. 

## Configurar la cuenta de servicio de Kubernetes
<a name="configure-service-account"></a>

Configure una cuenta de servicio de Kubernetes para ejecutar experimentos con destinos en el espacio de nombres de Kubernetes especificado. En el siguiente ejemplo, la cuenta de servicio es {{myserviceaccount}} y el espacio de nombres es. {{default}} Tenga en cuenta que default es uno de los espacios de nombres estándar de Kubernetes.

**Para configurar la cuenta de servicio de Kubernetes**

1. Cree un archivo llamado `rbac.yaml` y agregue lo siguiente.

   ```
   kind: ServiceAccount
   apiVersion: v1
   metadata:
     namespace: {{default}}
     name: {{myserviceaccount}}
   
   ---
   kind: Role
   apiVersion: rbac.authorization.k8s.io/v1
   metadata:
     namespace: {{default}}
     name: {{role-experiments}}
   rules:
   - apiGroups: [""]
     resources: ["configmaps"]
     verbs: [ "get", "create", "patch", "delete"]
   - apiGroups: [""]
     resources: ["pods"]
     verbs: ["create", "list", "get", "delete", "deletecollection"]
   - apiGroups: [""]
     resources: ["pods/ephemeralcontainers"]
     verbs: ["update"]
   - apiGroups: [""]
     resources: ["pods/exec"]
     verbs: ["create"]
   - apiGroups: ["apps"]
     resources: ["deployments"]
     verbs: ["get"]
   
   ---
   apiVersion: rbac.authorization.k8s.io/v1
   kind: RoleBinding
   metadata:
     name: bind-role-experiments
     namespace: {{default}}
   subjects:
   - kind: ServiceAccount
     name: {{myserviceaccount}}
     namespace: {{default}}
   - apiGroup: rbac.authorization.k8s.io
     kind: User
     name: {{fis-experiment}}
   roleRef:
     kind: Role
     name: {{role-experiments}}
     apiGroup: rbac.authorization.k8s.io
   ```

1. Ejecute el comando siguiente.

   ```
   kubectl apply -f rbac.yaml
   ```

## Concesión a los usuarios y roles de IAM de acceso a las API de Kubernetes
<a name="grant-k8s-access"></a>

Siga los pasos que se explican en [Asociar las identidades de IAM con los permisos de Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#authentication-modes), en la documentación de **EKS**.

### Opción 1: crear entradas de acceso
<a name="grant-k8s-access-option-1"></a>

Recomendamos utilizar **Access Entries**. Puedes usar el siguiente comando para crear una entrada de acceso que asocie la función de IAM con el usuario de Kubernetes. {{fis-experiment}} Para obtener más información, consulte [Otorgar a los usuarios de IAM acceso a Kubernetes con entradas de acceso de EKS](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html).

```
aws eks create-access-entry \
                 --principal-arn arn:aws:iam::{{123456789012}}:role/{{fis-experiment-role}} \
                 --username {{fis-experiment}} \
                 --cluster-name {{my-cluster}}
```

**importante**  
Para aprovechar las entradas de acceso, el modo de autenticación del clúster de EKS debe configurarse en el modo `API_AND_CONFIG_MAP` o `API`.

### Opción 2: añadir entradas al aws-auth ConfigMap
<a name="grant-k8s-access-option-2"></a>

También puede utilizar el siguiente comando para crear una asignación de identidades. Para obtener más información, consulte [Administrar usuarios y roles de IAM](https://eksctl.io/usage/iam-identity-mappings/) en la documentación de **eksctl**.

```
eksctl create iamidentitymapping \
                 --arn arn:aws:iam::{{123456789012}}:role/{{fis-experiment-role}} \
                 --username {{fis-experiment}} \
                 --cluster {{my-cluster}}
```

**importante**  
Al aprovechar el kit de herramientas eksctl para configurar los mapeos de identidad, se crearán entradas dentro del. `aws-auth` ConfigMap Es importante tener en cuenta que estas entradas generadas no admiten la inclusión de un componente de ruta. En consecuencia, el ARN proporcionado como entrada no debe contener un segmento de ruta (por ejemplo, `arn:aws:iam::123456789012:role/service-role/fis-experiment-role`).

## Imágenes de contenedor de pods
<a name="eks-pod-container-images"></a>

Las imágenes del contenedor Pod proporcionadas por AWS FIS están alojadas en Amazon ECR. Al hacer referencia a una imagen de Amazon ECR, debe usar el URI de imagen completo.

La imagen del contenedor Pod también está disponible en la [galería pública de AWS ECR.](https://gallery.ecr.aws/aws-fis/aws-fis-pod)


| Región de AWS | URI de imagen | 
| --- | --- | 
| Este de EE. UU. (Ohio) | 051821878176.dkr.ecr.us-east-2.amazonaws.com/aws-fis-pod:0.1 | 
| Este de EE. UU. (Norte de Virginia) | 731367659002.dkr.ecr.us-east-1.amazonaws.com/aws-fis-pod:0.1 | 
| Oeste de EE. UU. (Norte de California) | 080694859247.dkr.ecr.us-west-1.amazonaws.com/aws-fis-pod:0.1 | 
| Oeste de EE. UU. (Oregón) | 864386544765.dkr.ecr.us-west-2.amazonaws.com/aws-fis-pod:0.1 | 
| África (Ciudad del Cabo) | 056821267933.dkr.ecr.af-south-1.amazonaws.com/aws-fis-pod:0.1 | 
| Asia-Pacífico (Hong Kong) | 246405402639.dkr.ecr.ap-east-1.amazonaws.com/aws-fis-pod:0.1 | 
| Asia-Pacífico (Mumbai) | 524781661239.dkr.ecr.ap-south-1.amazonaws.com/aws-fis-pod:0.1 | 
| Asia-Pacífico (Osaka) | 148336246925.dkr.ecr.ap-northeast-3.amazonaws.com/aws-fis-pod:0.1 | 
| Asia-Pacífico (Seúl) | 526524659354.dkr.ecr.ap-northeast-2.amazonaws.com/aws-fis-pod:0.1 | 
| Asia-Pacífico (Singapur) | 316401638346.dkr.ecr.ap-southeast-1.amazonaws.com/aws-fis-pod:0.1 | 
| Asia-Pacífico (Sídney) | 488104106298.dkr.ecr.ap-southeast-2.amazonaws.com/aws-fis-pod:0.1 | 
| Asia-Pacífico (Tokio) | 635234321696.dkr.ecr.ap-northeast-1.amazonaws.com/aws-fis-pod:0.1 | 
| Canadá (centro) | 490658072207.dkr.ecr.ca-central-1.amazonaws.com/aws-fis-pod:0.1 | 
| Europa (Fráncfort) | 713827034473.dkr.ecr.eu-central-1.amazonaws.com/aws-fis-pod:0.1 | 
| Europa (Irlanda) | 205866052826.dkr.ecr.eu-west-1.amazonaws.com/aws-fis-pod:0.1 | 
| Europa (Londres) | 327424803546.dkr.ecr.eu-west-2.amazonaws.com/aws-fis-pod:0.1 | 
| Europa (Milán) | 478809367036.dkr.ecr.eu-south-1.amazonaws.com/aws-fis-pod:0.1 | 
| Europa (París) | 154605889247.dkr.ecr.eu-west-3.amazonaws.com/aws-fis-pod:0.1 | 
| Europa (España) | 395402409451.dkr.ecr.eu-south-2.amazonaws.com/aws-fis-pod:0.1 | 
| Europa (Estocolmo) | 263175118295.dkr.ecr.eu-north-1.amazonaws.com/aws-fis-pod:0.1 | 
| Europa (Zúrich) | 604225987275.dkr.ecr.eu-central-2.amazonaws.com/aws-fis-pod:0.1 | 
| Middle East (Bahrain) | 065825543785.dkr.ecr.me-south-1.amazonaws.com/aws-fis-pod:0.1 | 
| Medio Oriente (EAU) | 438374459301.dkr.ecr.me-central-1.amazonaws.com/aws-fis-pod:0.1 | 
| América del Sur (São Paulo) | 767113787785.dkr.ecr.sa-east-1.amazonaws.com/aws-fis-pod:0.1 | 
| AWS GovCloud (US-East) | 246533647532.dkr.ecr.us-gov-east-1.amazonaws.com/aws-fis-pod:0.1 | 
| AWS GovCloud (US-West) | 246529956514.dkr.ecr.us-gov-west-1.amazonaws.com/aws-fis-pod:0.1 | 

## Ejemplo de plantilla de experimento
<a name="example-eks-pod-experiment-template"></a>

A continuación, se muestra un ejemplo de plantilla de experimento para la acción [aws:eks:pod-network-latency](fis-actions-reference.md#pod-network-latency).

```
{
    "description": "Add latency and jitter to the network interface for the target EKS Pods",
    "targets": {
        "myPods": {
            "resourceType": "aws:eks:pod",
            "parameters": {
                "clusterIdentifier": "{{mycluster}}",
                "namespace": "{{default}}",
                "selectorType": "{{labelSelector}}",
                "selectorValue": "{{mylabel=mytarget}}"
            },
            "selectionMode": "{{COUNT(3)}}"
        }
    },
    "actions": {
        "EksPod-latency": {
            "actionId": "aws:eks:pod-network-latency",
            "description": "Add latency",
            "parameters": {
                "kubernetesServiceAccount": "{{myserviceaccount}}",
                "duration": "{{PT5M}}",
                "delayMilliseconds": "{{200}}",
                "jitterMilliseconds": "{{10}}",
                "sources": "{{0.0.0.0/0}}"
            },
            "targets": {
                "Pods": "myPods"
            }
        }
    },
    "stopConditions": [
        {
            "source": "none",
        }
    ],
    "roleArn": "arn:aws:iam::{{111122223333}}:role/{{fis-experiment-role}}",
    "tags": {
        "Name": "EksPodNetworkLatency"
    }
}
```