Restringir las direcciones IP externas que se pueden asignar a un servicio. - Amazon EKS

Restringir las direcciones IP externas que se pueden asignar a un servicio.

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

    kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
  2. Compruebe que 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
  3. 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.

  4. Descargue el manifiesto de webhook de la IP externa. También puede ver el código fuente para el webhook en GitHub.

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/docs/externalip-webhook.yaml
  5. 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.

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

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