Esta seção fornece instruções para implementar um balanceador de carga para seu cluster de gateway usando serviços da AWS. Começando pela configuração de um AWS Elastic Kubernetes Service (EKS), cluster o guia cobre a configuração do IAM, implantação do AWS Load Balancer Controller, instalação do Controle de Pipeline e etapas de validação.
Para implementar o AWS ALB para seu cluster de gateway:
- Configurar cluster EKS
- Configurar funções e políticas do IAM
- Conectar EKS
- Criar função IAM para AWS ALB
- Criar controlador AWS ALB
- Instalar Controle de Pipeline
- Validar AWS ALB
- Testar e otimizar carga
Configurar cluster EKS
Efetue login na AWS:
- Selecione a região desejada para implantação do EKS no dropdown no canto superior direito.
Acesse o Elastic Kubernetes Service (EKS):
- Procure por EKS na caixa de pesquisa da AWS e abra o Elastic Kubernetes Service. É aqui que você gerenciará seu cluster do Kubernetes.
Criar cluster:
Clique em Create Cluster e selecione as opções de configuração:
- Escolha Configuração rápida (com Modo automático EKS) para uma configuração simplificada.
- Forneça os detalhes necessários: nome, versão Kubernetes , função do IAM Cluster , função do IAM do nó, VPC e sub-redes. Se as funções não estiverem prontas, use "Criar função recomendada" sugerido pela AWS.
Clique em Create para iniciar a criação do cluster. Isso configura a infraestrutura fundamental para seu ambiente Kubernetes.
Após a criação do cluster, configure entradas de acesso para o usuário atual para gerenciar permissões.
Entradas de gerenciamento de identidade e acesso (IAM)
Criar entrada de acesso:
- Selecione o nome de recurso principal da Amazon (ARN) do IAM para definir quem pode acessar o cluster.
- Escolha o tipo de Standard IAM Access para permissões de usuário típicas.
- Crie a entrada de acesso para estabelecer o acesso do usuário.
Adicionar políticas de acesso:
Anexe as seguintes políticas à entrada de acesso do IAM para conceder as permissões necessárias:
AmazonEKSAdminPolicy
AmazonEKSAutoNodePolicy
AmazonEKSClusterAdminPolicy
AmazonEKSEditPolicy
AmazonEKSNetworkingClusterPolicy
AmazonEKSNetworkingPolicy
AmazonEKSViewPolicy
Conecte o EKS do terminal
Atualizar kubeconfig:
Execute o seguinte comando:
bash$aws eks update-kubeconfig --region ap-south-1 --name pcg-clusterEste comando configura seu cliente Kubernetes local para interagir com o cluster EKS.
Verifique o namespace:
Execute o seguinte comando:
bash$kubectl get namespacesVerifique se o namespace está configurado corretamente, o que é crucial para organizar recursos dentro do cluster.
Provedor associado do IAM OIDC:
Execute o seguinte comando:
bash$eksctl utils associate-iam-oidc-provider --region=ap-south-1 --cluster=pcg-cluster --approveEsta etapa é necessária para habilitar funções do IAM para contas de serviço, aumentando a segurança e o controle de acesso.
Criar função IAM para AWS ALB
Baixe a política do IAM para o controlador AWS ALB:
Execute o seguinte comando para baixar a política:
bash$curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/install/iam_policy.jsonEsta política define permissões para o AWS Load Balancer Controller.
Criar política de IAM:
Execute o seguinte comando para criar a política:
bash$aws iam create-policy \>--policy-name AWSLoadBalancerControllerIAMPolicy \>--policy-document file://iam_policy.jsonIsso cria uma política que pode ser anexada a funções, permitindo que o controlador gerencie balanceadores de carga.
Criar conta de serviço IAM:
Substitua
my-cluster
pelo nome do seu cluster e111122223333
pelo ID da sua conta e execute o seguinte comando:bash$eksctl create iamserviceaccount \>--cluster=my-cluster \>--namespace=kube-system \>--name=aws-load-balancer-controller \>--role-name AmazonEKSLoadBalancerControllerRole \>--attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \>--approveEsta etapa vincula a política do IAM a uma conta de serviço, permitindo que o controlador opere dentro do cluster.
Criar controlador AWS ALB
Adicionar repositório de gráficos Helm:
Execute o seguinte comando para adicionar o repositório de gráficos do Helm:
bash$helm repo add eks https://aws.github.io/eks-chartsIsso adiciona o repositório que contém o gráfico do Helm do AWS Load Balancer Controller.
Atualizar repositório local:
Execute o seguinte comando para atualizar seu repositório Helm local:
bash$helm repo update eksIsso garante que você tenha a versão mais recente dos gráficos para implantação.
Instalar o controlador AWS ALB:
Execute o seguinte comando para instalar o AWS Load Balancer Controller:
bash$helm install aws-load-balancer-controller eks/aws-load-balancer-controller \>-n kube-system \>--set clusterName=pcg-cluster \>--set serviceAccount.create=false \>--set serviceAccount.name=aws-load-balancer-controller \>--set vpcId=<your-vpc-id> \>--set region=<your-region>Substitua
<your-vpc-id>
e<your-region>
pelo seu ID de VPC específico e região da AWS.
Verificar instalação:
Verifique o status da implantação para garantir que o controlador esteja sendo executado corretamente:
bash$kubectl get deployment -n kube-system aws-load-balancer-controllerA saída deve mostrar o controlador como implantado e em execução.
Verifique a versão do gráfico:
Verifique a versão do gráfico Helm instalado:
bash$helm list -n kube-systemIsso garante que você esteja usando a versão correta do AWS Load Balancer Controller.
Instalar Controle de Pipeline
Instale o Controle de Pipeline:
- Use New Relic integração & agente para implantar o Controle de Pipeline dentro do seu cluster do Kubernetes.
- Siga as instruções específicas fornecidas pela New Relic para instalação, garantindo que ela se integre à sua configuração existente.
Crie recursos de entrada do AWS ALB:
Crie dois recursos de entrada separados devido às limitações do protocolo. Entrada de dados APM (HTTP1):
- Lida com o tráfego do agente New Relic APM
- Configurado para protocolo HTTP1
bash$kubectl -n newrelic apply -f apm-ingress.yamlAmostra
apm-ingress.yaml
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: gateway-albnamespace: newreliclabels:test: testannotations:#kubernetes.io/ingress.class: albalb.ingress.kubernetes.io/tags: owning_team=pipeline-control,service=gateway-alb,environment=test# health check stuffalb.ingress.kubernetes.io/healthcheck-protocol: HTTPalb.ingress.kubernetes.io/healthcheck-port: '13133'alb.ingress.kubernetes.io/healthcheck-path: /health/status# pull target out of ALB after 10 seconds of throwing 503salb.ingress.kubernetes.io/healthcheck-interval-seconds: '5'alb.ingress.kubernetes.io/unhealthy-threshold-count: '2'alb.ingress.kubernetes.io/healthcheck-timeout-seconds: '3'alb.ingress.kubernetes.io/healthy-threshold-count: '2'alb.ingress.kubernetes.io/subnets: subnet-09499a12728c84cc0,subnet-0985931c0c134e164,subnet-00adc734c06241fc0alb.ingress.kubernetes.io/scheme: internal# enables HTTP/2alb.ingress.kubernetes.io/load-balancer-attributes: "routing.http2.enabled=true,idle_timeout.timeout_seconds=60"# sets deregistration_delay.timeout_seconds=10 since we wait 10 seconds to pull V out of LB based on failing health checksalb.ingress.kubernetes.io/target-group-attributes: "deregistration_delay.timeout_seconds=10,slow_start.duration_seconds=30"alb.ingress.kubernetes.io/target-type: "ip"alb.ingress.kubernetes.io/backend-protocol: "HTTP"alb.ingress.kubernetes.io/backend-protocol-version: "HTTP1"spec:ingressClassName: albrules:- http:paths:- path: /v1/logspathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4318- path: /v1/metricspathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4318- path: /v1/tracespathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4318- backend:service:name: pipeline-control-gatewayport:number: 8080path: /pathType: PrefixEntrada de dados OpenTelemetry (HTTP2/gRPC):
- Lida com o tráfego do agente OpenTelemetry
- Configurado para protocolo HTTP2/gRPC
bash$kubectl -n newrelic apply -f otlp-ingress.yamlAmostra
otlp-ingress.yaml
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: gateway-alb-otlpnamespace: newreliclabels:test: testannotations:#kubernetes.io/ingress.class: albalb.ingress.kubernetes.io/tags: owning_team=pipeline-control,service=gateway-alb,environment=test# health check stuffalb.ingress.kubernetes.io/healthcheck-protocol: HTTPalb.ingress.kubernetes.io/healthcheck-port: '13133'alb.ingress.kubernetes.io/healthcheck-path: /health/status# pull target out of ALB after 10 seconds of throwing 503salb.ingress.kubernetes.io/healthcheck-interval-seconds: '5'alb.ingress.kubernetes.io/unhealthy-threshold-count: '2'alb.ingress.kubernetes.io/healthcheck-timeout-seconds: '3'alb.ingress.kubernetes.io/healthy-threshold-count: '2'alb.ingress.kubernetes.io/subnets: subnet-09499a12728c84cc0,subnet-0985931c0c134e164,subnet-00adc734c06241fc0alb.ingress.kubernetes.io/scheme: internal# enables HTTP/2alb.ingress.kubernetes.io/load-balancer-attributes: "routing.http2.enabled=true,idle_timeout.timeout_seconds=60"alb.ingress.kubernetes.io/conditions: >[{"field": "http-header","httpHeaderConfig":{"httpHeaderName": "Content-Type", "values":["application/grpc*"]}}]# sets deregistration_delay.timeout_seconds=10 since we wait 10 seconds to pull V out of LB based on failing health checksalb.ingress.kubernetes.io/target-group-attributes: "deregistration_delay.timeout_seconds=10,slow_start.duration_seconds=30"alb.ingress.kubernetes.io/target-type: "ip"alb.ingress.kubernetes.io/backend-protocol: "HTTP"alb.ingress.kubernetes.io/backend-protocol-version: "HTTP2"spec:ingressClassName: albrules:- http:paths:- path: /opentelemetry.proto.collector.logs.v1.LogsService/ExportpathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4317- path: /opentelemetry.proto.collector.metrics.v1.MetricsService/ExportpathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4317- path: /opentelemetry.proto.collector.trace.v1.TraceService/ExportpathType: Prefixbackend:service:name: pipeline-control-gatewayport:number: 4317- backend:service:name: pipeline-control-gatewayport:number: 8080path: /pathType: PrefixDica
Essa abordagem é específica do AWS ALB. Outros provedores cloud podem oferecer suporte a um único recurso de entrada para vários protocolos.
Verifique o recurso de entrada:
Descreva o recurso de entrada para verificar sua configuração:
bash$kubectl -n newrelic describe ingress gateway-alb
Validar AWS ALB
Navegue até EC2 > Load Balancers:
- No AWS Management Console, acesse o serviço EC2 e selecione Load Balancers.
- Verifique se o balanceador de carga foi criado e está configurado corretamente.
Verifique as regras do ouvinte:
- Revise as regras do ouvinte para garantir que elas estejam configuradas para rotear o tráfego adequadamente para sua instância de gateway.
Testar e otimizar carga
Distribuição Traffic de teste:
- Realize testes de carga para garantir que o balanceador de carga distribua efetivamente o tráfego pela instância do gateway.
- Monitore métricas de desempenho para identificar gargalos ou áreas para otimização.
Otimizar configuração:
- Ajuste as configurações com base nos resultados dos testes para melhorar a eficiência e a confiabilidade.
Próxima Etapa
Em seguida, você aprenderá a configurar DNS e certificados de segurança para o AWS ALB.