Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
¿Cómo puedo descubrir automáticamente las subredes utilizadas por mi equilibrador de carga de aplicación en Amazon EKS?
Quiero descubrir automáticamente las subredes que utiliza mi equilibrador de carga de aplicación en Amazon Elastic Kubernetes Service (Amazon EKS).
Descripción corta
Para identificar la subred que usa el equilibrador de carga de aplicación, aws-load-balancer-controller de AWS Load Balancer Controller consulta las subredes del clúster. La consulta utiliza las siguientes etiquetas como filtro:
kubernetes.io/cluster/cluster-name shared kubernetes.io/role/elb 1 OR kubernetes.io/role/internal-elb 1
Nota: Sustituye cluster-name por el nombre del clúster de Amazon EKS.
Para permitir que AWS Load Balancer Controller descubra automáticamente las subredes que utiliza tu equilibrador de carga de aplicación, etiqueta tus subredes.
Resolución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Agregar etiquetas a las subredes
Sigue estos pasos:
- Despliega AWS Load Balancer Controller en tu clúster de Amazon EKS.
- Para comprobar que has instalado correctamente AWS Load Balancer Controller, ejecuta el siguiente comando:
Nota: Si has desplegado AWS Load Balancer Controller en un espacio de nombres diferente, sustituye -n kube-system por el espacio de nombres correcto.kubectl get deployment -n kube-system aws-load-balancer-controller - Crea un recurso de Kubernetes Ingress en tu clúster con la siguiente anotación:
Nota: AWS Load Balancer Controller ayuda a crear equilibradores de carga. El recurso Ingress configura el equilibrador de carga de aplicación para enrutar el tráfico HTTP y HTTPS a diferentes pods del clúster.annotations: kubernetes.io/ingress.class: alb - En las anotaciones de objetos de Ingress, introduce interno para crear un equilibrador de carga interno u orientado a Internet para crear un equilibrador de carga público:
Alternativa:alb.ingress.kubernetes.io/scheme: internal
Nota: Puedes usar etiquetas para la detección automática de subredes en lugar de la anotación manual alb.ingress.kubernetes.io/subnets.alb.ingress.kubernetes.io/scheme: internet-facing
Para las versiones 1.18 y anteriores del clúster, Amazon EKS agrega la siguiente etiqueta a todas las subredes que se introducen durante la creación del clúster:
Nota: Sustituye CLUSTER_NAME por el nombre de tu clúster.kubernetes.io/cluster/CLUSTER_NAME
La etiqueta kubernetes.io/cluster/CLUSTER_NAME solo es necesaria si utilizas la versión 2.1.1 o anterior de AWS Load Balancer Controller. Amazon EKS no agrega ni elimina automáticamente esta etiqueta. Si bien la etiqueta era obligatoria para los clústeres antes de la versión 1.19, permanece en las subredes incluso después de las actualizaciones de los clústeres. - Para comprobar que las subredes tienen las etiquetas correctas, ejecuta el siguiente comando describe-subnets de la AWS CLI:
Nota: Sustituye your-subnet-abcdefghxyz por tu ID de subred.aws ec2 describe-subnets --subnet-ids your-subnet-abcdefghxyz - Para desplegar una aplicación de ejemplo, ejecuta el siguiente comando:
Nota: El comando anterior crea un equilibrador de carga de aplicación debido al objeto Ingress.kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/2048/2048_full.yaml - Para comprobar que Amazon EKS ha creado el recurso Ingress y un equilibrador de carga de aplicación asociado, ejecuta el siguiente comando:
kubectl get ingress/2048-ingress -n game-2048
Solución de errores de etiquetas
Realiza las siguientes acciones en función del error que recibas al usar etiquetas para descubrir subredes automáticamente.
Problemas con los permisos denegados
El rol de AWS Identity and Access Management (IAM) de tu cuenta de AWS para AWS Load Balancer Controller debe tener los permisos necesarios. En caso contrario, recibirás el siguiente mensaje de error:
"{"level":"error","ts":1621443417.9175518,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":" ingress-2048","namespace":" game-2048","error":"couldn't auto-discover subnets: UnauthorizedOperation: You are not authorized to perform this operation.\n\tstatus code: 403, request id: 72ee57ae-f804-4f81-b069-8b04114b67b0"}"
Para resolver este problema, sigue estos pasos:
-
Para comprobar que tu cuenta de servicio está asociada a AWS Load Balancer Controller, ejecuta el siguiente comando:
kubectl get deploy aws-load-balancer-controller -n kube-system -o yaml | grep -i serviceAccountNota: Si has desplegado AWS Load Balancer Controller en un espacio de nombres diferente, sustituye -n kube-system por el espacio de nombres correcto.
Resultado de ejemplo:serviceAccount: aws-load-balancer-controller serviceAccountName: aws-load-balancer-controller -
Para identificar el rol de IAM asociado a la cuenta de servicio que has asociado a AWS Load Balancer Controller, ejecuta el siguiente comando:
kubectl describe sa aws-load-balancer-controller -n kube-system | grep role-arnResultado de ejemplo:
annotations: eks.amazonaws.com/role-arn: arn:aws:iam::abcdefxyz:role/eksctl-cluster18-addon-iamserviceaccount-kub-Role1-abcdefxyz
Nota: Si no usas roles de IAM para cuentas de servicio (IRSA), asegúrate de que el rol de IAM del nodo de trabajo de Amazon EKS tenga los permisos necesarios. Para ver los permisos necesarios, consulta iam_policy.json en el sitio web de GitHub.
Problema de detección de subred única
Recibes uno de los siguientes mensajes de error cuando tu AWS Load Balancer Controller no detecta al menos una subred:
"{"level":"error","ts":1608229710.3212903,"logger":"controller","msg":"Reconciler error","controller":"ingress","name":"ingress-2048","namespace":"game-2048","error":"couldn't auto-discover subnets: unable to resolve at least one subnet"}"
Alternativa:
"kubebuilder/controller "msg"="Reconciler error" "error"="failed to build LoadBalancer configuration due to
retrieval of subnets failed to resolve 2 qualified subnets. Subnets must contain the kubernetes.io/cluster/\u003ccluster name\u003e tag with a value of shared or owned and the kubernetes.io/role/elb tag signifying it should be used for ALBs Additionally, there must be at least 2 subnets with unique availability zones as required by ALBs. Either tag subnets to meet this requirement or use the subnets annotation on the ingress resource to explicitly call out what subnets to use for ALB creation. The subnets that did resolve were []" "controller"="alb-ingress-controller" "request"={"Namespace":"default","Name":"2048-ingress"}"
Para resolver este problema, agrega las etiquetas a tus subredes para permitir que AWS Load Balancer Controller utilice la detección automática para crear un equilibrador de carga.
Para las subredes privadas, agrega la siguiente etiqueta:
kubernetes.io/role/internal-elb 1
Para las subredes públicas, agrega la siguiente etiqueta:
kubernetes.io/role/elb 1
Nota: Puedes asignar subredes manualmente a tu equilibrador de carga con la anotación alb.ingress.kubernetes.io/subnets. Para ver los permisos necesarios, consulta iam_policy.json en el sitio web de GitHub.
Etiqueta las subredes con el siguiente formato, sin espacios iniciales ni finales:
- En Clave, introduce kubernetes.io/cluster/your-cluster-name.
- En Valor, introduce compartido o propio.
Si usas la versión 2.1.1 o anterior de AWS Load Balancer Controller, debes etiquetar las subredes en el formato anterior. El etiquetado es opcional en las versiones 2.1.2 o posteriores.
Se recomienda etiquetar una subred en los siguientes casos:
- Tienes varios clústeres que se ejecutan en la misma nube virtual privada (VPC).
- Dispones de varios servicios de AWS que comparten subredes en una VPC.
- Quieres tener más control sobre dónde se asignan los equilibradores de carga para cada clúster.
Errores de detección de subredes múltiples
Recibes uno de los siguientes mensajes de error cuando tu AWS Load Balancer Controller no detecta dos o más redes cualificadas:
"{"level":"error","ts":"2024-08-12T19:01:27Z","msg":"Reconciler error","controller":"ingress","object":{"name":"ingress-2048","namespace":"game-2048"},"namespace":"game-2048","name":"ingress-2048","reconcileID":"1234567","error":"couldn't auto-discover subnets: unable to resolve at least one subnet (2 match VPC and tags: [kubernetes.io/role/internal-elb], 2 have fewer than 8 free IPs)"}"
Para resolver este problema, sigue estos pasos:
- Confirma que tienes al menos dos subredes en dos zonas de disponibilidad diferentes.
Nota: Este es un requisito para crear un equilibrador de carga de aplicación. Puedes crear un equilibrador de carga de red con una sola subred. - Para cada subred, especifica un bloque de CIDR con una máscara de bits de al menos /27, como 10.0.0.0/27, y al menos ocho direcciones IP libres.
- Confirma que has formateado correctamente las etiquetas de las subredes. Por ejemplo, las etiquetas no pueden tener espacios iniciales ni finales.
- Temas
- Containers
- Etiquetas
- Amazon Elastic Kubernetes Service
- Idioma
- Español
Vídeos relacionados


Contenido relevante
- preguntada hace 2 meses
- preguntada hace 9 meses
- preguntada hace 2 meses
- preguntada hace un año
OFICIAL DE AWSActualizada hace 3 años
OFICIAL DE AWSActualizada hace 7 meses