Subredes del balanceador de cargas

En esta página, se describe cómo funciona GKE on AWS con AWS a fin de elegir subredes para los balanceadores de cargas de Service y cómo etiquetar las subredes que se descubrirán de forma automática durante la creación del balanceador de cargas de Service.

Por qué debes especificar subredes

Cuando se crean balanceadores de cargas, AWS necesita saber en qué subredes colocarlos. La subred determina las zonas de disponibilidad del balanceador de cargas, las direcciones IP y los extremos.

Por lo general, los balanceadores de cargas se asignan a una subred para cada zona de disponibilidad que contenga un grupo de nodos. AWS necesita un mínimo de una subred disponible para crear un balanceador de cargas de red (NLB) y un mínimo de dos subredes para un balanceador de cargas de aplicaciones (ALB).

Todas las subredes de AWS son públicas (con IP públicas y una ruta a la puerta de enlace de Internet de la VPC) o privadas (sin estas características). Los balanceadores de cargas orientados a Internet deben estar ubicados en subredes públicas. Los balanceadores de cargas internos pueden residir en subredes públicas o privadas.

Si no hay subredes etiquetadas disponibles

Si GKE on AWS necesita crear un balanceador de cargas y ninguna subred etiquetada está disponible o tiene capacidad, podría crear el balanceador de cargas en otra subred. Para evitar esto y controlar en qué subredes se colocan los balanceadores de cargas, debes etiquetar todas las subredes.

Descubrimiento automático de subredes

GKE on AWS detectará de forma automática las subredes que se usarán para un balanceador de cargas mediante la enumeración de todas las subredes de la VPC y la selección de hasta una subred de cada zona de disponibilidad.

Para que GKE on AWS descubra de forma automática una subred, la subred debe hacer lo siguiente:

  • Estar etiquetada con kubernetes.io/role/elb (para un balanceador de cargas orientado a Internet)
  • Estar etiquetada con kubernetes.io/role/internal-elb (para un balanceador de cargas interno)
  • Contener etiquetas con el prefijo kubernetes.io/cluster/ o contener la etiqueta kubernetes.io/cluster/CLUSTER_UID, en la que CLUSTER_UID es el UID del clúster actual.

Además, una subred destinada a usarse con un balanceador de cargas orientado a Internet debe tener una ruta a la puerta de enlace de Internet de la VPC.

Si hay varias subredes en una zona de disponibilidad que cumplen con los requisitos del balanceador de cargas, GKE on AWS clasifica las subredes en orden según su ID de subred.

Etiqueta las subredes para su uso previsto

Para que GKE on AWS descubra de forma automática una subred para un balanceador de cargas, debes aplicar una de dos etiquetas a la subred a fin de indicar su disponibilidad. Son los siguientes:

  • kubernetes.io/role/elb: Aplica esta etiqueta a la subred a fin de marcarla como disponible para un balanceador de cargas orientado a Internet. Debe ser una subred pública con una ruta a la puerta de enlace de Internet de tu VPC. Establece la etiqueta en 1. Para aplicar este recurso, 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 la subred a fin de marcarla como disponible para un balanceador de cargas interno. Establece el valor de la etiqueta en 1. Para aplicar este recurso, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

  • SUBNET_ID: Es el ID de la subred que etiquetas.

Después de asignar una etiqueta kubernetes.io/role a tu subred, también puedes etiquetarla con una o más etiquetas kubernetes.io/cluster/CLUSTER_UID, en las que CLUSTER_UID es el UID de un clúster de GKE on AWS. Esto impide que los clústeres que no aparecen en una de estas etiquetas detecten de forma automática la subred para que la usen sus balanceadores de cargas.

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

Soluciona problemas

El problema más común con la configuración del balanceador de cargas es que las subredes se etiquetan de forma incorrecta. Esto puede hacer que el algoritmo de descubrimiento automático seleccione las subredes incorrectas. Para diagnosticar y resolver este problema, haz lo siguiente:

  • Si creas un balanceador de cargas 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 grupo de nodos y que las subredes estén etiquetadas con kubernetes.io/role/elb.

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

  • Verifica si las subredes que deseas que se descubran de forma automática tienen etiquetas con el formato kubernetes.io/cluster/CLUSTER_UID. Si una subred tiene alguna de las etiquetas que nombran a un clúster, solo los clústeres con ese nombre podrán detectar la subred de forma automática. Para resolver esto, borra todas las etiquetas de nombre de clúster (para permitir que la subred se detecte de forma automática en cualquier clúster) o agrega una etiqueta de nombre de clúster con sus UID de GKE on AWS y un valor de shared.

  • Verifica 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 pudieron descubrir las subredes de forma automática. Si recibes esta advertencia, asegúrate de que tus subredes y sus etiquetas sean correctas y estén completas.

  • A fin de enumerar las subredes que se pueden detectar de forma automática para los balanceadores de cargas 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=*"
    

    Reemplaza VPC_ID por el ID de tu VPC.

  • A fin de enumerar las subredes que se pueden detectar de forma automática para los balanceadores de cargas internos, ejecuta lo siguiente:

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

Próximos pasos