Como posso marcar as sub-redes Amazon VPC em meu cluster do Amazon EKS para descoberta automática de sub-redes por balanceadores de carga ou controladores de entrada?

4 minuto de leitura
0

Quero implantar balanceadores de carga ou controladores de ingress nas sub-redes públicas ou privadas da minha Amazon Virtual Private Cloud (Amazon VPC). Por que minhas sub-redes não podem ser descobertas pelo Kubernetes em meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS)?

Breve descrição

O Kubernetes Cloud Controller Manager (cloud-controller-manager) e o AWS Load Balancer Controller (aws-load-balancer-controller) consultam as sub-redes de um cluster para identificá-las. Essa consulta usa a seguinte tag como filtro:

kubernetes.io/cluster/cluster-name

Observação: Substitua cluster-name pelo nome do seu cluster do Amazon EKS.

O Cloud Controller Manager e o AWS Load Balancer Controller exigem que as sub-redes tenham uma das tags a seguir:

kubernetes.io/role/elb

-ou-

kubernetes.io/role/internal-elb

Observação: Se você não usar as tags anteriores, o Cloud Controller Manager determinará se uma sub-rede é pública ou privada examinando a tabela de rotas associada. Diferentemente das sub-redes privadas, as sub-redes públicas usam um gateway da Internet para obter uma rota direta para a Internet.

Se você não associar suas sub-redes a nenhuma das tags e estiver usando o AWS Load Balancer Controller, receberá um erro.

Por exemplo, se você estiver solucionando problemas no serviço Kubernetes e executar o comando kubectl describe service your-service-name, receberá o seguinte erro:

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

Se você estiver solucionando problemas com o Application Load Balancer Ingress Controller e executar o comando kubectl logs your-aws-load-balancer-controller-pod-name, receberá o seguinte erro:

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"}

Observação: Se você criar a VPC usando eksctl, todas as sub-redes dessa VPC terão as tags kubernetes.io/role/elb e kubernetes.io/role/internal-elb.

Resolução

Selecione a opção apropriada para marcar suas sub-redes:

Para sub-redes públicas e privadas usadas pelos recursos do balanceador de carga

Marque todas as sub-redes públicas e privadas que seu cluster usa para recursos do balanceador de carga com o seguinte par de valores-chave:

Key: kubernetes.io/cluster/cluster-name
Value: shared

Observação: Substitua cluster-name pelo nome do seu cluster do Amazon EKS. O valor compartilhado permite que mais de um cluster use a sub-rede.

Para sub-redes privadas usadas por balanceadores de carga internos

Para permitir que o Kubernetes use suas sub-redes privadas para balanceadores de carga internos, marque todas as sub-redes privadas em sua VPC com o seguinte par de valores-chave:

Key: kubernetes.io/role/internal-elb
Value: 1

Para sub-redes públicas usadas por balanceadores de carga externos

Para permitir que o Kubernetes use somente sub-redes marcadas para balanceadores de carga externos, marque todas as sub-redes públicas em sua VPC com o seguinte par de valores-chave:

Key: kubernetes.io/role/elb
Value: 1

Observação: Use a tag anterior em vez de usar uma sub-rede pública em cada zona de disponibilidade.


Informações relacionadas

Requisitos e considerações do Amazon EKS VPC e da sub-rede

Subnet Auto Discovery no site do GitHub

Balanceamento de carga de aplicativos no Amazon EKS

AWS OFICIAL
AWS OFICIALAtualizada há um ano