

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

# Restricción del tráfico de red de pods con políticas de red de Kubernetes
<a name="cni-network-policy-configure"></a>

Puede usar la política de red de Kubernetes para restringir el tráfico de red que entra y sale de pods. Para obtener más información, consulte [Network Policies](https://kubernetes.io/docs/concepts/services-networking/network-policies/) en la documentación de Kubernetes.

Debe configurar lo siguiente para poder utilizar esta característica:

1. Configure la aplicación de políticas al inicio del pod. Esto se hace en el de contenedor `aws-node` del `DaemonSet` de la CNI de la VPC.

1. Habilite el parámetro de política de red para el complemento.

1. Configuración del clúster para que use la política de red de Kubernetes

Antes de empezar, revise las consideraciones. Para obtener más información, consulte [Consideraciones](cni-network-policy.md#cni-network-policy-considerations).

## Requisitos previos
<a name="cni-network-policy-prereqs"></a>

A continuación se indican los requisitos previos de esta característica:

### Versión mínima del clúster
<a name="cni-network-policy-minimum"></a>

Un clúster existente de Amazon EKS. Para implementar uno, consulte [Introducción a Amazon EKS](getting-started.md). El clúster debe estar ejecutando una de las versiones de Kubernetes y versiones de la plataforma que se enumeran en la tabla siguiente. Tenga en cuenta que también se admite cualquier versión de Kubernetes y de la plataforma posterior a las enumeradas. Para comprobar la versión actual de Kubernetes, reemplace *my-cluster* en el siguiente comando por el nombre del clúster y, a continuación, ejecute el comando modificado:

```
aws eks describe-cluster --name my-cluster --query cluster.version --output text
```


| Versión de Kubernetes | Versión de la plataforma | 
| --- | --- | 
|   `1.27.4`   |   `eks.5`   | 
|   `1.26.7`   |   `eks.6`   | 

### Versión mínima de CNI de VPC
<a name="cni-network-policy-minimum-vpc"></a>

Para crear políticas de red de administración y políticas de red de Kubernetes estándar, debe ejecutar la versión `1.21` del complemento CNI de VPC. Puede comprobar qué versión utiliza actualmente con el siguiente comando.

```
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
```

Si su versión es anterior a la `1.21`, actualice [Cómo actualizar la CNI de Amazon VPC (complemento de Amazon EKS)](vpc-add-on-update.md) a la versión `1.21` o posterior.

### Versión mínima del kernel de Linux
<a name="cni-network-policy-minimum-linux"></a>

Sus nodos deben tener la versión del núcleo de Linux `5.10` o posterior. Puede comprobar la versión del núcleo con `uname -r`. Si utiliza las versiones más recientes de las AMI optimizadas para Amazon EKS de Amazon Linux, las AMI optimizadas para Amazon EKS de Amazon Linux acelerado y las AMI de Bottlerocket, estas ya tienen la versión de kernel necesaria.

La versión `v20231116` de la AMI de Amazon Linux acelerada y optimizada de Amazon EKS o posterior tiene una versión `5.10` de núcleo.

## Paso 1: configuración de la aplicación de políticas al inicio del pod
<a name="cni-network-policy-configure-policy"></a>

El complemento CNI de Amazon VPC para Kubernetes configura las políticas de red para los pods en paralelo con el aprovisionamiento de los pods. A menos que se hayan configurado todas las políticas para el nuevo pod, los contenedores del nuevo pod se iniciarán con una *política de permisos predeterminada*. Esto se denomina *modo estándar*. Una política de permisos predeterminada significa que se permite todo el tráfico de entrada y salida desde y hacia los nuevos pods. Por ejemplo, no se aplicará ninguna regla de firewall a los pods (se permite todo el tráfico) hasta que el nuevo pod se actualice con las políticas activas.

Con la variable `NETWORK_POLICY_ENFORCING_MODE` configurada en `strict`, los pods que utilizan la CNI de la VPC se inician con una *política de denegación predeterminada* y, a continuación, se configuran las políticas. Esto se denomina *modo estricto*. En el modo estricto, debe tener una política de red para cada punto de conexión del clúster al que los pods necesiten acceder. Tenga en cuenta que este requisito se aplica a los pods de CoreDNS. La política de denegación predeterminada no está configurada para los pods con redes de Host.

Para cambiar la política de red predeterminada, debe configurar la variable de entorno `NETWORK_POLICY_ENFORCING_MODE` como `strict` en el contenedor `aws-node` del `DaemonSet` de la CNI de la VPC.

```
env:
  - name: NETWORK_POLICY_ENFORCING_MODE
    value: "strict"
```

## Paso 2: habilite el parámetro de política de red para el complemento
<a name="enable-network-policy-parameter"></a>

La característica de la política de red utiliza el puerto `8162` del nodo para las métricas de manera predeterminada. Además, la característica utiliza el puerto `8163` para las sondas de estado. Si ejecuta otra aplicación en los nodos o dentro de pods que necesite utilizar estos puertos, la aplicación no se puede ejecutar. En la versión de CNI de VPC `v1.14.1` o posterior, puede cambiar estos puertos.

Use el siguiente procedimiento para habilitar el parámetro de política de red para el complemento.

### Consola de administración de AWS
<a name="cni-network-policy-console"></a>

1. Abra la [consola de Amazon EKS](https://console.aws.amazon.com/eks/home#/clusters).

1. En el panel de navegación izquierdo, seleccione **Clústeres** y, a continuación, seleccione el nombre del clúster para el que desea configurar el complemento CNI de Amazon VPC.

1. Elija la pestaña **Complementos**.

1. Seleccione la casilla situada en la parte superior derecha del cuadro y, a continuación, elija **Edit** (Editar).

1. En la página **Configuración de `Amazon VPC CNI` **, haga lo siguiente:

   1. Seleccione la versión `v1.14.0-eksbuild.3` o posterior en la lista **Versión**.

   1. Seleccione **Ajustes de configuración opcionales**.

   1. Introduzca la clave JSON `"enableNetworkPolicy":` y el valor `"true"` en **Valores de configuración**. El texto resultante debe ser un objeto JSON válido. Si esta clave y este valor son los únicos datos del cuadro de texto, rodee la clave y el valor entre corchetes `{ }`.

      El siguiente ejemplo tiene activada la característica de la política de red y las métricas y sondas de estado están configuradas con los números de puertos predeterminados:

      ```
      {
          "enableNetworkPolicy": "true",
          "nodeAgent": {
              "healthProbeBindAddr": "8163",
              "metricsBindAddr": "8162"
          }
      }
      ```

### Helm
<a name="cni-network-helm"></a>

Si ha instalado el complemento CNI de Amazon VPC para Kubernetes mediante `helm`, puede actualizar la configuración para cambiar los puertos.

1. Ejecute el siguiente comando para cambiar los puertos. Establezca el número de puerto en el valor para la clave `nodeAgent.metricsBindAddr` o `nodeAgent.healthProbeBindAddr`, respectivamente.

   ```
   helm upgrade --set nodeAgent.metricsBindAddr=8162 --set nodeAgent.healthProbeBindAddr=8163 aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
   ```

### kubectl
<a name="cni-network-policy-kubectl"></a>

1. Abra el `DaemonSet` de `aws-node` en el editor.

   ```
   kubectl edit daemonset -n kube-system aws-node
   ```

1. Reemplace los números de puertos en los siguientes argumentos de comando de `args:` del contenedor `aws-network-policy-agent` del manifiesto del daemonset de `aws-node` de CNI de VPC.

   ```
       - args:
               - --metrics-bind-addr=:8162
               - --health-probe-bind-addr=:8163
   ```

## Paso 3: configuración del clúster para que use las políticas de red de Kubernetes
<a name="cni-network-policy-setup"></a>

Esta configuración se puede usar para un complemento de Amazon EKS o para un complemento autoadministrado.

### Complemento de Amazon EKS
<a name="cni-network-policy-setup-procedure-add-on"></a>

Con la AWS CLI, puede configurar el clúster para que utilice las políticas de red de Kubernetes mediante la ejecución del siguiente comando. Reemplace `my-cluster` por el nombre del clúster y el ARN del rol de IAM por el rol que va a usar.

```
aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \
    --service-account-role-arn arn:aws:iam::123456789012:role/AmazonEKSVPCCNIRole \
    --resolve-conflicts PRESERVE --configuration-values '{"enableNetworkPolicy": "true"}'
```

Para configurarlo mediante la Consola de administración de AWS, siga los pasos que se indican a continuación:

1. Abra la [consola de Amazon EKS](https://console.aws.amazon.com/eks/home#/clusters).

1. En el panel de navegación izquierdo, seleccione **Clústeres** y, a continuación, seleccione el nombre del clúster para el que desea configurar el complemento CNI de Amazon VPC.

1. Elija la pestaña **Complementos**.

1. Seleccione la casilla situada en la parte superior derecha del cuadro y, a continuación, elija **Edit** (Editar).

1. En la página **Configuración de `Amazon VPC CNI` **, haga lo siguiente:

   1. Seleccione la versión `v1.14.0-eksbuild.3` o posterior en la lista **Versión**.

   1. Seleccione **Ajustes de configuración opcionales**.

   1. Introduzca la clave JSON `"enableNetworkPolicy":` y el valor `"true"` en **Valores de configuración**. El texto resultante debe ser un objeto JSON válido. Si esta clave y este valor son los únicos datos del cuadro de texto, rodee la clave y el valor entre corchetes `{ }`. En el siguiente ejemplo se muestra que la política de red está habilitada:

      ```
      { "enableNetworkPolicy": "true" }
      ```

      En la siguiente captura de pantalla se muestra un ejemplo de este escenario.  
![\[Con <shared id="consolelong"/> se muestra el complemento de CNI de VPC con la política de red en la configuración opcional.\]](http://docs.aws.amazon.com/es_es/eks/latest/userguide/images/console-cni-config-network-policy.png)

### Complemento autoadministrado
<a name="cni-network-policy-setup-procedure-self-managed-add-on"></a>

Si ha instalado el complemento CNI de Amazon VPC para Kubernetes mediante `helm`, puede actualizar la configuración para permitir la política de red.

1. Ejecute el siguiente comando para habilitar la política de red.

   ```
   helm upgrade --set enableNetworkPolicy=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
   ```

1. Abra el `ConfigMap` de `amazon-vpc-cni` en el editor.

   ```
   kubectl edit configmap -n kube-system amazon-vpc-cni -o yaml
   ```

1. Añada la línea siguiente al `data` de `ConfigMap`.

   ```
   enable-network-policy-controller: "true"
   ```

   Una vez que haya añadido la línea, su `ConfigMap` debería tener un aspecto similar al siguiente ejemplo.

   ```
   apiVersion: v1
    kind: ConfigMap
    metadata:
     name: amazon-vpc-cni
     namespace: kube-system
    data:
     enable-network-policy-controller: "true"
   ```

1. Abra el `DaemonSet` de `aws-node` en el editor.

   ```
   kubectl edit daemonset -n kube-system aws-node
   ```

   1. Sustituya el `false` por `true` en el argumento del comando `--enable-network-policy=false` en el `args:` del contenedor `aws-network-policy-agent` en el manifiesto del daemonset de `aws-node` del CNI de VPC.

      ```
           - args:
              - --enable-network-policy=true
      ```

## Paso 4. Siguientes pasos
<a name="cni-network-policy-setup-procedure-confirm"></a>

Después de completar la configuración, confirme que los pods `aws-node` se estén ejecutando en el clúster.

```
kubectl get pods -n kube-system | grep 'aws-node\|amazon'
```

Un ejemplo de salida sería el siguiente.

```
aws-node-gmqp7                                          2/2     Running   1 (24h ago)   24h
aws-node-prnsh                                          2/2     Running   1 (24h ago)   24h
```

Hay 2 contenedores en los pods `aws-node` en las versiones `1.14` y posteriores. En versiones anteriores, y si la política de red está deshabilitada, solo hay un contenedor en los pods de `aws-node`.

Ahora puede implementar políticas de red de Kubernetes en su clúster.

Para implementar políticas de red de Kubernetes, puede crear objetos `NetworkPolicy` o `ClusterNetworkPolicy` de Kubernetes e implementarlos en su clúster. Los objetos `NetworkPolicy` están limitados a un espacio de nombres, mientras que los objetos `ClusterNetworkPolicy` se pueden limitar a todo el clúster o varios espacios de nombres. Implemente políticas para permitir o denegar el tráfico entre pods en función de los selectores de etiquetas, los espacios de nombres y los rangos de direcciones IP. Para obtener más información sobre cómo crear objetos `NetworkPolicy`, consulte [Network Policies](https://kubernetes.io/docs/concepts/services-networking/network-policies/#networkpolicy-resource) en la documentación de Kubernetes.

La aplicación de objetos `NetworkPolicy` de Kubernetes se implementa con Extended Berkeley Packet Filter (eBPF). En relación con las implementaciones basadas en `iptables`, ofrece características de rendimiento y latencia más bajas, que incluyen una menor utilización de la CPU y evitan las búsquedas secuenciales. Además, las sondas de eBPF proporcionan acceso a datos en contexto que ayudan a depurar problemas complejos a nivel del núcleo y a mejorar la observabilidad. Amazon EKS es compatible con un exportador basado en eBPF que aprovecha las sondas para registrar los resultados de las políticas en cada nodo y exportar los datos a recopiladores de registros externos para facilitar la depuración. Para obtener más información, consulte la [documentación de eBPF](https://ebpf.io/what-is-ebpf/#what-is-ebpf).