

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

# Cómo restringir las direcciones IP externas que se pueden asignar a los servicios
<a name="restrict-service-external-ip"></a>

Se puede acceder a los servicios de Kubernetes desde el interior de un clúster a través de:
+ Una dirección IP de clúster asignada automáticamente por Kubernetes.
+ Cualquier dirección IP que especifique para la propiedad `externalIPs` en una especificación de servicio. Las direcciones IP externas no son administradas por Kubernetes y son responsabilidad del administrador del clúster. Las direcciones IP externas especificadas con `externalIPs` son diferentes de la dirección IP externa asignada a un servicio de tipo `LoadBalancer` por un proveedor de nube.

Para obtener más información sobre los servicios de Kubernetes, consulte [Servicio](https://kubernetes.io/docs/concepts/services-networking/service/) en la documentación de Kubernetes. Puede restringir las direcciones IP que se pueden especificar para `externalIPs` en una especificación de servicio.

1. Implemente `cert-manager` para administrar certificados de webhook. Para obtener más información, consulte la documentación de [cert-manager](https://cert-manager.io/docs/).

   ```
   kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
   ```

1. Compruebe que se están ejecutando los pods de `cert-manager`.

   ```
   kubectl get pods -n cert-manager
   ```

   Un ejemplo de salida sería el siguiente.

   ```
   NAME                                       READY   STATUS    RESTARTS   AGE
   cert-manager-58c8844bb8-nlx7q              1/1     Running   0          15s
   cert-manager-cainjector-745768f6ff-696h5   1/1     Running   0          15s
   cert-manager-webhook-67cc76975b-4v4nk      1/1     Running   0          14s
   ```

1. Revise sus servicios existentes para asegurarse de que ninguno de ellos tenga asignadas direcciones IP externas que no estén incluidas en el bloque de CIDR al que desea limitar las direcciones.

   ```
   kubectl get services -A
   ```

   Un ejemplo de salida sería el siguiente.

   ```
   NAMESPACE                      NAME                                    TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)         AGE
   cert-manager                   cert-manager                            ClusterIP      10.100.102.137   <none>          9402/TCP        20m
   cert-manager                   cert-manager-webhook                    ClusterIP      10.100.6.136     <none>          443/TCP         20m
   default                        kubernetes                              ClusterIP      10.100.0.1       <none>          443/TCP         2d1h
   externalip-validation-system   externalip-validation-webhook-service   ClusterIP      10.100.234.179   <none>          443/TCP         16s
   kube-system                    kube-dns                                ClusterIP      10.100.0.10      <none>          53/UDP,53/TCP   2d1h
   my-namespace                   my-service                              ClusterIP      10.100.128.10    192.168.1.1     80/TCP          149m
   ```

   Si alguno de los valores son direcciones IP que no están dentro del bloque al que desea restringir el acceso, deberá cambiar las direcciones para que estén dentro del bloque y volver a implementar los servicios. Por ejemplo, el servicio `my-service` de la salida anterior tiene asignada una dirección IP externa que no está dentro del ejemplo de bloque de CIDR en el paso 5.

1. Descargue el manifiesto de webhook de la IP externa. También puede ver el [código fuente para el webhook](https://github.com/kubernetes-sigs/externalip-webhook) en GitHub.

   ```
   curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/docs/externalip-webhook.yaml
   ```

1. Especifica los bloques de CIDR. Abra el archivo descargado en el editor y elimine el `\#` al comienzo de las siguientes líneas.

   ```
   #args:
   #- --allowed-external-ip-cidrs=10.0.0.0/8
   ```

   Reemplace `10.0.0.0/8` por su propio bloque de CIDR. Puede especificar tantos bloques como desee. Si especifica varios bloques, agregue una coma entre bloques.

1. Si su clúster no está en la región de AWS `us-west-2`, reemplace `us-west-2`, `602401143452` y `amazonaws.com` en el archivo con los siguientes comandos. Antes de ejecutar los comandos, sustituya el *region-code* y *111122223333* por el valor de su región de AWS de la lista que se encuentra en [Visualización de los registros de imágenes de contenedores de Amazon para los complementos de Amazon EKS](add-ons-images.md).

   ```
   sed -i.bak -e 's|602401143452|111122223333|' externalip-webhook.yaml
   sed -i.bak -e 's|us-west-2|region-code|' externalip-webhook.yaml
   sed -i.bak -e 's|amazonaws.com||' externalip-webhook.yaml
   ```

1. Aplique el manifiesto al clúster.

   ```
   kubectl apply -f externalip-webhook.yaml
   ```

   Se producirá un error al intentar implementar un servicio en el clúster con una dirección IP especificada para `externalIPs` que no está incluida en los bloques que especificó en el paso Especificar bloques CIDR.