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 conexternalIPs
son diferentes de la dirección IP externa asignada a un servicio de tipoLoadBalancer
por un proveedor de nube.
Para obtener más información sobre los servicios de Kubernetes, consulte ServicioexternalIPs
en una especificación de servicio.
-
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
-
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
-
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. -
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
-
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. -
Si su clúster no está en la región de AWS
us-west-2
, reemplaceus-west-2
,602401143452
yamazonaws.com
en el archivo con los siguientes comandos. Antes de ejecutar los comandos, sustituya elregion-code
y111122223333
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
-
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.