¿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?

4 minutos de lectura
0

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

Equilibrio de carga de aplicaciones en Amazon EKS

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año