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?
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
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano