Subredes de balanceador de carga

En esta página se describe cómo funciona GKE on AWS con AWS para elegir subredes para balanceadores de carga de servicio y cómo etiquetar subredes para que se detecten automáticamente durante la creación de balanceadores de carga de servicio.

Por qué debes especificar subredes

Al crear balanceadores de carga, AWS necesita saber en qué subredes colocarlos. La subred determina las zonas de disponibilidad, las direcciones IP y los endpoints del balanceador de carga.

Normalmente, los balanceadores de carga se asignan a una subred por cada zona de disponibilidad que contenga un grupo de nodos. AWS necesita al menos una subred disponible para crear un balanceador de carga de red (NLB) y al menos dos subredes para crear un balanceador de carga de aplicaciones (ALB).

Todas las subredes de AWS son públicas (con IPs públicas y una ruta a la pasarela de Internet de la VPC) o privadas (no tienen estas características). Los balanceadores de carga orientados a Internet deben estar ubicados en subredes públicas. Los balanceadores de carga internos pueden residir en subredes públicas o privadas.

Si no hay subredes etiquetadas disponibles

Si GKE en AWS necesita crear un balanceador de carga y no hay subredes etiquetadas disponibles o con capacidad, puede que cree el balanceador de carga en otra subred. Para evitarlo y controlar en qué subredes se colocan tus balanceadores de carga, debes etiquetar todas tus subredes.

Detección automática de subredes

GKE en AWS detectará automáticamente las subredes que se van a usar en un balanceador de carga. Para ello, enumerará todas las subredes de la VPC y seleccionará hasta una subred de cada zona de disponibilidad.

Para que GKE on AWS detecte automáticamente una subred, esta debe cumplir los siguientes requisitos:

  • Tener la etiqueta kubernetes.io/role/elb (para un balanceador de carga orientado a Internet)
  • Tener la etiqueta kubernetes.io/role/internal-elb (para un balanceador de carga interno)
  • No contienen ninguna etiqueta con el prefijo kubernetes.io/cluster/ o contienen la etiqueta kubernetes.io/cluster/CLUSTER_UID, donde CLUSTER_UID es el UID del clúster actual.

Además, una subred que se vaya a usar con un balanceador de carga orientado a Internet debe tener una ruta a la pasarela de Internet de la VPC.

Si hay varias subredes en una zona de disponibilidad que cumplen los requisitos del balanceador de carga, GKE en AWS clasifica las subredes por su ID de subred.

Etiqueta tus subredes para el uso previsto

Para que GKE on AWS detecte automáticamente una subred para un balanceador de carga, debes aplicar una de las dos etiquetas a la subred para indicar su disponibilidad. que son los siguientes:

  • kubernetes.io/role/elb: aplica esta etiqueta a tu subred para marcarla como disponible para un balanceador de carga orientado a Internet. Debe ser una subred pública con una ruta a la pasarela de Internet de tu VPC. Asigna el valor 1 a la etiqueta. Para aplicar esta etiqueta, ejecuta el siguiente comando:

    aws ec2 create-tags \
      --resources SUBNET_ID \
      --tags "Key=kubernetes.io/role/elb,Value=1"
    
  • kubernetes.io/role/internal-elb: aplica esta etiqueta a tu subred para marcarla como disponible para un balanceador de carga interno. Asigna el valor 1 a la etiqueta. Para aplicar esta etiqueta, ejecuta el siguiente comando:

    aws ec2 create-tags \
      --resources SUBNET_ID \
      --tags Key=kubernetes.io/role/internal-elb,Value=1
    

Haz los cambios siguientes:

  • SUBNET_ID: el ID de la subred que estás etiquetando

Después de asignar una etiqueta kubernetes.io/role a tu subred, también puedes etiquetarla con una o varias etiquetas kubernetes.io/cluster/CLUSTER_UID, donde CLUSTER_UID es el UID de un clúster de GKE en AWS. De esta forma, los clústeres que no figuren en una de estas etiquetas no podrán detectar automáticamente la subred para que la usen sus balanceadores de carga.

Consulta la documentación de Amazon sobre el comando aws ec2 create-tags para obtener más información sobre el comando aws ec2 create-tags.

Solución de problemas

El problema más habitual con la configuración del balanceador de carga es que las subredes estén etiquetadas incorrectamente. Esto puede provocar que el algoritmo de detección automática seleccione las subredes incorrectas. Para diagnosticar y resolver este problema, sigue estos pasos:

  • Si vas a crear un balanceador de carga orientado a Internet, asegúrate de que haya al menos una subred pública en cada una de las zonas de disponibilidad que contengan un pool de nodos y de que las subredes estén etiquetadas con kubernetes.io/role/elb.

  • Si vas a crear un balanceador de carga interno, asegúrate de que haya al menos una subred en cada una de las zonas de disponibilidad que contengan un grupo de nodos y de que las subredes estén etiquetadas con kubernetes.io/role/internal-elb.

  • Comprueba si las subredes que quieres que se detecten automáticamente tienen etiquetas con el formato kubernetes.io/cluster/CLUSTER_UID. Si una subred tiene alguna etiqueta de este tipo que nombre un clúster, la subred solo podrán descubrirla automáticamente los clústeres con ese nombre. Para solucionar este problema, elimina todas las etiquetas de nombre de clúster (para que la subred se detecte automáticamente desde cualquier clúster) o añade una etiqueta de nombre de clúster con el UID de tu clúster de GKE en AWS y el valor shared.

  • Consulta el historial de eventos de Kubernetes con el siguiente comando:

    kubectl get events -A | grep LoadBalancer
    

    Por ejemplo, el mensaje de evento could not find any suitable subnets for creating the ELB indica que no se han podido detectar automáticamente subredes. Si recibes esta advertencia, asegúrate de que tus subredes y sus etiquetas sean correctas y estén completas.

  • Para enumerar las subredes que se pueden detectar automáticamente para los balanceadores de carga orientados a Internet, ejecuta el siguiente comando:

    aws ec2 describe-subnets \
      --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/elb,Values=*"
    

    Sustituye VPC_ID por el ID de tu VPC.

  • Para enumerar las subredes que se pueden detectar automáticamente para los balanceadores de carga internos, ejecuta el siguiente comando:

    aws ec2 describe-subnets \
      --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/internal-elb,Values=*"
    

Pasos siguientes