¿Cómo puedo etiquetar las subredes de Amazon VPC de mi clúster de Amazon EKS para que los balanceadores de carga o los controladores de ingreso las descubran automáticamente?
Quiero implementar balanceadores de carga o controladores de ingreso en las subredes públicas o privadas de mi Amazon Virtual Private Cloud (Amazon VPC). ¿Por qué Kubernetes no puede detectar mis subredes en mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS)?
Descripción breve
El Kubernetes Cloud Controller Manager (cloud-controller-manager) y AWS Load Balancer Controller (aws-load-balancer-controller) consultan las subredes de un clúster para identificarlas. Esta consulta utiliza la siguiente etiqueta como filtro:
kubernetes.io/cluster/cluster-name
Nota: Sustituya cluster-name por el nombre del clúster de Amazon EKS.
Tanto Cloud Controller Manager como AWS Load Balancer Controller requieren que las subredes tengan una de las siguientes etiquetas:
kubernetes.io/role/elb
-o-
kubernetes.io/role/internal-elb
Nota: Si no usa las etiquetas anteriores, Cloud Controller Manager determina si una subred es pública o privada al examinar la tabla de rutas asociada. A diferencia de las subredes privadas, las subredes públicas utilizan una puerta de enlace a Internet para obtener una ruta directa a Internet.
Si no asocia sus subredes a ninguna de las etiquetas y utiliza AWS Load Balancer Controller, recibirá un error.
Por ejemplo, si está solucionando problemas en el servicio de Kubernetes y ejecuta el comando kubectl describe serviceyour-service-name, recibirá el siguiente error:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal EnsuringLoadBalancer 9s (x2 over 14s) service-controller Ensuring load balancer Warning CreatingLoadBalancerFailed 9s (x2 over 14s) service-controller Error creating load balancer (will retry): failed to ensure load balancer for service default/guestbook: could not find any suitable subnets for creating the ELB
Si está solucionando problemas con el controlador de ingreso del equilibrador de carga de aplicaciones y ejecuta el comando kubectl logs your-aws-load-balancer-controller-pod-name, aparecerá el siguiente error:
E0121 22:44:02.864753 1 controller.go:217] 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"}
Nota: Si crea la VPC con eksctl, todas las subredes de esa VPC tienen las etiquetas kubernetes.io/role/elb y kubernetes.io/role/internal-elb.
Resolución
Elija la opción adecuada para etiquetar las subredes:
Para subredes públicas y privadas utilizadas por los recursos del equilibrador de carga
Etiquete todas las subredes públicas y privadas que su clúster usa para los recursos del equilibrador de carga con el siguiente par clave-valor:
Key: kubernetes.io/cluster/cluster-name Value: shared
Nota: Sustituya cluster-name por el nombre del clúster de Amazon EKS. El valor compartido permite que más de un clúster utilice la subred.
Para subredes privadas utilizadas por los equilibradores de carga internos
Para permitir que Kubernetes utilice sus subredes privadas para equilibradores de carga internos, etiquete todas las subredes privadas de su VPC con el siguiente par clave-valor:
Key: kubernetes.io/role/internal-elb Value: 1
Para subredes públicas utilizadas por equilibradores de carga externos
Para permitir que Kubernetes utilice solo subredes etiquetadas para equilibradores de carga externos, etiquete todas las subredes públicas de su VPC con el siguiente par clave-valor:
Key: kubernetes.io/role/elb Value: 1
Nota: Utilice la etiqueta anterior en lugar de utilizar una subred pública en cada zona de disponibilidad.
Información relacionada
Requisitos y consideraciones sobre la VPC y la subred de Amazon EKS
Detección automática de subredes en el sitio web de GitHub
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años